我尝试搜索一个类似的问题,但找不到一个,尽管有几个标题相似。
我在主机上有这样的代码:
handle_error(cudaMalloc((void**)&ret_dev, FLOAT_SIZE*no_kstrings*M));
for(int div=0;div<no_kstrings/threads;div++){
kernel<<<grid_dim,block_dim>>>(ret_dev, v_freq_vectors, &no_kstrings[threads]);
handle_error(cudaMemcpy(&exp_freq[threads], ret_dev, FLOAT_SIZE*threads*M,
cudaMemcpyDeviceToHost));
}
基本上我必须将循环中的代码作为最大编号的倍数运行。每个块的线程数。而内核函数只是做一些事情并将数据放入ret_dev
. 所以我想知道,我是否需要cudaMemcpy()
在每次迭代之后做,或者我也可以在循环之外做?像这样的东西:
handle_error(cudaMalloc((void**)&ret_dev, FLOAT_SIZE*no_kstrings*M));
for(int div=0;div<no_kstrings/threads;div++){
kernel<<<grid_dim,block_dim>>>(ret_dev, v_freq_vectors, &no_kstrings[threads]);
}
handle_error(cudaMemcpy(exp_freq, ret_dev, FLOAT_SIZE*no_kstrings*M,
cudaMemcpyDeviceToHost));
我想我想问的是,在同一个参数上多次调用内核函数是否会以某种方式破坏这些参数?
谢谢