예제 #1
0
파일: cgm.c 프로젝트: jdegges/DNArm
int main(int argc, char* argv[])
{
	if(argc != 7){
		printf("USAGE: cgm GENOMEFILE GENOMESIZE READFILE READFILESIZE DATABASEFILE THREADS\n");
		exit(-1);
	}

	FILE* g = fopen(argv[1], "r");
	int gSize = atoi(argv[2]);
	FILE* r = fopen(argv[3], "r");
	int numReads = atoi(argv[4]);
	struct db* database = db_open(argv[5], 1);
	if(g == NULL || r == NULL || database == NULL){
		printf("Error opening input file!\n");
		exit(-1);
	}
	int threads = atoi(argv[6]);
	
	omp_set_num_threads(threads);
	
	uint32_t* genome = (uint32_t*) malloc(sizeof(uint32_t)*gSize);
	if(genome == NULL){
		printf("Error allocating memory!\n");
		exit(-1);
	}

	int** reads = (int**) malloc(sizeof(int*)*CHUNKSIZE);
	if(reads == NULL){
		printf("Error allocating memory!\n");
		exit(-1);
	}
	int i, j;
	for(i = 0; i < CHUNKSIZE; i++){
		reads[i] = (int*) malloc(sizeof(int)*4);
		if(reads[i] == NULL){
			printf("Error allocating memory!\n");
			exit(-1);
		}
	}

	fread(genome, gSize, gSize, g);

	for(i = 0; i < numReads; i+=CHUNKSIZE){ 
		for(j = 0; j < CHUNKSIZE && i+j < numReads; j++)
			fread(&(reads[j][0]), 16, 16, r);

		int num = CHUNKSIZE;
		if(i + CHUNKSIZE > numReads)
			num = numReads - i;
		
		cgm(genome,gSize,reads,num,16,database);
	}

	return 0;
}
예제 #2
0
int main(int argc, char* argv[])
{
	if(argc != 6){
		printf("USAGE: cgmtest MAXVALUE LISTSIZE THREADS CHUNKSIZE REPS \n");
		exit(-1);
	}

	

	maxValue = (uint32_t) strtoul(argv[1], NULL, 10);
	listSize = atoi(argv[2]);
	int threads = atoi(argv[3]);
	int p = atoi(argv[4]);
	int reps = atoi(argv[5]);
	
	omp_set_num_threads(threads);

	uint32_t* results = NULL;
	struct db mydb;

	struct timeval t1, t2;
	seq = 0;
	double overall = 0;
	srand( (unsigned)time(NULL));

	gettimeofday(&t1, NULL);
	
	int i, j;

	#pragma omp parallel for reduction(+:seq) \
								schedule(dynamic, p) \
								private(results)
	for(i = 0; i < reps; i++)
	{
//		printf("Executing...\n");
		
		cgm(0,0,0,0, &results, &mydb);

		free(results);
		results = NULL;


	}
	
	gettimeofday(&t2, NULL);
	overall = (t2.tv_sec - t1.tv_sec) * 1000.0;      // sec to ms
	overall += (t2.tv_usec - t1.tv_usec) / 1000.0;   // us to ms

//	struct db d;
//	uint32_t u;
//	uint32_t* vals;
//	double elapsed = 0;
//	double dbTime = 0;
//
//	for(i = 0; i < reps; i++)
//	{
//		gettimeofday(&t1, NULL);
//		db_query (&d, u, &vals);
//
//		gettimeofday(&t2, NULL);
//		elapsed = (t2.tv_sec - t1.tv_sec) * 1000.0;      // sec to ms
//		elapsed += (t2.tv_usec - t1.tv_usec) / 1000.0;   // us to ms
//
//		dbTime += elapsed;
//	}
	
	printf("\n*****Result*****:\n");
	printf("Average Time (w/o generating lists): %f\n", seq/reps);
	printf("Average Time (w/ generating lists): %f\n", overall/reps);
//	printf("Average List Generation Time: %f\n", dbTime/reps);
//	printf("Calculated Average Time (w/o generating lists): %f\n", overall/reps - dbTime/reps*4);

}