1

我有以下内核

__global__ void func( float * arr, int N ) {

     int rtid = blockDim.x * blockIdx.x + threadIdx.x;

     if( rtid < N )
    {
        float* row = (float*)((char*)arr + rtid*N*sizeof(float) ); 
        for (int c = 1; c < N; ++c) 
        { 
            //Manipulation
        } 
    } 

}

当我使用 MATLAB 从 MATLAB 调用内核时

gtm= parallel.gpu.GPUArray(ones(a,b,'double')); 
OR gtm= parallel.gpu.GPUArray(ones(1,b,'double'));

gtm=k.feval(gtm,b);

它给出了以下错误:

Error using ==> feval
parallel.gpu.GPUArray must match the exact input type as specified on the kernel
prototype.

Error in ==> sameInit at 65 gtm=k.feval(gtm,b);

有人可以告诉我我哪里出错了。

感谢您,

维哈里 PL V.

4

1 回答 1

1

在 MATLAB 中创建的内核对象“k”具有以下结构:

 MaxNumLHSArguments: 1
 NumRHSArguments: 2
 ArgumentTypes: {'inout single'  'in int32 scalar'}

使用上面提到的 CUDA 内核原型,即

__global__ void func( float * arr, int N )

因此,出现了不匹配错误。我们需要将 CUDA 内核的原型更改为

__global__ void func( double * arr, int N )

或创建具有“单一”类型的 MATLAB 数组。

gtm= parallel.gpu.GPUArray(ones(a,b,'single')); 
于 2012-04-12T04:41:31.313 回答