【发布时间】:2015-07-24 14:08:22
【问题描述】:
我是 CUDA 和并行性的新手。我希望得到一些理解。您应该熟悉标准 SumArrayOnGPU :
__global__ void
vectorAdd(const float *A, const float *B, float *C, int numElements)
{
int i = blockDim.x * blockIdx.x + threadIdx.x;
if (i < numElements)
{
C[i] = A[i] + B[i];
}
}
我要做的是不断增加一个数字,通过任意网格运行该数字,并且只关心返回给我特定答案的增加的数字。
因此,并行性将在递增的数字上运行相同的例程。
- 这样的事情可能吗?
- 什么是正确的逻辑?
- 是否仍需要将其放入阵列设置中?
思想例子:
__global__ void
vectorfind(long long unsigned *nbr, int numElements)
{
long long unsigned tnbr;
int i = blockDim.x * blockIdx.x + threadIdx.x;
if (i < numElements)
{
tnbr = nbr + i;
tnbr = hash(tnbr);
if (tnbr = arbitraryresult) { printf("found");
}
}
【问题讨论】:
-
我不清楚你想做什么;你的“思想例子”有什么问题?
-
我传入的 nbr 是一个起点。然后,我想从那个起点迭代。所以,我从 500,000,000 开始,我想迭代 100,000 次。因此,它将是 500,000,000 + 1,2 ..... 最多 +100,000 。然后我想通过哈希例程运行那个递增的数字。然后我想检查结果以查看它是否与设定值匹配。这有意义吗?我的思维过程正确吗?我的想法有问题吗?
-
你的想法似乎是正确的。这个想法是通过蛮力计算找到一个散列整数。但是你为什么不试试呢?
-
好的,初步测试似乎不错。
标签: cuda parallel-processing nvcc