おはよう短い配列よりも絶対に速い、 L1キャッシュサイズの配列を追加する。大きな配列が
は、私は2つのアレイを追加するには、次のプログラムを書いた:私はそれをコンパイル#include<iostream>
#define line 32
inline void add(float a[], float b[]){
for (int i=0; i<line; i++){a[i]+=b[i];}
}
int main(){
float a[line]; for (int i=0; i<line; i++){a[i]=0.;}
float b[line]; for (int i=0; i<line; i++){b[i]=0.;}
for (int i=0; i<1024*1024*512; i++){add(a,b);} //Add arrays several times
for (int i=0; i<line; i++){std::cout << a[i] << std::endl;} //Print arrays, else -05 optimize it away.
}
(G ++バージョンを4.8.4 /私のハードウェアが古いです)
g++ add.c++ -O5 -o Test
とし、それを実行
time ./Test
それは私が理解し 1.3秒
それは2.3秒
私はそれを試してみましたいくつかの回を必要とし、実行時には常に同じである16行は、IF =
(そう、それは安定したのですが。)必要と32行は、IF = (ベクトルプロセッサなど)は比較的高速になる可能性がありますが、なぜそれが絶対より速いのか理解できません。私はこのプログラムを書いて、ピーク・パフォーマンスを達成する方法を見つけました。私の質問:CPUには何が起こっているのですか?どのように改善することができますか?
これは配列です。 C++ベクタ型は 'std :: vector'です。 – Neo