2

こんにちは、Python を使用して OpenCL を試しています。配列と const 変数を cl プログラムに渡そうとしていますが、単に const 変数を cl デバイスの配列にコピーしています。これは非常に単純なはずですが、次のエラーが表示されます。

Traceback (most recent call last):
File "<pyshell#103>", line 1, in <module>
test()
File "D:/Programming/Programs_OpenCL_Python/Host_CL_Parameter_Passing.py", line 141,    in test
event = prg.test( queue, (10,1), None, a_dev, b)
File "C:\Python27\lib\site-packages\pyopencl-2012.1-py2.7-win32.egg\pyopencl\__init__.py", line 457, in kernel_call
self.set_args(*args)
File "C:\Python27\lib\site-packages\pyopencl-2012.1-py2.7-win32.egg\pyopencl\__init__.py", line 509, in kernel_set_args
% (i+1, str(e), advice))
LogicError: when processing argument #2 (1-based): Kernel.set_arg failed: invalid     value - invalid kernel argument

コードコードは次のとおりです。

def test():
    ctx = cl.create_some_context()
    queue = cl.CommandQueue(ctx)
    a = np.empty(10, dtype = int)
    b = int(1)
    a_dev = cl.Buffer(ctx, cl.mem_flags.WRITE_ONLY, a.nbytes)
    prg = cl.Program( ctx, """__kernel void test(__global int *a, const int b){
        int i = get_global_id(0);
        a[i] = b;
    }""").build()
    event = prg.test( queue, (10,1), None, a_dev, b)
    event.wait()
    cl.enqueue_copy( queue, a, a_dev)
    print a

誰かが私に問題を教えて解決策を教えてもらえますか? これは私を夢中にさせています。ありがとうございました

4

1 に答える 1

2

int32整数引数を numpy型に変換する必要があります。

event = prg.test( queue, (10,1), None, a_dev, np.int32(b))

ところで、マンデルブロの例を見て、それを理解することができました

于 2012-10-19T17:14:48.023 に答える