我已经阅读了Mark Harris的文章"优化并行缩减CUDA",我发现它非常有用,但我仍然无法理解1或2个概念.它写在第18页:
//First add during load
// each thread loads one element from global to shared mem
unsigned int tid = threadIdx.x;
unsigned int i = blockIdx.x*blockDim.x + threadIdx.x;
sdata[tid] = g_idata[i];
__syncthreads();
Run Code Online (Sandbox Code Playgroud)
优化代码:有2个负载和第一个减少的添加:
// perform first level of reduction,
// reading from global memory, writing to shared memory
unsigned int tid = threadIdx.x; ...1
unsigned int i = blockIdx.x*(blockDim.x*2) + threadIdx.x; ...2
sdata[tid] = g_idata[i] + g_idata[i+blockDim.x]; ...3
__syncthreads(); ...4
Run Code Online (Sandbox Code Playgroud)
我无法理解第2行; 如果我有256个元素,如果我选择128作为我的块大小,那么为什么我将它乘以2?请解释如何确定块大小?
快速船体的最坏情况是什么?我们如何才能知道这是最糟糕的情况,我对快速船体算法感到困惑.实际上,我明白,运行行列式来找到三角形的区域,如果区域是正的,则该点位于极值点的左侧.并且递归地执行此操作,将具有构造船体的O(n)效率.然后我不明白,有时提到如何提高效率O(nlogn)和(n ^ 2)?在哪些情况下,这种效率结果如何?如果有人可以通过一些特定的例子帮助,请 那将是很大的帮助.
我读了几篇关于共享内存的好文章; 但我有关于银行冲突的初步问题据说,如果线程1和线程2从银行0访问字0,那么就没有银行冲突,但如果他们访问不同的话,那么就会出现银行冲突; 但我的问题是不同的单词如何存在于一个银行?由于bank 0的大小是32位,字大小是32位; 最多可以有一个字/银行.