質問はそれ自体を物語っていると思います。私はいくつかの深刻な計算を行うことに興味がありますが、貿易によるプログラマーではありません。 pythonを一緒に使用して、やりたいことを実行できます。しかし、pythonでプログラムを記述し、GPUにCUDAを使用して実行させることはできますか? pythonとCを組み合わせて使用する必要がありますか?
Klockner(sp)の「pyCUDA」Webページの例には、pythonとCの両方が混在しているため、答えが何であるかわかりません。
Openclについてチャイムを鳴らしたい人がいたら、遠慮なく。ほんの数週間前にこのCUDAビジネスについて聞いたのですが、このようなビデオカードを使用できるとは知りませんでした。
PyCUDAを使用する場合、計算カーネルは常に「CUDACコード」として記述される必要があると思います。 PyCUDAは、面倒な簿記の多くを担当しますが、Pythonコードから計算CUDAカーネルを構築しません。
pyopencl は、PyCUDAの興味深い代替手段を提供します。これは、PyCUDAの「姉妹プロジェクト」として説明されています。これは、OpenCLのAPIのcompleteラッパーです。
私の知る限り、OpenCLにはNvidia以外のGPUで実行できるという利点があります。
すでに素晴らしい答えですが、別のオプションは Clyther です。 PythonのサブセットをOpenCLカーネルにコンパイルすることにより、Cを使用せずにOpenCLプログラムを作成できます。
有望なライブラリは Copperhead ( 代替リンク )です。GPUで実行する関数を装飾する必要があります(その後、オプトイン/オプトインできます) -その関数のCPUまたはGPUの間で何が最適かを確認するために
PyCUDAのcumath
module を介してアクセスできる、計算カーネルが既に記述された、優れた基本的な数学構造のセットがあります。より複雑な、または特定の/カスタムなことをしたい場合は、カーネル定義にCを少し書く必要がありますが、pyCUDAの良いところは、重いCリフティングを実行することです。バックエンドで多くのメタプログラミングを行うので、深刻なCプログラミングについて心配する必要はなく、ほんの少しの部分だけです。与えられた例の1つは、内積を計算するためのMap/Reduceカーネルです。
dot_krnl = ReductionKernel(np.float32, neutral="0", reduce_expr="a+b", map_expr="x[i]*y[i]", arguments="float *x, float *y")
これらの各引数内の小さなコードスニペットはC行ですが、実際にはプログラムを記述します。 ReductionKernel
はmap/reducishタイプ関数のカスタムカーネルタイプですが、さまざまなタイプがあります。公式pyCUDAの例の部分 ドキュメント より詳細に説明します。
幸運を!
Scikits CUDAパッケージ numpy配列操作として表すことができる操作に低レベルの知識やCコードを必要としない場合は、より良いオプションになる可能性があります。
私は同じことを考えていて、いくつかの検索を実行しました。あなたの質問に答えているように思われる以下のリンク先の記事を見つけました。ただし、2014年にこれを尋ねたところ、Nvidiaの記事には日付がありません。
https://developer.nvidia.com/how-to-cuda-python
ビデオでは、セットアップ、最初の例、そして非常に重要なプロファイリングについて説明します。ただし、通常の一般的な計算パターンをすべて実装できるかどうかはわかりません。 NumPyには制限がないので、できると思います。