web-dev-qa-db-ja.com

Pythonのみを使用してNvidiaのCUDAをプログラムできますか、それともCを学習する必要がありますか?

質問はそれ自体を物語っていると思います。私はいくつかの深刻な計算を行うことに興味がありますが、貿易によるプログラマーではありません。 pythonを一緒に使用して、やりたいことを実行できます。しかし、pythonでプログラムを記述し、GPUにCUDAを使用して実行させることはできますか? pythonとCを組み合わせて使用​​する必要がありますか?

Klockner(sp)の「pyCUDA」Webページの例には、pythonとCの両方が混在しているため、答えが何であるかわかりません。

Openclについてチャイムを鳴らしたい人がいたら、遠慮なく。ほんの数週間前にこのCUDAビジネスについて聞いたのですが、このようなビデオカードを使用できるとは知りませんでした。

36
Aquateenfan

CUDAmatTheano をご覧ください。どちらも、GPUプログラミングについてあまり知らなくても、GPUで実行されるコードを作成するためのアプローチです。

20
dwf

PyCUDAを使用する場合、計算カーネルは常に「CUDACコード」として記述される必要があると思います。 PyCUDAは、面倒な簿記の多くを担当しますが、Pythonコードから計算CUDAカーネルを構築しません。

18
Alex Martelli

pyopencl は、PyCUDAの興味深い代替手段を提供します。これは、PyCUDAの「姉妹プロジェクト」として説明されています。これは、OpenCLのAPIのcompleteラッパーです。

私の知る限り、OpenCLにはNvidia以外のGPUで実行できるという利点があります。

8
Eric O Lebigot

すでに素晴らしい答えですが、別のオプションは Clyther です。 PythonのサブセットをOpenCLカーネルにコンパイルすることにより、Cを使用せずにOpenCLプログラムを作成できます。

5
Yann Vernier

有望なライブラリは Copperhead代替リンク )です。GPUで実行する関数を装飾する必要があります(その後、オプトイン/オプトインできます) -その関数のCPUまたはGPUの間で何が最適かを確認するために

4
Riccardo Galli

PyCUDAのcumathmodule を介してアクセスできる、計算カーネルが既に記述された、優れた基本的な数学構造のセットがあります。より複雑な、または特定の/カスタムなことをしたい場合は、カーネル定義に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の例の部分 ドキュメント より詳細に説明します。

幸運を!

1
Jeff

Scikits CUDAパッケージ numpy配列操作として表すことができる操作に低レベルの知識やCコードを必要としない場合は、より良いオプションになる可能性があります。

0
chiffa

私は同じことを考えていて、いくつかの検索を実行しました。あなたの質問に答えているように思われる以下のリンク先の記事を見つけました。ただし、2014年にこれを尋ねたところ、Nvidiaの記事には日付がありません。

https://developer.nvidia.com/how-to-cuda-python

ビデオでは、セットアップ、最初の例、そして非常に重要なプロファイリングについて説明します。ただし、通常の一般的な計算パターンをすべて実装できるかどうかはわかりません。 NumPyには制限がないので、できると思います。

0
atirado