小编rob*_*bot的帖子

平行减少

我已经阅读了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?请解释如何确定块大小?

c c++ parallel-processing cuda gpu

9
推荐指数
1
解决办法
4248
查看次数

Quick Hull Worst案例解释

快速船体的最坏情况是什么?我们如何才能知道这是最糟糕的情况,我对快速船体算法感到困惑.实际上,我明白,运行行列式来找到三角形的区域,如果区域是正的,则该点位于极值点的左侧.并且递归地执行此操作,将具有构造船体的O(n)效率.然后我不明白,有时提到如何提高效率O(nlogn)和(n ^ 2)?在哪些情况下,这种效率结果如何?如果有人可以通过一些特定的例子帮助,请 那将是很大的帮助.

algorithm recursion

5
推荐指数
2
解决办法
3520
查看次数

银行在字数方面存在冲突

我读了几篇关于共享内存的好文章; 但我有关于银行冲突的初步问题据说,如果线程1和线程2从银行0访问字0,那么就没有银行冲突,但如果他们访问不同的话,那么就会出现银行冲突; 但我的问题是不同的单词如何存在于一个银行?由于bank 0的大小是32位,字大小是32位; 最多可以有一个字/银行.

cuda

2
推荐指数
1
解决办法
783
查看次数

标签 统计

cuda ×2

algorithm ×1

c ×1

c++ ×1

gpu ×1

parallel-processing ×1

recursion ×1