• ベストアンサー

高次元整数ベクトルの高速計算

VC++2010でwindowsアプリケーション(CLI)を作成しています。 その中で1000次元の整数ベクトルのパワーを求めるために概略次のような計算をしています。 int v[1000]; //v[0]~v[999]に整数値を代入後 long long int power = 0; for(int i = 0; i < 1000; i++){ power += v[i] * v[i]; } この計算を数万回繰り返す必要があるため、是非高速化を図りたいのですが、CPUのベクトル計算機能等を利用して高速化することができるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

こちらで使っている市販コンパイラではベクトル化してもベネフィットはないとメッセージが出てきます。 unrollの最適化はしています。加算していますのでベクトル化は確かにちょっと効果はなさそうに見えます。 関数にして(inlineにはしなくて)遅めのCPUでやってみましたが、1000万回で7秒程度です。 これで遅いのなら、他にも手は有りますが。

softwarelearner
質問者

お礼

有難うございました。 そんなに高速で計算できるのかと思い、よくよく確認をしたところ、計算そのものではなくベクトルへの代入(正確には、代入する値の取得)に時間が掛かっていることが分かりました。お騒がせいたしました。

関連するQ&A