问题标签 [gpu-shared-memory]
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.
cuda - 解释 ptxas 的详细输出,第二部分
这个问题是解释 ptxas 的详细输出的延续,第一部分。
当我们用 编译一个内核.ptx
文件ptxas -v
,或者用 用一个.cu
文件编译它时-ptxas-options=-v
,我们会得到几行输出,例如:
(与链接到的问题中的示例相同;但名称拆解)
这个问题是关于最后一行的。来自其他内核的更多示例:
除了使用的寄存器数量之外,我们如何解释这一行的信息?具体来说:
- 是
cmem
常量记忆的缩写吗? - 为什么有不同的类别,
cmem
即cmem[0]
,,?cmem[2]
cmem[14]
smem
可能代表shared memory
; 它只是静态共享内存吗?- 每种条目在什么情况下会出现在这一行?
cuda - CUDA 上共享内存中的非顺序访问引起的银行冲突
我正在编写一些针对 Volta 和 Turing 系列卡的 CUDA 中具有短程交互的 N 体模拟代码。我计划使用共享内存,但我不太清楚这样做时如何避免银行冲突。由于我的交互是本地的,我计划将我的粒子数据分类到本地组中,我可以将它们发送到每个 SM 的共享内存(还不担心有邻居正在从另一个 SM 处理的粒子。为了变得更好性能(避免银行冲突),仅每个线程从/向共享内存的不同地址读取/写入就足够了,但每个线程可以非顺序访问该内存而不会受到惩罚?
我看到的所有信息似乎都只提到内存被合并以从全局内存复制到共享内存,但我没有看到任何关于扭曲(或整个 SM)中的线程是否关心共享内存中的合并。
cuda - CUDA直方图问题
我对生成直方图的简单 CUDA 代码有疑问:
直方图用于记录输入中存在的值的数量,允许的值为 1 到 256。每个块最多有 256 个线程。我试图限制跨块的总线程数,以便每个线程记录直方图中一个值的出现。
如果我使用“values_arr = { 2, 2, 2, 2, 2, 2, 2, 4, 5, 5, 5, 5, 7, 7, 7, 7, 19, 20, 21, 100, 256 }”这意味着大小是 21,我得到:
2:7 4:1 5:4 7:4 19:1 20:1 21:1
我正在尝试使每个值都由一个线程记录并处理所有无用的线程。此外,您发现的任何其他问题以及以最佳方式解决此问题的任何建议将不胜感激。谢谢!
cuda - 在 CUDA 中,为什么我不能动态分配 2d 共享内存?
以下工作正常;
但以下不起作用:
我想了解为什么会这样?
python - 如何配置我的 jupyter notebook 以便在使用 keras 时使用可用的 GPU?
我搜索了解决方案并使用 pip 安装了 tensorflow-gpu。
此代码返回一个空列表。[]
您可以看到我有 2 个 GPU,但是当我使用 keras 进行图像处理(CNN)时,它们都没有被使用。
我是新手,所以不明白到底出了什么问题。请帮我配置,以便我可以使用我的 GPU 进行处理。我正在使用 Windows 10 64 位 Python-3.8.7。按照建议,我尝试在 python 终端上导入 tensorflow,但出现以下错误:
2021-02-13 22:52:17.253841:W tensorflow/stream_executor/platform/default/dso_loader.cc:60] 无法加载动态库“cudart64_110.dll”;dlerror: cudart64_110.dll not found 2021-02-13 22:52:17.266384: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] 如果您的机器上没有设置 GPU,请忽略上面的 cudart dlerror。
当我尝试列出 GPU 时,紧随其后的是:
tf.config.list_physical_devices('GPU')
2021-02-13 22:57:17.390319:我 tensorflow/compiler/jit/xla_cpu_device.cc:41] 未创建 XLA 设备,未设置 tf_xla_enable_xla_devices 2021-02-13 22:57:17.749790:我 tensorflow/stream_executor/platform/ default/dso_loader.cc:49] 成功打开动态库 nvcuda.dll 2021-02-13 22:57:18.937838: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1720] 找到具有属性的设备 0:pciBusID: 0000 :01:00.0 名称:GeForce MX150computeCapability: 6.1 coreClock: 1.5315GHz coreCount: 3 deviceMemorySize: 2.00GiB deviceMemoryBandwidth: 44.76GiB/s 2021-02-13 22:57:18.966071: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] 无法加载动态库“cudart64_110.dll”;dlerror: cudart64_110.dll not found 2021-02-13 22:57:18.974209: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] 无法加载动态库 'cublas64_11.dll'; dlerror: cublas64_11.dll not found 2021-02-13 22:57:18.981154: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] 无法加载动态库 'cublasLt64_11.dll'; dlerror: cublasLt64_11.dll not found 2021-02-13 22:57:18.988826: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] 无法加载动态库 'cufft64_10.dll'; dlerror: cufft64_10。找不到 dll 2021-02-13 22:57:18.996411: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] 无法加载动态库 'curand64_10.dll'; dlerror: curand64_10.dll not found 2021-02-13 22:57:19.002563: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] 无法加载动态库 'cusolver64_10.dll'; dlerror: cusolver64_10.dll not found 2021-02-13 22:57:19.009636: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] 无法加载动态库 'cusparse64_11.dll'; dlerror: cusparse64_11.dll not found 2021-02-13 22:57:19.018025: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] 无法加载动态库 'cudnn64_8.dll'; dlerror: cudnn64_8.dll 未找到 2021-02-13 22:57:19.025064: W tensorflow/core/common_runtime/gpu/gpu_device.cc: 1757] 无法打开某些 GPU 库。如果您想使用 GPU,请确保正确安装了上述缺少的库。按照指南在https://www.tensorflow.org/install/gpu了解如何为您的平台下载和设置所需的库。跳过注册 GPU 设备... []
parallel-processing - CUDA 平铺矩阵乘法解释
我试图了解来自 CUDA SDK 8.0 的示例代码是如何工作的:
内核的这一部分对我来说非常棘手。我知道矩阵 A 和 B 表示为数组 (*float),并且由于共享内存块,我还知道使用共享内存来计算点积的概念。
我的问题是我不理解代码的开头,特别是 3 个特定变量(aBegin
和aEnd
)bBegin
。有人可以为我制作一个可能执行的示例图,以帮助我了解索引在这种特定情况下是如何工作的吗?谢谢
python - 使用一个 GPU 和共享内存训练一个火炬模型
我是训练 pytorch 模型和 GPU 的新手,我曾尝试在 Windows 上对其进行训练,但始终使用专用内存(10GB)并且不使用共享内存我尝试使用多处理来提高其性能,但我一直收到错误:TypeError:无法腌制“模块”对象
解决方案通常是在加载数据时使用 num_wrokers =0 我实际上在加载数据后使用多处理并且只需要利用共享内存
我正在重新训练 meta-sr 扬声器验证码,特别是训练文件: https ://github.com/seongmin-kye/meta-SR/blob/b4c1ea1728e33f7bbf7015c38f508f24594f3f88/train.py
我已将第 92 行编辑为使用共享 GPU 内存,如下所示
train(train_generator, model, objective, optimizer, n_episode, log_dir, scheduler)
:
如果需要添加更多信息,请告诉我提前谢谢
cuda - 为什么我的 GPU 拒绝接受共享内存配置而不发出错误?
考虑下面的程序。
它获取 CUDA 设备当前的共享内存银行大小配置;将其设置为另一个值;然后再次得到它。不幸的是,这是输出:
我的问题:为什么会发生这种情况?具体来说,
- 某些 CUDA GPU 会忽略此设置吗?如果是这样,为什么设置银行配置时没有返回错误?
- 我的程序可能只是有一个错误吗?
- 是因为我同时使用运行时 API 和驱动程序 API 调用吗?
笔记:
- 为了便于阅读,我已经删除了大部分错误检查,但您需要相信我,我确实会检查错误。
- 我在 Devuan GNU/Linux Chimaera 上的 GTX 1050 Ti Boost、CUDA 11.4、驱动程序 470.57.02 上运行它。
cuda - 如何判断 CUDA 设备是否具有固定的共享内存库大小?
一些 CUDA 设备支持不同的共享内存库大小(4 字节、8 字节);其他人只支持一个(通常/总是4个字节)。
正如我已经意识到的那样,尝试将银行大小设置为不受支持的值时不会出错……这将被忽略。那么,我如何以编程方式判断我的设备是第一种还是第二种?
我不介意使用运行时或驱动程序 API。
cuda - 来自共享内存中的数据结构的竞态检查错误
我有一个数据结构哈希表,它具有线性探测哈希方案,并被设计为与 CAS 无锁。
哈希表
然后我有一个最小的内核以及主函数,只是为了让哈希表运行。重要的是哈希表用 注释__shared__
,它被分配在 SM 的共享内存中,用于快速访问。(我没有添加任何输入数据cudaMalloc
以保持示例最小化。)
编译它的标准方法,如果文件被调用test.cu
:
$ nvcc -G test.cu -o test
我不得不说,这个哈希表在大量输入下的并发插入期间总是会给我正确的答案。但是,当我运行racecheck
它时,我到处都看到错误:
我很困惑,我相信这个线性探测哈希表可以通过我的单元测试,但到处都有数据竞争的危险。我想这些危险与正确性无关。(?)
经过一段时间的调试,我仍然无法消除危险错误。我坚信这volatile
是原因。我希望有人能够对此有所了解,并帮助我解决那些烦人的危险。
我也希望这个问题可以反映有关该主题的一些设计思想:共享内存上的数据结构。在 StackOverflow 上搜索时,我看到的只是共享内存中的普通原始数组。