Esempio n. 1
0
void petabricks::RemoteObject::freeRecvInitial(void* buf, size_t len) {
  return freeRecv(buf, len);
}
Esempio n. 2
0
int main(int argc, char **argv)
{
  unsigned int *data_samples;
  int i;
  int size;
  pd_device_t dev;
  void *memr, *mems;
  float throughput;
  struct timeval tv1,tv2;
  int mintime, curtime;

 printf("====================================\n");
 printf("=       DMA Throughput Test        =\n");
 printf("====================================\n\n");

 
 if(argc != 2){
    printf("Usage: %s [buffer size]\n",argv[0]);
    return -1;
 }
 
 size = atoi(argv[1]);
 if(size > 524288){
    printf("Wohaa, easy there. Maximum buffer size is 262144\n");
    return -1;
 }
 if(size % 4 != 0){
    printf("Buffer size must be divisible by 4 bytes\n");
    return -1;
 }
 
 printf("Buffer size: %d\n\n",size);
 
 if(pd_open(0,&dev) != 0){
    printf("Failed to open file \n");
    return -1;
  }

  printf("Device file opened successfuly\n");

  // Allocate send and receive buffers
  
  posix_memalign( (void**)&memr, 16, size);
  posix_memalign( (void**)&mems, 16, size);
  
  //for(i=0;i<size/4;i++)
  //  ((unsigned int*)mems)[i] = i;
    
  //for(i=0;i<size/4;i++)
  //  ((unsigned int*)memr)[i] = 9;

 //--------------------------

  
 
 if(initDMA(&dev) < 0)
   printf("Init DMA failed\n");
 
 /*
 gettimeofday(&tv1,NULL);  
 
 if(setupSend(&dev, (void*)mems, size) < 0)
   printf("Setup Send failed\n");
 
 gettimeofday(&tv2,NULL);  

 printf(">> Time taken to setup send transfer:%d\n", tv2.tv_usec - tv1.tv_usec);
 
  //--------------------------
 
 gettimeofday(&tv1,NULL);  

 
 if(setupRecv(&dev, memr, size) < 0)
   printf("Setup Recv failed\n");

 gettimeofday(&tv2,NULL);  

 printf(">> Time taken to setup receive transfer:%d\n", tv2.tv_usec - tv1.tv_usec);
 
 
 //--------------------------
 
 gettimeofday(&tv1,NULL);  
 
 if(startSend(&dev, 0) < 0)
   printf("DMA Send failed\n");

 if(checkSend() < 0)
   printf("Check DMA send failed\n");

  gettimeofday(&tv2,NULL);  
 
 printf(">> Time taken to complete and check send transfer:%d\n", tv2.tv_usec - tv1.tv_usec);
 printf(">> Throughput: %f MB/s\n",(float)size/((float)(tv2.tv_usec - tv1.tv_usec)));
 
  //--------------------------
 
  gettimeofday(&tv1,NULL);  
 
 if(startRecv() < 0)
   printf("DMA Recv failed\n");

 if(checkRecv() < 0)
   printf("Check DMA recv failed\n");

  gettimeofday(&tv2,NULL);  
 
 printf(">> Time taken to complete and check recv transfer:%d\n", tv2.tv_usec - tv1.tv_usec);
  printf(">> Throughput: %f MB/s\n",(float)size/((float)(tv2.tv_usec - tv1.tv_usec)));

 
 */
 
 
   //--------------------------

 // Send and receive in simultaneous
 mintime = 9999;
for(i=0;i<NRUNS;i++){
  gettimeofday(&tv1,NULL);  

 if(setupSend(&dev, (void*)mems, size,1) < 0)
   printf("Setup Send failed\n");
 
 if(setupRecv(&dev, (void*)memr, size) < 0)
   printf("Setup Recv failed\n");

  gettimeofday(&tv2,NULL);  

  printf("Time taken to setup receive AND send transfer:%d\n", tv2.tv_usec - tv1.tv_usec);

  //--------------------------

  gettimeofday(&tv1,NULL);  
  
    if(startRecv(&dev, 0) < 0)
   printf("DMA Recv failed\n");
 
   if(startSend(&dev, 0) < 0)
   printf("DMA Send failed\n");
   

     if(checkRecv() < 0)
   printf("Check DMA recv failed\n");
 
   if(checkSend() < 0)
   printf("Check DMA send failed\n");
  

  
  
  gettimeofday(&tv2,NULL);  
  
   curtime = tv2.tv_usec - tv1.tv_usec;
   printf("Time taken to complete and check send AND receive transfer:%d\n", curtime);
   printf("Throughput: %f MB/s\n",(float)2*size/((float)(curtime)));

  
 freeSend(&dev);

 freeRecv(&dev);
 
 if(curtime < mintime)
   mintime = curtime;
}

 stopDMA(&dev);
 
 //for(i=0;i<size/4;i++)
 // printf("%d ",((unsigned int*)memr)[i]);
 
 free(memr); free(mems);

printf("Maximum throughput for %d points: %f MB/s\n",size,(float)2*size/((float)(mintime)));

 
  
  return 0;
}
int main(int argc, char **argv)
{
  unsigned int *data_samples;
  int i,val,j;
  int size, new_size;
  pd_device_t dev;
  void *memr, *mems, *mem_new;
  float throughput;
  struct timeval tv1,tv2;
  int mintime, curtime, vsize;

 printf("====================================\n");
 printf("=       Pattern Tests	            =\n");
 printf("====================================\n\n");

 if(pd_open(0,&dev) != 0){
    printf("Failed to open file \n");
    return -1;
  }

  printf("Device file opened successfuly\n");

  // Allocate send and receive buffers
 
  size = 4*1024*1024; // 32x32 matrix with 4 byte entries
 
  posix_memalign( (void**)&memr, 16, size);
  posix_memalign( (void**)&mems, 16, size);

 //for(i=0;i < size/4; i++){
 // ((int*)mems)[i] = i;
 // printf("%d ",((int*)mems)[i]);
 //}

  /*
vsize = 1;
for(i=1; i < 16; i++)
{
 mintime = 99999;
 for(j=0; j < 500; j++)
 {
   gettimeofday(&tv1,NULL);  
   compressData(mems, &mem_new, &new_size, 0, 4, 120, vsize);
   gettimeofday(&tv2,NULL);  

   curtime = tv2.tv_usec - tv1.tv_usec;

   if (curtime < mintime)
	mintime = curtime;

   free(mem_new);
 }
 printf("Total Size: %d, Time elapsed: %d\n", new_size, mintime);
 vsize *= 2;
}



 return;
*/
  // Each 5x5 subblock will hold the same value
  val = 0;
  for(i=0; i < size/4; i++){
    if (i % 16 == 0 && i!=0)
 	val ++;

    val = val % 2;

    ((int *)mems)[i] = val;
  }

  // Test matrix
  for(i=0; i < size/4; i++){
    if (i%32 == 0 && i!=0)
     printf("\n");
  
    printf("%d ", ((int*)mems)[i]);
    
  } 


//--------------------------
 
 if(initDMA(&dev) < 0)
   printf("Init DMA failed\n");
 
 // Send and receive in simultaneous
  
gettimeofday(&tv1,NULL);  

#ifdef SEND
if(setupSend(&dev, (void*)mems, size,1) < 0)
  printf("Setup Send failed\n");

	if(applyBlocking_send(16, 32, 4) < 0)
	 printf("Apply Blocking send failed\n");
#endif
 if(setupRecv(&dev, (void*)memr, size) < 0)
   printf("Setup Recv failed\n");


//int applyLinear_recv(int offset, int hsize, int stride, int total_size);
//	if(applyBlocking_recv(16, 32, 4) < 0)
	if(applyLinear_recv(0,128,128,4096) < 0)  
 	 printf("Apply Blocking recv failed\n");


  gettimeofday(&tv2,NULL);  

  printf("Time taken to setup receive AND send transfer:%d\n", tv2.tv_usec - tv1.tv_usec);

  //--------------------------

  gettimeofday(&tv1,NULL);  
#ifdef SEND
 //if(startSend(&dev, 0) < 0)
 //  printf("DMA Send failed\n");
#endif
 // printf("Press any key to continue ;)\n");
 // getchar();

  if(startRecv(&dev, 0) < 0)
   printf("DMA Recv failed\n");
 
  if(startSend(&dev, 0) < 0)
   printf("DMA Send failed\n");
   

   if(checkRecv() < 0)
    printf("Check DMA recv failed\n");
#ifdef SEND
   if(checkSend() < 0)
    printf("Check DMA send failed\n");
#endif

  
  
  gettimeofday(&tv2,NULL);  
  
   curtime = tv2.tv_usec - tv1.tv_usec;
   printf("Time taken to complete and check send AND receive transfer:%d\n", curtime);
   printf("Throughput: %f MB/s\n",(float)2*size/((float)(curtime)));


  // Test matrix
  for(i=0; i < size/4; i++){
    if (i%32 == 0 && i!=0)
     printf("\n");
  
    printf("%d ", ((int*)memr)[i]);
  } 
  
 freeSend(&dev);

 freeRecv(&dev);
 
 stopDMA(&dev);
 
 //for(i=0;i<size/4;i++)
 // printf("%d ",((unsigned int*)memr)[i]);
 
 free(memr); free(mems);

  return 0;
}