问题标签 [bank-conflict]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1715 浏览

cuda - CUDA中的warp和bank的机制是什么?

我是学习CUDA并行编程的菜鸟。现在我对设备的全局内存访问感到困惑。这是关于翘曲模型和合并的。

有几点:

  1. 据说一个块中的线程被分成经线。在每个经纱中最多有 32 个线程。这意味着同一个warp的所有这些线程将在同一个处理器上同时执行。那么半曲折的意义是什么?

  2. 当涉及到一个块的共享内存时,它会被分成16个bank。为了避免银行冲突,多个线程可以同时读取一个银行,而不是写入同一个银行。这是一个正确的解释吗?

提前致谢!

0 投票
1 回答
987 浏览

cuda - L1缓存的CUDA银行冲突?

在 NVIDIA 的 2.x 架构上,每个 warp 有 64kb 的内存,默认情况下划分为 48kb 的共享内存和 16kb 的 L1 缓存(服务globalconstant内存)。

我们都知道访问共享内存的银行冲突——内存被分成 32 个大小为 32 位的银行,以允许所有 32 个线程同时独立访问。另一方面,全局内存虽然慢得多,但不会遇到存储库冲突,因为内存请求是通过 warp 合并的。

问题: 假设来自全局或常量内存的一些数据缓存在 L1 缓存中,用于给定的 warp。对这些数据的访问是否会受到存储冲突的影响,例如共享内存(因为 L1 缓存和共享内存实际上是相同的硬件),还是像全局/常量内存那样没有存储冲突?

0 投票
1 回答
1816 浏览

c++ - CUDA - determine number of banks in shared memory

Shared memory is "striped" into banks. This leads to the whole issue of bank conflicts, as we all know.

Question: But how can you determine how many banks ("stripes") exist in shared memory?

(Poking around NVIDIA "devtalk" forums, it seems that per-block shared memory is "striped" into 16 banks. But how do we know this? The threads suggesting this are a few years old. Have things changed? Is it fixed on all NVIDIA CUDA-capable cards? Is there a way to determine this from the runtime API (I don't see it there, e.g. under cudaDeviceProp)? Is there a manual way to determine it at runtime?)

0 投票
1 回答
209 浏览

cuda - 从全局内存加载二维数据时,CUDA Fortran 中的共享内存库冲突

我正在访问全局内存以将数据加载到共享内存,并想知道是否存在银行冲突。这是设置:

在全局内存中:g_array. 大小为 (256, 64) 的二维矩阵

这就是我将数组数据从全局内存加载到共享内存的方式。我用 gridDim (4, 1) 和 blockDim (16, 16) 调用内核。

0 投票
1 回答
742 浏览

cuda - CUDA:不同经线之间的银行冲突?

我刚刚了解到(从Why only a warp is executed by a SM in cuda?)中,Kepler GPU 实际上可以一次执行来自多个(显然是 4 个)warp 的指令。

共享内存库也可以同时服务四个请求吗?如果不是,那意味着银行冲突可能发生在碰巧同时执行的不同warp的线程之间,即使在任何单独的warp中都没有银行冲突,对吧?有这方面的信息吗?

0 投票
1 回答
656 浏览

c - 银行冲突是否发生在非 GPU 硬件上?

这篇文解释了内存库冲突如何影响转置函数的性能。

现在我不禁想知道:“普通”cpu(在多线程上下文中)是否也会发生同样的情况?或者这是特定于 CUDA/OpenCL 的?或者它甚至没有出现在现代 CPU 中,因为它们的缓存大小相对较大?

0 投票
1 回答
997 浏览

cuda - Fermi 和更高版本中共享内存库冲突的相关性

根据我在 CUDA 文档中读到的内容,共享内存库冲突与 sm_20 及更高版本无关,因为在同时请求值时会广播值,从而防止任何类型的序列化延迟。

文档:

共享内存硬件在计算能力 2.x 的设备上得到了改进,以支持多个广播字,并为每个线程的 8 位、16 位、64 位或 128 位访问产生更少的存储库冲突(第 G.2 节)。 4.3)。

有人可以证实我的说法吗?

0 投票
1 回答
160 浏览

opencl - Bank conflict in 2D kernel

Suppose our hardware has 32 banks of 4 byte width. And we have a 1D kernel of size 32, and a local 1D array of ints.

Then, ensuring that each consecutive thread accesses consecutive memory locations in the array should avoid bank conflicts.

But, suppose we have an 8 x 4 2D kernel and the same 1D array. How can I ensure that there are no bank conflicts? How do we define "consecutive thread" for a 2D array?

0 投票
1 回答
1694 浏览

cuda - 银行冲突CUDA共享内存?

我在 CUDA 内核中遇到(我相信是)共享内存库冲突。代码本身相当复杂,但我在下面附加的简单示例中复制了它。

在这种情况下,它被简化为从全局 -> 共享 -> 全局内存的简单副本,大小为 16x16 的 2D 数组,使用可能在右侧填充的共享内存数组(变量ng)。

如果我使用 NVVP 编译代码ng=0并检查共享内存访问模式,它会告诉我“没有问题”。例如,我在标有"NVVP warning"ng=2的行中得到"Shared Store Transactions/Access = 2, Ideal Transactions/Acces = 1 " 。我不明白为什么(或更具体地说:为什么填充会导致警告)。

编辑 如下格雷格史密斯所述,在开普勒上有 32 个 8 字节宽的银行(http://gpgpu.org/wp/wp-content/uploads/2013/09/08-opti-smem-instr.pdf,幻灯片18). 但我看不出这会如何改变问题。

如果我理解正确,有 32 个(B1, B2, ..)4 字节的银行,双打(D01, D02, ..)存储为:

没有填充,半扭曲写入 ( as[ijs] = in[ij]) 到 shared-memoryD01 .. D15D16 .. D31。使用填充(大小为 2),前半扭曲写入D01 .. D15,填充后的第二个写入D18 .. D33,这仍然不应该导致银行冲突吗?

知道这里可能出了什么问题吗?

简化示例(使用 cuda 6.5.14 测试):

0 投票
2 回答
926 浏览

cuda - CUDA 共享内存库冲突报告更高

我一直在优化一些代码,并在 CUDA Nsight 性能分析中遇到了共享内存库冲突报告的问题。我能够将它简化为 Nsight 报告为存在银行冲突的非常简单的一段代码,而它似乎不应该存在。下面是内核:

以及调用它的主要功能:

请注意,我正在使用单个扭曲来真正将其减少到最低限度。当我运行代码时,Nsight 说有 1 个银行冲突,但根据我读过的所有内容,不应该有任何冲突。对于对共享内存数组的每次访问,每个线程都在访问连续的值,每个值都属于不同的存储体。

是否有其他人在报告 Nsight 时遇到过问题,或者我只是在银行冲突的运作方面遗漏了一些东西?我将不胜感激任何反馈!

顺便说一句,我正在运行以下设置:

  • 视窗 8
  • GTX 770
  • Visual Studio 社区 2013
  • CUDA 7
  • Nsight Visual Studio 4.5版