0
私はSIMDプログラムへのルーキーだなぜ私のスキャッタローンの性能はVc SIMDより優れていますか?
unsigned int Hash(unsigned int f);
uint_v Hash(uint_v vec);
int main()
{
std::random_device rd;
unsigned* mem1=new unsigned [_size]();
for(int i=0;i<_size;++i)
mem1[i]=rd();
time_t t1=clock();
uint_v mem;
for(int i=0;i<_size;i+=uint_v::size())
{
mem.load(mem1+i,Vc::Unaligned);
uint_v temp=Hash(mem);
}
t1=clock()-t1;
std::cout<<"simd time:"<<(1.0*t1)/CLOCKS_PER_SEC<<"\n";
time_t t2=clock();
for(int i=0;i<_size;++i)
unsigned int temp=Hash(mem1[i]);
t2=clock()-t2;
std::cout<<"normal time:"<<(1.0*t2)/CLOCKS_PER_SEC<<"\n";
return 0;
}
unsigned int Hash(unsigned int f)
{
return (f>>7)^(f>>13)^(f>>21)^f;
}
uint_v Hash(uint_v vec)
{
uint_v mem=vec.apply([](unsigned f) ->unsigned{return (f>>7)^(f>>13)^(f>>21)^f;});
return mem;
}
私のコードは、上記のように、時間の結果は次のとおりです。
SIMD時間:0.127762 通常時:0.034841
結果がで日付を比較すると類似していますmem1とmem2(Vc uint_vベクトル)
'uint_v'は何の偽の使用にグローバル変数に結果
@PeterCordesはあなたの応答、コンパイルオプションg ++ -o3 xxxxxおよび** uint_v * *は128ビット/ 256ビットのデータを含むSIMD lib Vcで定義されているベクトル型です – imagecmos
あなたはこのVcライブラリにリンクしていますが、私はそれが何であるか、またあなたがライブラリについて話していることは知らなかった。 –