8

高度に並列化された三角関数(1024程度のブロック)を計算することを検討しており、現代建築が持つ並列処理の少なくとも一部を利用したいと思います。

ブロックをコンパイルするとき

for(int i=0; i<SIZE; i++) {
   arr[i]=sin((float)i/1024);
}

GCCはそれをベクトル化せず、

not vectorized: relevant stmt not supported: D.3068_39 = __builtin_sinf (D.3069_38);

それは私には理にかなっています。ただし、並列三角関数の計算を行うためのライブラリがあるかどうか疑問に思っています。

11次の単純なテイラー級数で、GCCはすべてのループをベクトル化し、単純なsinループの2倍以上の速度を取得しています(ビット正確な回答、または9次のシリーズでは、1ビットのみ) 1600の値のうち最後の2つはオフ、3倍以上のスピードアップ)。誰かが以前にこのような問題に遭遇したことは確かですが、私がグーグルで検索したところ、ライブラリなどについての言及は見つかりませんでした。

A.すでに何か存在していますか?
B.そうでない場合、並列三角関数を最適化するためのアドバイスはありますか?

編集:「SLEEF」と呼ばれる次のライブラリを見つけました:http ://shibatch.sourceforge.net/このペーパー で説明されており、SIMD命令を使用していくつかの初等関数を計算します。SSEとAVX固有のコードを使用していますが、標準のCループに変換するのは難しいとは思いません。

4

5 に答える 5

4

GCCを使用していると言ったので、いくつかのオプションがあるようです。

そうは言っても、私はおそらくGPGPUを調べて解決策を探すでしょう。たぶんそれをCUDAまたはOpenCLで書いています(私が正しく覚えていれば、CUDAは正弦関数をサポートしています)。これは、簡単にできるように見えるライブラリです。

于 2011-02-24T20:36:30.187 に答える
2

ここで高調波を計算しようとしているので、同様の問題に対処するコードがいくつかあります。それはすでにベクトル化されており、私が見つけた他の何よりも高速です。副次的な利点として、コサインを無料で入手できます。

于 2011-02-24T20:28:17.853 に答える
1

どのプラットフォームを使用していますか?この種のライブラリはすでに多数存在します。

  • Intelは、ベクトル数学ライブラリ(VML)にiccを提供しています。
  • Appleは、Accelerateフレームワークの一部としてvForceライブラリを提供しています。
  • HPは、Itanium用に独自のVector Math Libraryを提供しています(他のアーキテクチャも提供している場合があります)。
  • Sunはlibmvecにコンパイラツールを提供しました。
  • ..。
于 2011-02-24T20:24:08.813 に答える
1

テイラー級数の代わりに、fdlibmが使用するアルゴリズムを調べます。彼らはより少ないステップであなたに同じくらいの精度を得るはずです。

于 2011-02-24T21:20:23.800 に答える
0

私の答えは、vectrigと呼ばれるこれを正確に実行するための独自のライブラリを作成することでした:https ://github.com/jeremysalwen/vectrig

于 2011-06-08T20:52:58.517 に答える