在以下两种方法中,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);
的问候,
萨扬
答案 0 :(得分:2)
@aaa是现货,唯一的区别是第一种方法比选项2(可忽略不计)需要更多的触发器来运行循环。但是,当代码到达cudaMemcpy
a_host_1
时,a_host_2
相同。
将a_host_2
定义为const
可能会有所不同,但您所看到的任何时序差异都不会归结为动态/静态声明。