コード例 #1
0
ファイル: memperf.c プロジェクト: carsten-clauss/MP-MPICH
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 (&reginfo, SHREG_SIZE, 0, i, SMI_ADPT_DEFAULT, 0, 0, NULL);
	if (SMI_Create_shreg (SMI_SHM_UNDIVIDED|SMI_SHM_NONFIXED, &reginfo, &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);
	}
    }
コード例 #2
0
ファイル: regions.c プロジェクト: carsten-clauss/MP-MPICH
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;
}
コード例 #3
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) {

	}
}
コード例 #4
0
ファイル: mutex.c プロジェクト: carsten-clauss/MP-MPICH
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(&reginfo, SEGSIZE, 0, 0, SMI_ADPT_DEFAULT, 0, 0, NULL);
    error = SMI_Create_shreg(SMI_SHM_UNDIVIDED, &reginfo, &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);
}
コード例 #5
0
ファイル: helloworld.c プロジェクト: carsten-clauss/MP-MPICH
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();
}
コード例 #6
0
ファイル: sort_memcpy.c プロジェクト: carsten-clauss/MP-MPICH
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(&regdesc, 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, &regdesc, &sgmt_id, (void **) (&sgmt));
    if (error != SMI_SUCCESS) {
      ECHO("Not enough shared memory!\n");
      SMI_Abort(-1);
    }

    SMI_Init_reginfo(&regdesc, 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, &regdesc, &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");
}