Ubuntu 8.10をNVIDIA CUDA用のコーディング用に構成するというテーマを続けて、私はお気に入りのプログラミング言語の1つであるPythonを使用して自分用の職場をセットアップすることにしました。 これを行うには、便利で美しいコードを使用してNVIDIA CUDA APIのすべての魅力を実装できるPyCUDAライブラリの優れたセットがあります。 標準PyCUDAパッケージのコードの例を次に示します。
import pycuda.autoinit
import pycuda.driver as drv
import numpy
mod = drv.SourceModule("""
__global__ void multiply_them(float *dest, float *a, float *b)
{
const int i = threadIdx.x;
dest[i] = a[i] * b[i];
}
""")
multiply_them = mod.get_function("multiply_them")
a = numpy.random.randn(400).astype(numpy.float32)
b = numpy.random.randn(400).astype(numpy.float32)
dest = numpy.zeros_like(a)
multiply_them(
drv.Out(dest), drv.In(a), drv.In(b),
block=(400,1,1))
print dest-a*b
便利で簡単ではありませんか?
さあ始めましょう!
PyCUDAの通常の操作には、次のものが必要です。
-UNIXライクなシステムとインターネットアクセスを備えたマシン。
-Nvidia CUDAツールキット。 PyCudaはバージョン2.0ベータ版を念頭に置いて開発されましたが、私にとっては2.1ベータ版でも問題なく動作するようです。
-C ++コンパイラ、できれば4.x以上のgccバージョン。
-インストールされたPythonインタープリター、バージョン2.4以降。
次に、 最新のBoost C ++ライブラリをインストールします 。 インストールする前に、Pythonの開発パッケージがインストールされているかどうかを確認する価値があります。これはpython-devまたはpython-develと呼ばれます。 インストールは実際には標準です。収集されたインクルードのディレクトリであるプレフィックスを設定することを忘れないでください。 この場合、 $ HOME / poolにします 。
$ tar xfj ~/downloads/boost_1_37_0.tar.bz2
$ cd boost_1_37_0
$ ./configure --prefix=$HOME/pool
$ make
$ make install
アセンブリの後(成功するはずです)、 $ HOME / poolフォルダーが表示されているかどうかを確認します。 もしそうなら、最後まで先に進みましょう:)
重要な注意:インストールの最後に次のような場合
...failed updating 30 targets...
...skipped 2 targets...
python開発ヘッダーがインストールされているかどうかを再確認してください。 少数のファイル(5未満)のみを更新することができなかった場合、ほとんどすべてが正常に機能しますが、忠実性のために、 libz-devおよびlibbz2-devをインストールして、 Boostを再度ビルドできます。
次に、新しくコンパイルされたライブラリへのパスを環境変数に追加します。
$ export LD_LIBRARY_PATH=$HOME/pool/lib:${LD_LIBRARY_PATH}
これが行われない場合、PyCUDAのビルド段階で次のようになります。
...blablabla...
ImportError: libboost_python-gcc42-mt-1_35.so.1.35.0:
cannot open shared object file: No such file or directory
...blablabla...
PyCUDA自体をダウンロードし、それを含むディレクトリに移動します。
$ cd $HOME/downloads/pycuda-0.91.1
numpyパッケージをインストールする必要があります。 これを行うには、 numpy.orgから自分でダウンロードしてコンパイルするか、PyCUDA自体を使用します。 既に配布ディレクトリに移動しているため、次のように入力します。
$ sudo python ez_setup.py // setup-tools
$ sudo easy_install numpy // numpy setup-tools
注文。
PyCUDAをビルドします。
最後に残った最も重要なことは、PyCUDA自体をインストールすることです。 主な難点は、構成中に多数のオプションを設定する必要があることです。
$ ./configure \
--boost-inc-dir=$HOME/pool/include/boost-1_37 \
--boost-lib-dir=$HOME/pool/lib \
--boost-python-libname=boost_python-gcc41-mt \
--cuda-root=/where/ever/you/installed/cuda
そして今-注意! 最初の2つのパラメーター(上記で説明)ですべてが明確な場合、最後の2つを説明する必要があります。 boost_python-gcc41-mtは、 gcc41がboostのビルドに使用したコンパイラーのバージョンであるライブラリーの名前です。 前の記事で書いたように、CUDAのプログラミングでは、通常バージョン4.1を使用する必要がありますが、システムデフォルトに設定しなかった場合、この場合は関係ありません。 次のように入力して、アクティブなコンパイラのバージョンを確認できます。
$ gcc -v
さて、最後の段落では、ご想像のとおり 、 / where / ever / you / installed / cudaをCUDAのディレクトリ、つまりデフォルトでは/ usr / local / cudaに置き換える必要があります。
ところで、 make installを入力する前に、入力したアドレスを再確認できます。 これらはすべて、構成中に作成されるsiteconf.pyファイルに保存されます。 ビルド前は、次のようになりました。
BOOST_INC_DIR = ['/ home / username / pool / include / boost-1_37']
BOOST_LIB_DIR = ['/ home / username / pool / lib']
BOOST_PYTHON_LIBNAME = ['boost_python-gcc41-mt']
CUDA_ROOT = '/ usr / local / cuda'
CUDADRV_LIB_DIR = []
CUDADRV_LIBNAME = ['cuda']
CXXFLAGS = []
LDFLAGS = []
新しいパラメーターでPyCUDAを再設定したい場合は、まずこのファイルを削除してください。 または、変更して入力するだけです
$ sudo python setup.py build
これで安全にコンパイルできます:
$ sudo make install
すべてが正しく行われていれば、アセンブリ中にエラーが発生することはありません。 コンピューターを再起動します。完全な自信のために、ディレクトリに移動できます
/pycuda-0.91.1/test (またはそこにあるバージョン)でtest_driver.pyを実行します 。
$ cd /pycuda-0.91.1/test
$ python test_driver.py
結果に問題がなければ、すべてがチョコレートに入っています。 1つまたは2つのエラー(何らかの理由でメモリに不具合がある場合)-少し後でもう一度試してください。
最後まで読んでくれてありがとう、批判を聞いてうれしいです:)
APD :Eclipseでの作業を含め、すべてが設定されたことが判明しました。 問題は、picuda cacheフォルダーに間違ったアクセス許可が設定されていたことで、これが最も簡単な方法です。
$ sudo chmod 0777 -R /home/username/.pycuda-compiler-cache
とりわけ、インタープリターもEclipse自体もルートの下から起動するべきではありません。 環境変数が異なるため:) Rizの設定に助けてくれてありがとう。