int main (int argc, char *argv[]) { smi_region_info_t reginfo; smi_memcpy_handle mcpy_h = NULL; int rank, size, lock_id, shreg_id[2], i, j, lock_errors; int *shreg_addr[2], *error_cnts, val; double avg_time, time, *timings; SMI_Init(&argc, &argv); SMI_Proc_rank(&rank); SMI_Proc_size(&size); if (size != 2) { if (rank == 0) { printf ("please run %s with 2 processes\n", argv[0]); } SMI_Abort(-1); } for (i = 0; i < size; i++) { SMI_Init_reginfo (®info, SHREG_SIZE, 0, i, SMI_ADPT_DEFAULT, 0, 0, NULL); if (SMI_Create_shreg (SMI_SHM_UNDIVIDED|SMI_SHM_NONFIXED, ®info, &shreg_id[i], (void **)&shreg_addr[i]) != SMI_SUCCESS) { j = SHREG_SIZE >> 10; printf ("[%d] Could not allocate %d kB of shared memory.\n", rank, j); SMI_Abort(-1); } }
int main (int argc, char *argv[]) { int rank, size, reg_size; char c; SMI_Init(&argc, &argv); SMI_Proc_rank(&rank); SMI_Proc_size(&size); /* default values */ reg_size = REGION_SIZE; while((c = getopt(argc, argv, "s:?")) != EOF) { switch(c) { case 's': reg_size = atoi(optarg) * 1024; break; case '?': if (rank == 0) { printf("'regions' tests the creation of different SMI region types.\n"); printf("usage: regions [-s region_size in kB] [-?]\n"); } SMI_Finalize(); return 0; break; } } test_undivided(reg_size, size, rank); SMI_Finalize(); return 0; }
static void smi_init(void) { int i; SMI_Init(); SMI_PowerOn(); if (do_smi() == 1) { for (i=0; i< SMI_LARB_NUMBER; i++) { // TODO: need to re-check here if ((i==3) || (i==4)) continue; SMI_Disable(i); SMI_SetSMIBMCfg(i, smi_larb[i].port, smi_larb[i].desttype, smi_larb[i].rwtype); if (smi_larb[i].mode == 1) { enable_master_cnt += 1; } } //SMI_SetMonitorControl(0); //SMIBMCfgEx default SMI_SetMonitorControl(&monitorctrl); for (i=0; i< SMI_COMM_NUMBER; i++) { SMI_Comm_Disable(i); SMI_SetCommBMCfg(i, smi_comm[i].port, smi_comm[i].desttype, smi_comm[i].rwtype); if (smi_comm[i].mode == 1) { enable_master_cnt += 1; } } } else if (do_smi() == 2) { toggle_idx = 0; toggle_port(toggle_idx); } else if (do_smi() == 3) { toggle_master_max = toggle_master_min = -1; for (i=0; i<SMI_ALLPORT_COUNT*4; i++) { if (allport[i].master == toggle_master) { if (toggle_master_min == -1) { toggle_master_max = i; toggle_master_min = i; } if (i > toggle_master_max) { toggle_master_max = i; } if (i < toggle_master_min) { toggle_master_min = i; } } } printk("smi toggle min=%d, max=%d\n",toggle_master_min,toggle_master_max); if (toggle_master_min >=0 ) { toggle_idx = toggle_master_min; toggle_port(toggle_idx); } } else if (do_smi() == 4) { } }
int main (int argc, char *argv[]) { smi_region_info_t reginfo; smi_error_t error; int rank, size, i, nbr_entries = NBR_ENTRIES; node_t* pRoot; int count; SMI_Init(&argc, &argv); SMI_Proc_rank(&rank); SMI_Proc_size(&size); /* create the shared memory region */ SMI_Init_reginfo(®info, SEGSIZE, 0, 0, SMI_ADPT_DEFAULT, 0, 0, NULL); error = SMI_Create_shreg(SMI_SHM_UNDIVIDED, ®info, &iShregId, (void **)&pShreg); if (error != SMI_SUCCESS) { fprintf(stderr,"could not create shared region (%d)\n",error); SMI_Abort(-1); } /* use this region with the memory manager for dynamic allocation */ error = SMI_Init_shregMMU(iShregId); if (error != SMI_SUCCESS) { fprintf(stderr,"could not init shregMMU (%d)\n",error); SMI_Abort(-1); } list_init(&pRoot); for(i = 1; i <= nbr_entries; i++) { list_append(pRoot, i+rank*1000); #if SPECIAL_RACE_CONDITION /* force raceconditions */ usleep(i); #endif } SMI_Barrier(); if (rank == 0) { count = list_print(pRoot); if (count == nbr_entries * size) printf("The mutex seems to work\n"); else printf("Some entries are missing!\n"); } SMI_Barrier(); list_remove(pRoot); SMI_Free_shreg(iShregId); SMI_Finalize(); return (0); }
int main (int argc, char *argv[]) { int rank, size; char name[NAMELEN]; int pid; size_t len = NAMELEN; SMI_Init(&argc, &argv); SMI_Proc_rank(&rank); SMI_Proc_size(&size); SMI_Get_node_name(name, &len); SMI_Query(SMI_Q_SYS_PID, rank, &pid); printf ("Hello World - this is process %d of %d, running on %s (pid: %d)\n", rank, size, name,pid); SMI_Finalize(); }
int main(int argc, char **argv) { smi_region_info_t regdesc; smi_error_t error; int i, j, comp; double t0,t1; error = SMI_Init(&argc, &argv); if (error != SMI_SUCCESS) { ECHO ("SMI_Init() failed"); exit (-1); } SMI_Proc_size(&nbr_procs); SMI_Proc_rank(&my_rank); nbr_elements = VECTOR_SIZE; sgmt_size = nbr_elements / nbr_procs; if (nbr_elements % nbr_procs != 0) sgmt_size++; swap = (int *) malloc(2 * sgmt_size * sizeof(int)); if (swap == NULL) { ECHO("Not enough local memory!"); SMI_Abort(-1); } SMI_Init_reginfo(®desc, sgmt_size * sizeof(int) * nbr_procs, 0, 0, SMI_ADPT_DEFAULT, 0, 0, NULL); regdesc.adapter = SMI_ADPT_SMP; error = SMI_Create_shreg(SMI_SHM_BLOCKED, ®desc, &sgmt_id, (void **) (&sgmt)); if (error != SMI_SUCCESS) { ECHO("Not enough shared memory!\n"); SMI_Abort(-1); } SMI_Init_reginfo(®desc, sgmt_size * sizeof(int) * nbr_procs, 0, 0, SMI_ADPT_DEFAULT, 0, 0, NULL); regdesc.adapter = SMI_ADPT_SMP; error = SMI_Create_shreg(SMI_SHM_BLOCKED, ®desc, &sgmt_id2, (void **) &(sgmt2)); if (error != SMI_SUCCESS) { ECHO("Not enough shared memory!\n"); SMI_Abort(-1); } ECHO("generating random elements..."); for (i = 0; i < sgmt_size; i++) { #ifdef WIN32 sgmt[my_rank * sgmt_size + i] = rand(); #else sgmt[my_rank * sgmt_size + i] = lrand48(); #endif } t0 = SMI_Wtime(); ECHO("performing qsort on this proc's elements"); qsort(sgmt + my_rank * sgmt_size, sgmt_size, sizeof(int), (int (*) (const void *, const void *)) compare_int); SMI_Barrier(); ECHO("starting split-merge operation..."); for (i = 0; i < nbr_procs - (1 - nbr_procs % 2); i++) { ECHO1("...performing merging step", i); merge(i % 2); SMI_Barrier(); } t1 = SMI_Wtime(); if (my_rank == 0) { ECHO("Testing if sort was correct"); comp = 0; for (i = 0; i < nbr_procs; i++) { for (j = 0; j < sgmt_size; j++) { if (comp > sgmt[i * sgmt_size + j]) { ECHO2("process %d, position", i, j); ECHO("*** error in sort!"); } comp = sgmt[i * sgmt_size + j]; if (j % 10000 == 0) { ECHO1 ("sample ", comp); } } } fprintf(stderr, "computing time for a sort of %d integers on %d processes: %f seconds\n", VECTOR_SIZE, nbr_procs, t1-t0); } ECHO("Freeing Resources..."); SMI_Free_shreg(sgmt_id); SMI_Free_shreg(sgmt_id2); SMI_Finalize(); ECHO("END OF PROCESS"); }