亲爱的Cuda学者,
寻找以下问题的解决方案
a)我有两个数组 1)size1的array1,类型名为1 2)size1的array2,typename2
b)我想编写以下原型的内核
__global__ kernel(void* dest, void* src, int dest_sizeoftype, int src_sizeoftype, int num_array_elts);
c)假设我创建了num_array_elts cuda线程,每个线程将其elt复制到src到目的地。
问题: a)我遇到的地方是使用哪个函数将num_bytes从src复制到内核中的dest。
提前感谢你 问候, Nagaraju
答案 0 :(得分:2)
Thrust中的copy
算法简化了这一过程。
#include <thrust/copy.h>
#include <thrust/device_ptr.h>
int * src = ...
float * dst = ...
// first wrap the 'raw' pointers
thrust::device_ptr<int> wrapped_src(src);
thrust::device_ptr<float> wrapped_dst(dst);
// then pass wrapped pointers to copy()
thrust::copy(wrapped_src, wrapped_src + num_array_elts, wrapped_dst);
有关推力的其他信息,请参阅QuickStart指南。
答案 1 :(得分:0)
如果你知道2个数组的类型,这个问题变得相当简单。
__global__ kernel(float* dest, int* src){
int idx=blockIdx.x*blockDim.x+threadIdx.x;
dest[ idx ] = src[ idx ];
}
如果你的dest数组使用了更大的单词,例如一个双,这仍然有效,不需要知道字节数。使用cudamalloc时,请确保分配正确的字节数。