我有以下内核
__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。
答案 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'));