1

Surface Objects を使用する CUDA 5 でカーネルをコンパイルしようとしています。ただし、これはマニュアルに記載されているとおりには機能しないようです。

__global__ void kernel_reset(cudaSurfaceObject_t surf)
{
    int x = blockIdx.x * blockDim.x + threadIdx.x;
    int y = blockIdx.y * blockDim.y + threadIdx.y;
    int z = blockIdx.z * blockDim.z + threadIdx.z;
    surf3Dwrite(0u, surf, x * sizeof(unsigned int), y, z, cudaBoundaryModeTrap);
}

これはコンパイルに失敗します:

error : no instance of overloaded function "surf3Dwrite" matches the argument list

必要なオーバーロードは、surface_indirect_functions.h に次のようにリストされています。

static __forceinline__ __device__ void surf3Dwrite(unsigned int data, cudaSurfaceObject_t surfObject, int x, int y, int z, cudaSurfaceBoundaryMode boundaryMode = cudaBoundaryModeTrap)

ここで私が間違っていることを誰かに教えてもらえますか?

ありがとう。

4

1 に答える 1

1

この問題の原因を発見しました。

コードは問題ありませんでした。問題はコンパイラの引数にありました。テクスチャ オブジェクトには 2.0 以上の計算機能が必要なので、NVCC コンパイラの設定を「compute_10,sm_10」から「compute_20,sm_20」に変更する必要がありました。これで問題は解決しました。

ありがとう。

于 2012-12-12T15:17:33.443 に答える