コード例 #1
0
ファイル: utils.c プロジェクト: vajedi/msc-particles
void computeA(int nTerms, int mid)
{
    computeB(nTerms, mid);
	int i, j;
	for (i = 0; i < nTerms; i++)
	{
		for (j = mid; j < nTerms; j++)
		{
			a[i][j].real = a[i][j].real*TIME_DECAY + b[i][j].real;
			a[i][j].imag = a[i][j].imag*TIME_DECAY + b[i][j].imag;
			
			a[2*mid-i][2*mid-j].real = a[i][j].real;
			a[2*mid-i][2*mid-j].imag = -a[i][j].imag;
		}
	}
	a[mid][mid].imag = 0.0;
}
コード例 #2
0
int main(int argc, char**) {
  {
    long long t1=0;
    float s1=0;
    long long t2=0;
    float s2=0;
    long long t3=0;
    float s3=0;
    
    
    fillR();
    computeV();
    
    
    for (int i=0; i!=10000; ++i) {
      fillO();

      t1 -= rdtsc();
      computeV();
      t1 += rdtsc();
      s1+=sum();
      
      t2 -= rdtsc();
      computeA();
      t2 += rdtsc();
      s2+=sum();
      
      t3 -= rdtsc();
      computeB();
      t3 += rdtsc();
      s3+=sum();
      
    }
    std::cout << "native vector " << s1 << " " << double(t1)/10000 << std::endl;
    std::cout << "vector by elements " << s2 << " " << double(t2)/10000 << std::endl;
    std::cout << "scalar " << s3 << " " << double(t3)/10000 << std::endl << std::endl;

  }
  {
    long long t1=0;
    float s1=0;
    long long t2=0;
    float s2=0;
    long long t3=0;
    float s3=0;
    
    
    fillO();
    computeV();
    
    
    for (int i=0; i!=10000; ++i) {
      fillR();
      t1 -= rdtsc();
      computeV();
      t1 += rdtsc();
      s1+=sum();
      
      t2 -= rdtsc();
      computeA();
      t2 += rdtsc();
      s2+=sum();
      
      memcpy(a,va,sizeof(float)*1024*vfl);
      t3 -= rdtsc();
      computeL();
      t3 += rdtsc();
      memcpy(vb,b,sizeof(float)*1024*vfl);
      s3+=sum();
      
    }
    std::cout << "native vector " << s1 << " " << double(t1)/10000 << std::endl;
    std::cout << "vector by elements " << s2 << " " << double(t2)/10000 << std::endl;
    std::cout << "scalar " << s3 << " " << double(t3)/10000 << std::endl << std::endl;
  }
  {
    long long t1=0;
    float s1=0;
    long long t2=0;
    float s2=0;
    long long t3=0;
    float s3=0;
    
    
    fillO();
    computeV();
    
    
    for (int i=0; i!=10000; ++i) {
      fillW();
      t1 -= rdtsc();
      computeV();
      t1 += rdtsc();
      s1+=sum();
      
      t2 -= rdtsc();
      computeA();
      t2 += rdtsc();
      s2+=sum();
      
      t3 -= rdtsc();
      computeB();
      t3 += rdtsc();
      s3+=sum();
      
    }
    std::cout << "native vector " << s1 << " " << double(t1)/10000 << std::endl;
    std::cout << "vector by elements " << s2 << " " << double(t2)/10000 << std::endl;
    std::cout << "scalar " << s3 << " " << double(t3)/10000 << std::endl << std::endl;
  }
  return 0;
    
}