4

私には問題があります:高速線形システムの解決(私はそのようなシステムをたくさん持っています)。GPUとOpenCLを使用して解決します。

私はRubyやPythonなどの動的言語が大好きで、Cなどの低水準言語を使用する習慣から抜け出しました。

だから私は2つの同時の目的を持っています:

  1. できるだけ少ない労力でできるだけ速く線形システムを解くためのこのようなOpenCLソリューションを開発します。
  2. パフォーマンスを大幅に低下させないでください。利便性のために2〜10倍の減速を支払いたくありませんが、高級言語での作業に30〜50%を支払う準備ができています。

私にとっての最良のケースは次のとおりです。ほとんどPythonコードはOpenCLCでほとんど無駄なくコンパイルされます。

私はそのような解決策を見つけました:純粋なOpenCL C、PyOpenCLClyther

何から始めればいいですか?

4

2 に答える 2

4

私の意見では、動的言語をOpenCLに組み込むことは、努力する価値がありません。Pythonの好きなところのほとんどが失われ、最終的には努力のために多くの時間を節約できないでしょう。

しかし、私はPythonでOpenCLカーネルを書くことだけを話している。カーネルを準備して送信するホストアプリケーションもあります。Pythonが好きな場合は、OpenCL APIにアクセスするために、PyOpenCLなどのラッパーを使用して純粋なPythonでホストアプリを作成することをお勧めします。次に、カーネルを純粋なOpenCLで記述し、Pythonアプリにそのまま送信させます。これにより、パフォーマンスにほとんどコストをかけずに、Pythonから必要なもののほとんどを取得できると思います。

于 2011-11-15T22:13:05.783 に答える
1

OpenCLを使用したプログラミングの最も難しい部分は、アルゴリズムを並列化することです。つまり、カーネルを作成することを意味します。たぶん、あなたはあなたの時間の大部分をあなたのOpenCL Cコードを微調整して理解することに費やすでしょう、それはAFAIKがカーネルを書くためのあなたの唯一の選択です。

そういうわけで、私は純粋なC/OpenCLの実装に行くと言います。「ボイラープレート」OpenCLAPI部分を稼働させたら、その多くを変更する必要はほとんどありません。どちらかといえば、渡すワークグループのサイズなどで遊んでいますclEnqueueNDRangeKernel

CLの初心者の場合は、シンプルにしてください。問題に別のソフトウェアレイヤーを追加すること(特に線形ソルバーとして定義されている問題)は、作業を複雑にするだけです。

編集:

標準のOpenCLAPIを使用すると、オンラインヘルプ/サポートの可能性が広がることを付け加えておきます。Pythonバインディングのいずれかを使用することを選択した場合、それらのコミュニティの人々に潜在的なサポートを制限する可能性があります。

于 2011-11-15T22:21:39.300 に答える