1

コード例:

import pycuda.autoinit
import pycuda.driver as drv
import numpy

from pycuda.compiler import SourceModule
mod = 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), grid=(1,1))

print dest-a*b

結果:

Traceback (most recent call last):
  File "test.py", line 12, in <module>
    """)
  File "build/bdist.linux-x86_64/egg/pycuda/compiler.py", line 238, in __init__
  File "build/bdist.linux-x86_64/egg/pycuda/compiler.py", line 223, in compile
  File "build/bdist.linux-x86_64/egg/pycuda/compiler.py", line 149, in _find_pycuda_include_path
ImportError: No module named pycuda

簡単に聞こえるので、これをテストしてみましょう。

Python 2.7.1 (r271:86832, Feb 17 2011, 14:13:40) 
[GCC 4.3.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pycuda
>>> pycuda
<module 'pycuda' from '/home/abolster/lib/python2.7/site-packages/pycuda-0.94.2-py2.7-linux-x86_64.egg/pycuda/__init__.pyc'>
>>> 

わかりました、それは奇妙です...

簡単に言えば、ファイルを 1 行ずつ python コンソールにステップ実行しても、実際に mod=SourceModule() 行を実行するまでは何も問題はありません。

(最後のトレースバック、約束します)

/home/abolster/lib/python2.7/site-packages/pycuda-0.94.2-py2.7-linux-x86_64.egg/pycuda/compiler.pyc in _find_pycuda_include_path()
    147 def _find_pycuda_include_path():
    148     from imp import find_module
--> 149     file, pathname, descr = find_module("pycuda")
    150 
    151     # Who knew Python installation is so uniform and predictable?

ImportError: No module named pycuda

したがって、pycuda はランタイム python とは異なるインクルード ディレクトリを取得しているように見えますが、これは発生しないはずです (私が理解しているように)。

何か案は?(長い質問で申し訳ありません)

Talonmies は、nvcc が見つからないことについて指摘しました。Pythonが私が考えられない場所からenvarsを取​​得していない限り、そうすべきではない理由はありません:

[bolster@dellgpu src]$ which nvcc
~/cuda/bin/nvcc
4

3 に答える 3

3

Python 2.6に変更し、関連するモジュールを再インストールすると、OPの問題が修正されました。

于 2012-09-07T02:50:13.560 に答える
1

実行しようとしているコードに問題はありません。動作するはずです。私の推測では、nvcc が見つからないということです。pycuda.compiler を使用する前に、nvcc 実行可能ファイルへのパスが環境に設定されていることを確認してください。

于 2011-04-09T10:49:46.393 に答える