AVX組み込み関数を使用してVC++でフィードフォワードネットを作成しています。このコードは、C#のPInvokeを介して呼び出しています。関数exp()を含む大きなループを計算する関数を呼び出すときの私のパフォーマンスは、160Mのループサイズで約1000msです。AVX組み込み関数を使用する関数を呼び出し、その後exp()を使用するとすぐに、同じ操作でパフォーマンスが約8000ミリ秒に低下します。exp()を計算する関数は標準Cであり、AVX組み込み関数を使用する呼び出しは、処理されるデータに関して完全に無関係である可能性があることに注意してください。ある種のフラグが実行時にどこかでトリップしています。
言い換えると、
A(); // 1000ms calculates 160M exp()
B(); // completely unrelated but contains AVX
A(); // 8000ms
または、不思議なことに、
C(); // contains 128 bit SSE SIMD expressions
A(); // 1000ms
ここでどのようなメカニズムが起こっているのか、あるいはどのように解決策を追求するのかについて、私は迷っています。私はIntel2500Kcpu \Win7を使用しています。VSのExpressバージョン。
ありがとう。