Exemplo n.º 1
0
int main (int argc, char *argv[]){
  char buf[256];

#ifdef GRAPHICS
  gs_init(WIDTH, HEIGHT);
#endif
  
  sw_init();
  sw_start();
  RoadMap();
  sw_stop();

  sw_timeString(buf);
  
  printf("Time taken: %s\n",buf);

#ifdef GRAPHICS
  gs_exit();
#else
  printf("CRC is %x\n",crc);
#endif

  return 0;
}
Exemplo n.º 2
0
int main(int argc, char* argv[])
{

	char* input = NULL;
	char* output = NULL;	

	if(argc == 6) {
		input = argv[1];
		output = argv[2];
		SPU_THREADS = atoi(argv[3]);
		PPEid = atoi(argv[4]);
		file = argv[5]; 	
	} else if (argc == 4) {
		PPEid = 0;
		file = NULL; 		 		
		input = argv[1];
		output = argv[2]; 	
		SPU_THREADS = atoi(argv[3]);
	} else if (argc == 5) {
		PPEid = 0;
		file = NULL; 		 		
		input = argv[1];
		output = argv[2]; 	
		SPU_THREADS = atoi(argv[3]);
		
	} else {
		printf("Wrong number of arguments %i\n", argc);
		return -1;
	}
	
	pthread_t* threads;	
	struct IMAGE_FORMAT result;
	unsigned char* energy;
	unsigned char* cmap;
	unsigned char* scale;
	int scale_size = 9;
	char timer_buffer[256];
	int y, x;
	size_t i;

	WIDTH = 576;
	HEIGTH = 708;
	
	threads = dsmcbe_simpleInitialize(PPEid, file, SPU_THREADS);


	unsigned int* speIDs = dsmcbe_create(SPEID + PPEid, 4);
	*speIDs = PPEid * SPU_THREADS;
	dsmcbe_release(speIDs);

	if (PPEid == 0)
	{
		//printf("Starting loading images!\n");	
		loadImageNormal();
		//loadImageSmall();
		//printf("Finished loading images!\n");
		
			
		//for(i = 0; i < ROUNDS; i++)
		//{
			//struct POINTS* points = create(RESULT + i, sizeof(struct POINTS) * SHOTS_SPU);
			//memset(points, 0, sizeof(struct POINTS) * SHOTS_SPU);
			//release(points);	
		//}
	
			
		energy = dsmcbe_create(ENERGY+PPEid, (sizeof(unsigned char) * (HEIGTH * WIDTH)));
		memset(energy, 0, sizeof(unsigned char) * (HEIGTH * WIDTH));
	
		cmap = (unsigned char*)malloc(sizeof(unsigned char)*(9*3));
		cmap[0] = 0; cmap[1] = 0; cmap[2] = 85;
		cmap[3] = 0; cmap[4] = 0; cmap[5] = 170;
		cmap[6] = 0; cmap[7] = 0; cmap[8] = 255;
		cmap[9] = 0; cmap[10] = 85; cmap[11] = 0;
		cmap[12] = 0; cmap[13] = 170; cmap[14] = 0;
		cmap[15] = 0; cmap[16] = 255; cmap[17] = 0;
		cmap[18] = 85; cmap[19] = 0; cmap[20] = 0;
		cmap[21] = 170; cmap[22] = 0; cmap[23] = 0;
		cmap[24] = 255; cmap[25] = 0; cmap[26] = 0;
	
		scale = (unsigned char*)malloc(sizeof(unsigned char)*9);
		scale[0] = 10; scale[1] = 20; scale[2] = 30;
		scale[3] = 40; scale[4] = 50; scale[5] = 60;
		scale[6] = 70; scale[7] = 80; scale[8] = 90;
		
		srand(1);
	
		//Start timer!
		sw_init();
		sw_start();
				
		printf("Timer started\n");
	
		printf("Start firering canon #1\n");
		canon(0, SHOTS, SHOTS_SPU, 85, 75, 1.0, 0.8, energy);
		printf("Stopped firering canon #1\n");
	
		printf("Start firering canon #2\n");
		canon(1, SHOTS, SHOTS_SPU, 10, 230, 1.0, 0.0, energy);
		printf("Stopped firering canon #2\n");
	
		printf("Start firering canon #3\n");
		canon(2, SHOTS, SHOTS_SPU, 550, 230, -1.0, 0.0, energy);
		printf("Stopped firering canon #3\n");
	
		printf("Start firering canon #4\n");
		canon(3, SHOTS, SHOTS_SPU, 475, 90, -1.0, 0.75, energy);
		printf("Stopped firering canon #4\n");
		
		printf("Start firering canon #5\n");
		canon(4, SHOTS, SHOTS_SPU, 280, 0, 0.0, 1.0, energy);
		printf("Stopped firering canon #5\n");
			
		// Stop timer!
		sw_stop();
		sw_timeString(timer_buffer);
		printf("Time used: %s\n", timer_buffer);
	
		readimage_rgb(input, malloc, &result);
		unsigned long size;

		//printf("Starting harvest\n");		
		for(i=1; i<MAX(dsmcbe_MachineCount(), 1); i++)
		{
			//printf("START - FINISHJOB %i\n", FINISHJOB+i);
			dsmcbe_release(dsmcbe_acquire(FINISHJOB+i, &size, ACQUIRE_MODE_READ));
			//printf("END - FINISHJOB %i\n", FINISHJOB+i);
			//printf("START - ENERGY %i\n", ENERGY+i);
			unsigned char* temp = dsmcbe_acquire(ENERGY+i,&size, ACQUIRE_MODE_READ);

			for(y=0; y<HEIGTH; y++)
			{
				for(x=0; x<WIDTH; x++)
				{
					energy[MAPOFFSET(x,y)] = temp[MAPOFFSET(x,y)];
				}
			}
			dsmcbe_release(temp);
			//printf("END - ENERGY %i\n", ENERGY+i);
		}
		
		//printf("Harvest done\n");

		// Save energy map to image
		for(y=0; y<HEIGTH; y++)
		{
			for(x=0; x<WIDTH; x++)
			{
				if(energy[MAPOFFSET(x,y)] > 0)
				{
					int offset = 3 * fpos(scale, scale_size, energy[MAPOFFSET(x,y)]);
					result.image[MAPOFFSET(x,y)].r = cmap[offset];
					result.image[MAPOFFSET(x,y)].g = cmap[offset+1];
					result.image[MAPOFFSET(x,y)].b = cmap[offset+2];
				}
			}			
		}
		
		//printf("Done\n");

		dsmcbe_release(energy);
		writeimage_rgb(output, &result);
	
		free(cmap);
		free(scale);
		free(result.image);
	}

	if (PPEid != 0)
	{	
		energy = dsmcbe_create(ENERGY+PPEid, sizeof(unsigned char) * (708 * 576));
		memset(energy, 0, sizeof(unsigned char) * (708 * 576));
		
		collectResults(0, SHOTS, SHOTS_SPU, energy);
		collectResults(1, SHOTS, SHOTS_SPU, energy);
		collectResults(2, SHOTS, SHOTS_SPU, energy);
		collectResults(3, SHOTS, SHOTS_SPU, energy);
		collectResults(4, SHOTS, SHOTS_SPU, energy);
		
		dsmcbe_release(energy);
		
		//printf("CREATING - FINISHJOB %i\n", FINISHJOB+PPEid);
		dsmcbe_release(dsmcbe_create(FINISHJOB+PPEid, sizeof(unsigned int)));
		//printf("CREATED\n");
		
		for(i = 0; i < SPU_THREADS; i++)
			pthread_join(threads[i], NULL);
	}
	
	printf("Going to sleep before we die\n");
	//sleep(10);
	return 0;
}