示例#1
0
// jscott: added 3d Fourier transform - cost 3N^2
void idFFT::FFT3D( cpxFloat_t *data, int N, int ISI ) 
{
	cpxFloat_t	*orig;
	int			i, j;

	orig = data;

	// Transform each slice
	for( j = 0; j < N; j++ )
	{
		// 1D transform
		data = orig + j * N * N;
		for( i = 0; i < N; i++ )
		{
			FFT1D( data, N, ISI, 1 );
			data += N;
		}

		// 1D transform
		data = orig + j * N * N;
		for( i = 0; i < N; i++ )
		{
			FFT1D( data, N, ISI, N );
			data++;
		}
	}

	// Transform the volume
	data = orig;
	for( j = 0; j < N * N; j++ )
	{
		FFT1D( data, N, ISI, N * N );
		data++;
	}
}
示例#2
0
// RAVEN BEGIN
// jscott: added 2d Fourier transform - cost 2N
void idFFT::FFT2D( cpxFloat_t *data, int N, int ISI ) 
{
	cpxFloat_t	*orig;
	int			i;

	orig = data;

	// 1D horizontal transform
	for( i = 0; i < N; i++ )
	{
		FFT1D( data, N, ISI, 1 );
		data += N;
	}

	// 1D vertical transform
	data = orig;
	for( i = 0; i < N; i++ )
	{
		FFT1D( data, N, ISI, N );
		data++;
	}
}
示例#3
0
文件: fft.C 项目: dpac-vlsi/Sigil
void SlaveStart()
{
  long i;
  long MyNum;
  double *upriv;
  long initdone; 
  long finish; 
  long l_transtime=0;
  long MyFirst; 
  long MyLast;

  LOCK(Global->idlock);
    MyNum = Global->id;
    Global->id++;
  UNLOCK(Global->idlock); 

  BARINCLUDE(Global->start);

/* POSSIBLE ENHANCEMENT:  Here is where one might pin processes to
   processors to avoid migration */

  BARRIER(Global->start, P);

  upriv = (double *) malloc(2*(rootN-1)*sizeof(double));  
  if (upriv == NULL) {
    fprintf(stderr,"Proc %ld could not malloc memory for upriv\n",MyNum);
    exit(-1);
  }
  for (i=0;i<2*(rootN-1);i++) {
    upriv[i] = umain[i];
  }   

  MyFirst = rootN*MyNum/P;
  MyLast = rootN*(MyNum+1)/P;

  TouchArray(x, trans, umain2, upriv, MyFirst, MyLast);

  BARRIER(Global->start, P);

/* POSSIBLE ENHANCEMENT:  Here is where one might reset the
   statistics that one is measuring about the parallel execution */

  if ((MyNum == 0) || (dostats)) {
    CLOCK(initdone);
  }

  /* perform forward FFT */
  FFT1D(1, M, N, x, trans, upriv, umain2, MyNum, &l_transtime, MyFirst, 
	MyLast, pad_length, test_result, dostats);

  /* perform backward FFT */
  if (test_result) {
    FFT1D(-1, M, N, x, trans, upriv, umain2, MyNum, &l_transtime, MyFirst, 
	  MyLast, pad_length, test_result, dostats);
  }  

  if ((MyNum == 0) || (dostats)) {
    CLOCK(finish);
    Global->transtimes[MyNum] = l_transtime;
    Global->totaltimes[MyNum] = finish-initdone;
  }
  if (MyNum == 0) {
    Global->finishtime = finish;
    Global->initdonetime = initdone;
  }
}
示例#4
0
文件: fft.C 项目: ArchC/MPSoCBench
void SlaveStart()
{
  long i;
  long MyNum;
  double *upriv;
  
  //int a = 2*(rootN-1)*sizeof(double);

  //double upriv[a];

  long initdone; 
  long finish; 
  long l_transtime=0;
  long MyFirst; 
  long MyLast;


    
  BARRIER(Global->start, P);

  LOCK(Global->idlock);
    MyNum = Global->id;
    Global->id++;
  UNLOCK(Global->idlock);
    
  

  BARINCLUDE(Global->start);
  
 
  BARRIER(Global->start, P);  

  //upriv = (double *) malloc(2*(rootN-1)*sizeof(double));  
  upriv = (double *) our_malloc(2*(rootN-1)*sizeof(double));
  
  if (upriv == NULL) {
    fprintf(stderr,"Proc %ld could not malloc memory for upriv\n",MyNum);
    exit(-1);
  }
  for (i=0;i<2*(rootN-1);i++) {
    upriv[i] = umain[i];
  }   



  MyFirst = rootN*MyNum/P;
  MyLast = rootN*(MyNum+1)/P;

  TouchArray(x, trans, umain2, upriv, MyFirst, MyLast);


  BARRIER(Global->start, P);

  if ((MyNum == 0) || (dostats)) {
    CLOCK(initdone);
  }

  //printf("\nentrando em forward FFT\n");
  /* perform forward FFT */
  FFT1D(1, M, N, x, trans,  upriv, umain2, MyNum, &l_transtime, MyFirst, 
	MyLast, pad_length, test_result, dostats);



  /* perform backward FFT */
  if (test_result) {
    FFT1D(-1, M, N, x, trans,  upriv, umain2, MyNum, &l_transtime, MyFirst, 
	  MyLast, pad_length, test_result, dostats);
  }  



  if ((MyNum == 0) || (dostats)) {
    CLOCK(finish);
    Global->transtimes[MyNum] = l_transtime;
    Global->totaltimes[MyNum] = finish-initdone;
  }
  if (MyNum == 0) {
    Global->finishtime = finish;
    Global->initdonetime = initdone;
  }

  join_point(&myJoinPoint);
  
}