実は、今回、「AMD64」というもの、「超最適化コンパイラ」の存在があるんですよね。
>しかしインラインアセンブラを使いこなしてクロック効率の高いプログラムになります。
うちも昔はその類のプログラマーでした。perlになってもある意味そうでしたが・・
しかし、今では、gccですらかなりやばい最適化をしてくれるようで。。。
とりあえず、高速化をあげるとしたら、このような感じで考えると良いのかもしれません。
1.むやみなステップ数の増加防止より、モジュールのサイズ低減を優先する
→ループを上手に使ってL2キャッシュにヒットしやすくする
2.コアモジュールは、CPU相応にして1本とする
→例)
x86 SSE1 DLL
x86 SSE1 SSE2 DLL
x86 SSE1 SSE2 CHORUS REVERB DLL
x86 SSE1 SSE2 SSE3 CHORUS REVERB DLL
x64 SSE2 SSE2 SSE3 CHORUS REVERB DLL
x64 SSE2 SSE2 SSE3 SSE4.1 CHORUS REVERB DLL (INTEL)
x64 SSE2 SSE2 SSE3 SSE4.1 SSE4.2 AVX CHORUS REVERB DLL (INTEL)
x64 SSE2 SSE2 SSE3 SSE4a CHORUS REVERB DLL (AMD)
x64 SSE2 SSE2 SSE3 SSE4.1 SSE4.2 AVX FMA3 CHORUS REVERB DLL (INTEL)
x64 SSE2 SSE2 SSE3 SSE4a FMA4 CHORUS REVERB DLL (AMD)
※x64からx86のDLLが呼び出せないとかいうオチはなしね
普通に、起動専用のexeからexeを起動すれば、x86からx64でもなんでも起動するし
このあたりのCPU判別と、詳細の計算ライブラリ(厳密にはマクロ)だけが
アセンブラになればいいのかな・・とも感じられる
→言い換えれば、DLL間の呼び出しも、オーバーヘッド
3.無論、AMD64はコアなレジスタ数が倍になっている。(幅も倍だが)
それだから直接速度が倍になるわけではないが、有効活用する。
4.外部計算モジュールが実装できる余地を残しておく?
おかしいな、音を鳴らすために「GPUの力」を借りるなんて・・・