将GPUArray传递给feval

时间:2012-04-08 06:53:02

标签: matlab cuda gpu gpgpu gpu-programming

我有以下内核

__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调用内核时
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);

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

感谢你,

Viharri P L V。

1 个答案:

答案 0 :(得分:1)

内核对象&#34; k&#34;在MATLAB中创建的具有以下结构:

 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 )

或使用&#39;单个&#39;创建MATLAB数组。类型。

gtm= parallel.gpu.GPUArray(ones(a,b,'single'));