作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我所知,共享内存被划分为存储体,并且多个线程对同一存储体内单个数据元素的访问将导致冲突(或广播)。
目前,我分配了一个相当大的数组,该数组在概念上表示两个矩阵的几对:
__shared__ float A[34*N]
N
是对的数目,一对的前16个浮点数是一个矩阵,随后的18个浮点数是第二个矩阵。
__shared__ Apair1[34]
__shared__ Apair2[34]
...
最佳答案
如果您的矩阵对是连续存储的,并且通过线程索引线性访问元素,则不会有共享内存库冲突。
换句话说,如果您有:
A[0] <- mat1 element1
A[1] <- mat1 element2
A[2] <- mat1 element3
A[15] <- mat1 element16
A[16] <- mat2 element1
A[17] <- mat2 element2
A[33] <- mat2 element18
float element;
element = A[pairindex * 34 + matindex * 16 + threadIdx.x];
x + threadIdx.x
的数组索引(其中
x
不依赖于threadIdx.x,或者至少在16个线程的组中是恒定的),就不会出现库冲突。
关于optimization - CUDA中的共享存储库冲突: How memory is aligned to banks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2283627/
我是一名优秀的程序员,十分优秀!