Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory cudaMemcpy无效参数:在简单向量示例中_Memory_Memory Management_Cuda_Gpu - Fatal编程技术网

Memory cudaMemcpy无效参数:在简单向量示例中

Memory cudaMemcpy无效参数:在简单向量示例中,memory,memory-management,cuda,gpu,Memory,Memory Management,Cuda,Gpu,下面是一个例子: #include <stdio.h> #include <stdlib.h> #include <cuda_runtime.h> #include <cuda.h> #include <math.h> #define N 100 #define t_num 256 int main(){ int vector_one_h[t_num], vector_one_g[t_num]; cudaE

下面是一个例子:

#include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime.h>
#include <cuda.h>
#include <math.h>


#define N 100
#define t_num 256

int main(){

     int vector_one_h[t_num], vector_one_g[t_num];

     cudaError_t err = cudaMalloc((void**)&vector_one_g, t_num * sizeof(int));
     printf("Cuda malloc vector swap one: %s \n", cudaGetErrorString(err));
     printf("Device Vector: %p \n:" , vector_one_g);

     for(int m = 0; m < t_num; m++){
             vector_one_h[m] = rand() % N;
     }

     err = cudaMemcpy(vector_one_g, vector_one_h, t_num * sizeof(int), cudaMemcpyHostToDevice);
          printf("Cuda mem copy vector swap one: %s \n", cudaGetErrorString(err));
}
那么为什么cudaMemcpy接收到一个无效的参数呢

cudaMemcpy()
的文档中,我认为问题可能在于我需要给出第二个参数作为地址,
&vector\u one\u h
,但将其放入代码中会返回完全相同的错误


另外,虽然有很多关于无效参数的帖子,但我相信这不是重复的,因为大多数其他问题都有非常复杂的例子,而这是一个非常简单的例子。

尝试将第一行改为:

int vector_one_h[t_num], *vector_one_g;

顺便说一句,在数组名前加上&没有任何效果。根据C语法的定义,数组名本身就是常量指针。

非常感谢!你能编辑一下你的答案来解释为什么这是必要的吗?我很惊讶,在复制之前,我不需要预先分配
vector\u one\g
的大小(我想我说的没错)。malloc进行分配。您只需要提供一个指针变量,它将指向新分配的内存。换句话说,cudaMalloc在作为第一个参数传递给它的指针变量中返回分配内存的地址。
int vector_one_h[t_num], *vector_one_g;