我想对批量矢量执行操作。例如: 我有一个MxN矩阵,其中包含长度为N的M个向量。我想在所有M个向量中添加另一个长度为N的向量。
CUDA内核可能如下所示:
template<typename T>
__global__ void cukAddArraytoArrayBatch_I(void *dvSrcDst, void *dvSrc,int nSamples) //add array to a batch of arrays
{
int idx = threadIdx.x + blockIdx.x * blockDim.x;
reinterpret_cast<T*>(dvSrcDst)[idx] = reinterpret_cast<T*>(dvSrcDst)[idx] + reinterpret_cast<T*>(dvSrc)[idx%nSamples];
}
将被称为
cukAddArraytoArrayBatch_I<float> << <numBlocks, THREADSPERBLOCK >> >(dSrcDst, dSrc, nSamples);
有更优雅和有效的方法来实现这一目标吗?我想实现这些类型的操作以及向数组添加常量并添加相同维度和大小的数组。与其他操作类似,例如multiply,devide等,因此使用手写内核这很难维护。我更喜欢使用像NPP或者Thrust这样的库,但是我们无法找到一种有效的方法。
非常感谢任何帮助。