初学pycuda,内核部分定义了两个函数,其中第一个函数被第二个调用。我尝试在第一个函数中新定义指针q并开辟空间,最后返回q。显示错误“pycuda._driver.LogicError: cuCtxSynchronize failed: an illegal memory access was encountered”
__device__ float* fun1(float *p, int m){
float *q = (float *)malloc(m * sizeof(float));
...; // 省略
return q;
}
__global__ void(float *dest, float *array, int m){
float p[m];
int i;
for(i = 0; i <= m; i++){
p[i] = i;
}
float *result = fun1(p, m);
...; // 省略
}
但如果改成如下,就可以正常运行:
__device__ void fun1(float *q, float *p, int m){
...; // 对q做一番操作
return q;
}
__global__ void(float *dest, float *array, int m){
float p[m], q[m];
int i;
for(i = 0; i <= m; i++){
p[i] = i;
}
fun1(q, p, m);
...; // 省略
}
想问下第一种方式报错是什么原因,以及如何能在第一种方式上修改,使得第一个函数满足返回float*的形式?
第3行。。。你都省略了哪些内容,是否修改了q指针地址呢?