cudaMalloc()中的静态与动态数组

时间:2011-02-21 23:01:33

标签: cuda

在以下两种方法中,cudaMalloc(...)cudaMemCpy(...)是否有任何差异:

#1. Use dynamic host arrays:

float *a_host_1 = new float [10]();
float *a_dyn;
...
cudaMalloc((void **) &a_dyn, 10);
...
for (int i=0; i<10; i++) a_host_1[i] = (float)i*2;
cudaMemcpy(a_dyn, a_host_1, 10, cudaMemcpyHostToDevice);

#2. Use static host arrays:

float a_host_2[] = {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
float *a_st;
...
cudaMalloc((void **) &a_st, 10);
...
cudaMemcpy(a_st, a_host_2, 10, cudaMemcpyHostToDevice);

的问候,
萨扬

1 个答案:

答案 0 :(得分:2)

@aaa是现货,唯一的区别是第一种方法比选项2(可忽略不计)需要更多的触发器来运行循环。但是,当代码到达cudaMemcpy a_host_1时,a_host_2相同。

a_host_2定义为const可能会有所不同,但您所看到的任何时序差异都不会归结为动态/静态声明。