私はこの(動作している)CPUコードを持っています:
#define NF 3
int ND;
typedef double (*POT)(double x, double y);
typedef struct {
POT pot[NF];
} DATAMPOT;
DATAMPOT *datampot;
double func0(double x, double y);
double func1(double x, double y);
double func2(double x, double y);
int main(void)
{
int i;
ND=5;
datampot=(DATAMPOT *)malloc(ND*sizeof(DATAMPOT));
for(i=0;i<ND;i++){
datampot[i].pot[0]=func0;
datampot[i].pot[1]=func1;
datampot[i].pot[2]=func2;
}
return 0;
}
今、私はこのようなGPUバージョンを試します
#define NF 3
int ND;
typedef double (*POT)(double x, double y);
typedef struct {
POT pot[NF];
} DATAMPOT;
DATAMPOT *dev_datampot;
__device__ double z_func0(double x, double y);
__device__ double z_func1(double x, double y);
__device__ double z_func2(double x, double y);
__global__ void assign(DATAMPOT *dmp, int n)
{
int i;
for(i=0;i<n;i++){
(dmp+i)->pot[0]=z_func0;
(dmp+i)->pot[1]=z_func1;
(dmp+i)->pot[2]=z_func2;
}
}
int main(void)
{
int i;
ND=5;
cudaMalloc((void**)&dev_datampot,ND*sizeof(DATAMPOT));
assign<<<1,1>>>(dev_datampot,ND);
return 0;
}
ただし、デバイス関数ポインタの割り当ては機能しません。間違いはどこにありますか?そして、それをどのように修正することができますか?よろしくお願いします。ミケーレ