- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个数组 A 和 B,分别有 m 和 n 个 int 变量。我有一个函数 f,我想生成所有 f(a, b),其中 a 在 A 中,b 在 B 中:
A = {a1, a2, a3, ...., am}
B = {b1, b2, b3, ...., bn}
C = f(A * B) = {f(a1,b1), f(a1,b2), f(a1,b3), ..., f(a1, bn),
f(a2,b1), f(a2,b2), f(a1,b3), ..., f(a2, bn),
...
f(am,b1), f(am,b2), f(am,b3), ..., f(am, bn)}
更准确地说,我的函数 f 是数字之间的简单按位或,但我想一般性地问它。此外,结果中项目的顺序并不重要。我只想从 A 和 B 生成所有可能的对。
由于我需要生成并存储结果,如何高效地实现(使用C++ Cuda)以减少访问全局内存的次数?我需要使用共享内存吗?
任何建议都将不胜感激。
最佳答案
例如,这个想法是在大小为 32x32 的线程 block 上进行操作。对于(i, j)
位置处的每个线程 block ,a[i:i+32]
可以被当前线程中的一部分加载到共享内存中。堵塞。同样的情况也适用于 b[j:j+32]
。然后,所有线程都可以计算 f(shared_a[thread_i], shared_b[thread_j])
,其中 shared_a
和 shared_b
是之前加载的值共享内存,thread_i
和thread_j
是当前 block 中线程的索引。
为了获得更好的性能,线程 block 可以计算许多大小为 32x32 的紧密 block 。例如,32x32 的线程 block 可以计算大小为 32x32 的 4x4 打包 block (产生 128x128 项)。这个想法是在共享内存中加载更多值,从而减少重新加载的次数。
话虽如此,节点在内存中写入C
矩阵将非常昂贵,这肯定会使之前的所有优化变得毫无值(value)。即时计算需要 C
的操作应该是一个好主意。
关于c++ - 如何使用 C++ Cuda 高效地实现并行笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71271909/
我是一名优秀的程序员,十分优秀!