2011-09-05 36 views
6

パフォーマンスのためにOpenCLを使用して物理シミュレーションアルゴリズムをGPUに移植したいと思います。私はOpenCLに関する経験がなく、私は周りを見ています。計算は、ほとんどが小規模の高密度マトリックス(3x3)とベクトル積、交差積などです。opencl matrix library

  1. このような基本操作には、「標準」/推奨ライブラリがありますか? OpenCLのクラスを持っていないとして、私は、例えばmmul(a,mtrans(b))の代わりa*b.transpose()を記述する必要があります、オペレータがなどの過負荷を、私は確かに(時間ではなく、それはinefficentだろう)コード行列の乗算と反転に自分自身をしたくない

  2. OpenCL(またはプリプロセッサ)の拡張/進化がありますか?その表記をより数学的にするには?私はfortran年に戻る印象を持っています。あなたの質問に答えるために(私はCUDAがある知っているが、それはベンダーバウンドである)

答えて

4

3次元オブジェクトに限定されていることが分かっている場合は、double3タイプ(またはgpuが倍精度をサポートしていない場合はfloat3)を使用することを検討してください。

これまでのところ、ベクトルのみがサポートされています。したがって、行列の乗算や逆変換の使用については、自分でコーディングする必要があります。しかし、あなたは次の組み込みのgeometric functionsに興味があるかもしれません。特に、dot製品とcross製品が定義されています。

また、行列の先物implentationsためreserved data typesがあることを知って興味があるかもしれません。例えば、二重N X メートルを参照してください。あなたのケースでは、将来的に利用可能な場合は、あなたの行列にdouble3x3型を使用することができます。

5

  1. ない私は
  2. の意識だとはい、OpenCLのはC99構文に厳しく制限されていますクラスがなく、演算子のオーバーロードがなく、厳密には手続き型の呼び出しがあります。 OpenCLは、ネイティブのベクトル型で要素ワイズ演算をサポートしますが、それ以上の洗練さはありません。行列の乗法、行列式、転置などは、すべて自分で実装する必要があります。
  3. もう一度私は認識していません。 [F90とそれ以降のバージョンには、C99やC++よりもはるかに簡単に書くことができるような種類の操作を行うための組み込み行列とベクトル演算が組み込まれています。
+0

申し訳ありませんが、私はFortranを心に留めていました(私が当時プログラミングしていたわけではありません)。つまり誰かが自分のために書くのではなく、良い実装をする前でした。類推すると、私は、Pythonがそのような普及した言語である理由の1つ、「電池が含まれている」と思う。 – eudoxos