私のコードの内側のループがハードウェア設計の障壁にぶつかっているのか、それとも私の側の障壁を理解していないのかを把握しようとしています。もう少しありますが、私が答えることができる最も簡単な質問は次のとおりです。
次のコードがある場合:
float px[32768],py[32768],pz[32768];
float xref, yref, zref, deltax, deltay, deltaz;
initialize_with_random(px);
initialize_with_random(py);
initialize_with_random(pz);
for(i=0;i<32768-1;i++) {
xref=px[i];
yref=py[i];
zref=pz[i];
for(j=0;j<32768-1;j++ {
deltx=xref-px[j];
delty=yref-py[j];
deltz=zref-pz[j];
} }
コード (アセンブリ、組み込み関数など) を完全に制御できるが、アーキテクチャ以外のランタイム環境を制御できない (つまり、マルチユーザー環境に依存しているため、OS カーネルが特定のプロセスに時間を割り当てる方法については何もできません)。
現在、コードで 3 倍のスピードアップが見られます。SSE を使用すると、3 倍のスピードアップが示すよりもはるかに多くのベクトルの深さが得られると考えていました (おそらく、3 倍のスピードアップは、理論上の最大値が 4 倍であることを示しています)。スループット)。(コンパイラがそれらを自動昇格させるほど賢くなかった場合に備えて、deltx/delty/deltz を配列にするなどのことを試しましたが、それでも 3 倍の速度しか見られません。) Intel C コンパイラをベクトル化に適切なコンパイラ フラグがありますが、明らかに組み込み関数はありません。