我需要使计算的一部分是并行的。它是关于矢量的计算,有时我需要对每个值进行一次操作。所以我想让它平行。Cuda如何从全局函数运行多个线程?一个运行多线程的内核
我不能解释我的计算示例(它只是一个简单的例子,不是我的算法): 我正在向前移动一个指针,当我找到第5个数字时,我将向矢量中的每个数字加上5。
所以我想避免这样做对主机和复制所有大载体,设备的每一个指针移动后< =>主机(repetable)。我想它可能比主机上的所有东西都低效。
所以我有一个想法,我将所有的向量复制到设备一次,然后我就开始算法。
下面是一个简单的应对提出我的问题:
__device__ void devFunction(long long unsigned int *arr, long long unsigned int param, long long unsigned int N) {
long long unsigned int i = blockIdx.x* blockDim.x+ threadIdx.x;
// do something ...
}
__global__ void globFunction(long long unsigned int *arr, long long unsigned int N) {
do {
devFunction(arr, param, N); // I want to run many threads here like <<<...>>>
// do something ...
} while(/* ... */);
}
int main() {
// declare array, alloc memory, copy memory, etc.
globFunction<<< 400000, 256>>>(arr, N); // I think here should be <<<1,1>>>
// do something ...
return 0;
}
所以这是可以做到的呢?从内核并行运行多个函数?其他解决方案?
为什么你需要从一个cuda线程产生更多的线程?难道你不能在主机的许多线程上调用内核并且同时运行计算吗? – Tudor
它可能会比较慢,因为每个线程都会执行相同的思考 - >通过这个Big vector向前移动指针并将其与数字5进行比较(在示例中)。我只需要在一个线程中执行一次并且只执行一次。只有每个线程上的其他计算。 – nosbor
@nosbor:所以你想知道是否有可能“平行做事”?这不是一个非常确切的问题,是吗? – talonmies