1

CUDAを練習するために、以下の非常に単純なカーネルを作成しました。

import pycuda.driver as cuda
import pycuda.autoinit
import numpy as np
from pycuda.compiler import SourceModule
from pycuda import gpuarray
import cv2

def compile_kernel(kernel_code, kernel_name):
  mod = SourceModule(kernel_code)
  func = mod.get_function(kernel_name)
  return func

input_file = np.array(cv2.imread('clouds.jpg'))
height, width, channels = np.int32(input_file.shape)

my_kernel_code = """
  __global__ void my_kernel(int width, int height) {
    // This kernel trivially does nothing! Hurray!
  }
"""
kernel = compile_kernel(my_kernel_code, 'my_kernel')

if __name__ == '__main__':

  for i in range(0, 2):
    print 'o'
    kernel(width, height, block=(32, 32, 1), grid=(125, 71))

    # When I take this line away, the error goes bye bye.
    # What in the world?
    width -= 1

現在、上記のコードを実行すると、forループの最初の反復が正常に実行されます。ただし、ループの2回目の反復中に、次のエラーが発生します。

Traceback (most recent call last):
  File "outOfResources.py", line 27, in <module>
    kernel(width, height, block=(32, 32, 1), grid=(125, 71))
  File "/software/linux/x86_64/epd-7.3-1-pycuda/lib/python2.7/site-packages/pycuda-2012.1-py2.7-linux-x86_64.egg/pycuda/driver.py", line 374, in function_call
    func._launch_kernel(grid, block, arg_buf, shared, None)
pycuda._driver.LaunchError: cuLaunchKernel failed: launch out of resources

行を削除するwidth -= 1と、エラーはなくなります。何故ですか?カーネルのパラメータを2回変更することはできませんか?参考までに、こちらをご覧くださいclouds.jpg

ここに画像の説明を入力してください

4

1 に答える 1

3

エラーメッセージは特に有益ではありませんが、正しくキャストされたwidth変数を渡す必要があることに注意してください。だから次のようなもの:

width = np.int32(width - 1)

動作するはずです。

于 2012-11-21T08:57:44.827 に答える