【发布时间】:2015-09-23 22:12:54
【问题描述】:
我有一个 CUDA 内核,其中每个线程都从全局内存中读取相同的值。所以像:
__global__ void my_kernel(const float4 * key_pts)
{
if (key_pts[blockIdx.x] < 0 return;
}
内核配置如下:
dim3 blocks(16, 16);
dim3 grid(2000);
my_kernel<<<grid, blocks, 0, stream>>>(key_pts);
我的问题是这是否会导致某种银行冲突或 CUDA 中的次优访问。我必须承认我还没有详细了解这个问题。
我在想如果我们的访问不理想,我可以执行以下操作:
__global__ void my_kernel(const float4 * key_pts)
{
__shared__ float x;
if (threadIdx.x == 0 && threadIdx.y == 0)
x = key_pts[blockIdx.x];
__syncthreads();
if (x < 0) return;
}
虽然做一些时间安排,我看不出两者之间有什么区别,但到目前为止我的测试数据有限。
【问题讨论】:
标签: cuda