2012-04-08 11 views
1

ich Féval haben die folgenden KernelGPUArray Passing

__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 
     } 
    } 

} 

Wenn ich rufe den Kernel von MATLAB

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

gtm=k.feval(gtm,b); 

es gibt die folgende Fehlermeldung mit:

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); 

jemand kann Bitte sag mir wo ich falsch liege.

Sie deinnkening,

Viharri PL V.

+4

Double und Float sind nicht vom selben Typ, oder? – talonmies

+0

Ich habe die Antwort Danke für die Antwort. –

+1

Wenn Sie eine Lösung haben, bitte posten Sie es als Antwort. Sie können es später akzeptieren, was zeigt, dass die Frage erfolgreich gelöst wurde. – talonmies

Antwort

1

Das Kernel-Objekt "k", die in MATLAB hat die folgende Struktur erstellt wird:

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

mit dem oben erwähnten CUDA Kernel-Prototyp dh

__global__ void func(float * arr, int N) 

Also gab es einen Mismatch-Fehler. Wir müssen entweder den Prototyp des Kernels CUDA ändern mit ‚single‘ Typ

__global__ void func(double * arr, int N) 

oder den MATLAB-Array erstellen.

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