为什么 Cuda/OpenCL 的全局内存中不存在库冲突?

2024-01-04

我还没有弄清楚并且谷歌没有帮助我的一件事是,为什么有可能与共享内存发生银行冲突,但在全局内存中却没有?银行与寄存器会存在冲突吗?

UPDATE哇,我真的很感谢 Tibbit 和 Grizzly 的两个回答。看来我只能给一个答案打绿色复选标记。我对堆栈溢出很陌生。我想我必须选择一个答案作为最佳答案。我可以对我没有打绿勾的答案说声谢谢吗?


简短回答:全局内存或寄存器中不存在存储体冲突。

解释:

理解原因的关键是把握操作的粒度。单个线程不访问全局内存。全局内存访问是“合并的”。由于全局内存太慢,块内线程的任何访问都被分组在一起,以尽可能少地向全局内存发出请求。

共享内存可以被线程同时访问。当两个线程尝试访问同一存储体中的地址时,这会导致存储体冲突。

除了分配寄存器的线程之外,任何线程都不能访问寄存器。由于您无法读取或写入我的寄存器,因此您无法阻止我访问它们 - 因此,不存在任何银行冲突。

谁可以读写全局内存?

Only blocks。单个线程可以进行访问,但事务将在块级别处理(实际上是扭曲/半扭曲级别,但我试图不复杂)。如果两个块访问相同的内存,我不认为它会花费更长的时间,并且可能会被最新设备中的 L1 缓存加速——尽管这并不明显。

谁可以读写共享内存?

Any thread within a given block.如果每个块只有 1 个线程,则不会出现存储体冲突,但不会获得合理的性能。 Bank 冲突的发生是因为一个块分配了多个线程,例如 512 个线程,并且它们都在争夺同一 Bank 内的不同地址(不完全相同的地址)。 CUDA C 编程指南 - 图 G2,第 167 页(实际上是 pdf 的第 177 页)的末尾有一些关于这些冲突的精彩图片。3.2版本链接 http://developer.download.nvidia.com/compute/cuda/3_2/toolkit/docs/CUDA_C_Programming_Guide.pdf

谁可以读写寄存器?

Only the specific thread to which it is allocated.因此,只有一个线程同时访问它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Cuda/OpenCL 的全局内存中不存在库冲突? 的相关文章

  • 空的 openCL 程序抛出弃用警告

    我下载了 AMD APP 3 0 SDK 一旦包含 include
  • 如何在 gitlab-ci docker 执行器中使用 cuda

    我们正在使用 gitlab 持续集成来构建和测试我们的项目 最近 其中一个项目添加了 CUDA 的要求以启用 GPU 加速 我不想改变我们的管道 docker 和 gitlab ci 对我们来说运行良好 所以我想以某种方式让 docker
  • 将 GPUJPEG 项目移植到 Windows

    我目前正在尝试移植 GPUJPEG 在 Sourceforge 上 http sourceforge net projects gpujpeg 库 基于 CUDA 从 Unix 到 Windows 现在我被卡住了 我不知道发生了什么或为什么
  • 如何在 CUDA 应用程序中构建数据以获得最佳速度

    我正在尝试编写一个简单的粒子系统 利用 CUDA 来更新粒子位置 现在 我定义的粒子有一个对象 该对象的位置由三个浮点值定义 速度也由三个浮点值定义 更新粒子时 我向速度的 Y 分量添加一个常量值以模拟重力 然后将速度添加到当前位置以得出新
  • CUDA:如何在设备上填充动态大小的向量并将其内容返回到另一个设备函数?

    我想知道哪种技术可以填充设备上的动态大小数组 int row 在下面的代码中 然后返回其内容 以供另一个设备函数使用 为了将问题置于上下文中 下面的代码尝试使用在 GPU 上运行的高斯 勒让德求积来跨越勒让德多项式基组中的任意函数 incl
  • libstdc++.so.6 与 cuda 相关的链接器问题

    今天我在链接我编译的 cuda 内容时遇到了问题 我有一个最新的 debian 测试 w 2 6 32 3 amd64 我整天都在写我的代码 不时编译 没有问题 但在进行了较小的代码更改后 我收到以下错误 gcc o pa CUDA o h
  • 寻找 CUDA 中的最大值

    我正在尝试在 CUDA 中编写代码来查找最大值 对于给定的一组数字 假设您有 20 个数字 并且内核在 2 个块 每块 5 个线程 上运行 现在假设 10 个线程同时比较前 10 个值 并且thread 2找到最大值 因此线程 2 正在更新
  • 为什么 gcc 和 NVCC (g++) 会看到两种不同的结构大小?

    我正在尝试将 CUDA 添加到 90 年代末编写的现有单线程 C 程序中 为此 我需要混合两种语言 C 和 C nvcc 是 c 编译器 问题在于 C 编译器将结构视为特定大小 而 C 编译器将相同的结构视为略有不同的大小 那很糟 我对此感
  • “计算能力”是什么意思? CUDA?

    我是CUDA编程新手 对此了解不多 您能告诉我 CUDA 计算能力 是什么意思吗 当我在大学服务器上使用以下代码时 它向我显示了以下结果 for device 0 device lt deviceCount device cudaDevic
  • CUDA 中的广义霍夫变换 - 如何加快分箱过程?

    正如标题所示 我正在对并行计算机视觉技术进行一些个人研究 使用 CUDA 我尝试实现 GPGPU 版本的霍夫变换 我遇到的唯一问题是在投票过程中 我调用atomicAdd 来防止多个同时写入操作 但我似乎没有获得太多的性能效率 我在网上搜索
  • 多个进程可以共享一个 CUDA 上下文吗?

    这个问题是 Jason R 的后续问题comment https stackoverflow com questions 29964392 multiple cuda contexts for one device any sense co
  • 如何并行从数组中删除零值

    如何使用 CUDA 并行有效地从数组中删除零值 有关零值数量的信息是预先可用的 这应该可以简化这项任务 重要的是数字必须保持源数组中的顺序 当被复制到结果数组时 Example 该数组将例如包含以下值 0 0 19 7 0 3 5 0 0
  • Nvcc 的版本与 CUDA 不同

    我安装了 cuda 7 但是当我点击 nvcc version 时 它打印出 6 5 我想在 GTX 960 卡上安装 Theano 库 但它需要 nvcc 7 0 我尝试重新安装cuda 但它没有更新nvcc 当我运行 apt get i
  • NvCplGetThermalSettings 返回 false

    问题 您好 我正在尝试使用 Delphi 获取 nividia gtx 980 的 GPU 温度 我看过C 问题 他的解决方案是不使用nvcpl dll 我认为这不是正确的解决方案 因为 nivida 有完整的文档说明如何处理 API 见下
  • CUDA 常量内存是否应该被均匀地访问?

    我的 CUDA 应用程序的恒定内存小于 8KB 既然它都会被缓存 我是否需要担心每个线程访问相同的地址以进行优化 如果是 如何确保所有线程同时访问同一地址 既然它都会被缓存 我是否需要担心每个线程访问相同的地址以进行优化 是的 这缓存本身每
  • 如何在 C 中将向量参数传递给 OpenCL 内核?

    我在将向量类型 uint8 参数从 C 中的主机代码传递到 OpenCL 内核函数时遇到问题 在主机中 我将数据存储在数组中 cl uint dataArr 8 1 2 3 4 5 6 7 8 我的真实数据不仅仅是 1 8 这只是为了便于解
  • 在内核 OpenCL 中实现 FIFO 的最佳方法

    目标 在 OpenCL 中实现下图所示 OpenCl 内核所需的主要内容是将系数数组和临时数组相乘 然后最后将所有这些值累加为 1 这可能是最耗时的操作 并行性在这里非常有帮助 我正在为内核使用一个辅助函数来执行乘法和加法 我希望这个函数也
  • 如何在cmake中添加cuda源代码的定义

    我使用的是 Visual Studio 2013 Windows 10 CMake 3 5 1 一切都可以使用标准 C 正确编译 例如 CMakeLists txt project Test add definitions D WINDOW
  • 在 cudaFree() 之前需要 cudaDeviceSynchronize() 吗?

    CUDA 版本 10 1 帕斯卡 GPU 所有命令都发送到默认流 void ptr cudaMalloc ptr launch kernel lt lt lt gt gt gt ptr cudaDeviceSynchronize Is th
  • 有没有一种有效的方法来优化我的序列化代码?

    这个问题缺乏细节 因此 我决定创建另一个问题而不是编辑这个问题 新问题在这里 我可以并行化我的代码吗 还是不值得 https stackoverflow com questions 17937438 can i parallelize my

随机推荐

  • Vue路由器不渲染/挂载根路径组件

    我正在制作一个页面vue vue router and laravel 问题 当我进入localhost myproject public html the Home组件未渲染在router view 如果我单击指向服务组件的路由器链接 它
  • 如何正确钳位贝克曼分布

    我正在尝试实现 Microfacet BRDF 着色模型 类似于 Cook Torrance 模型 但我在使用本文中定义的贝克曼分布时遇到了一些问题 https www cs cornell edu srm publications EGS
  • 如何运行快捷方式

    我想知道从另一个应用程序中运行应用程序快捷方式的 官方 方式是什么 像这样 string program application exe Process Start program 这不会工作 如果application exe是一条捷径
  • .Net 4 - 在程序集中包含自定义信息

    我正在构建一个可扩展的应用程序 它将在运行时加载其他程序集Assembly LoadFile 这些附加程序集将包含 WPF 资源字典 外观等 普通资源 Resx 和 或插件类等内容 程序集也可以不包含公共类 只包含资源或资源字典 我正在寻找
  • 如何在SQL Server中生成Guid?

    我需要在 SQL 中创建一个 Id 作为 Guid 无身份 我该怎么做 我将 Id 定义为 uniqueidentifier 但保存在 Db 中的是 00000000 0000 0000 0000 000000000000 Use NEWI
  • Visual Studio 调试器值“{ }”是什么意思?

    我在 Visual Studio 2008 NET C 项目中观察到一个属性 并且调试器显示打开和立即关闭的大括号 我相信它是未初始化的 I 列表 但为什么它不显示 null 或 uninitialized 这是什么意思 br 米兰 最可能
  • 如何在 Swift 中使用 UISplitViewController

    所以我添加一个UISplitViewController到一个嵌入了UITabBarController The UISplitViewController has a UINavigationController作为与其自己的根控制器的主
  • 使用 CIImage 添加纯色边框

    我正在寻找一种使用 Core Image 将纯色边框添加到现有图像的方法 我找到了过滤器列表参考 但没有人制作它 Help 我们需要有要在其中创建实线边框的 CIImage 范围或 CGRect 然后 我们可以在指定区域绘制一个形成实线的C
  • ViewDidLoad 期间 ViewModel 为 null

    我正在开始在 iOS 中使用 MvvmCross public class MainView MvxTabBarViewController public override void ViewDidLoad base ViewDidLoad
  • 如何限制tensorflow GPU内存使用?

    我在 Ubuntu 18 04 中使用了tensorflow gpu 1 13 1 并在 Nvidia GeForce RTX 2070 上使用了 CUDA 10 0 驱动程序版本 415 27 下面的代码用于管理张量流内存使用情况 我有大
  • 有没有办法减少操作栏上操作项图标之间的间距?

    我想减少添加到 ActionBar 的操作项图标之间的间距 我们有办法做到这一点吗 使用自定义 android actionButtonStyle
  • 如何使用javascript获取网页的长度/大小

    我们使用 w3c 导航 API 获取网页计时信息 我们使用资源计时 API 获取资源信息 现在 如何获取网页的大小 看来 如果我知道页面何时加载等 我应该知道最后一个字节何时下载 这应该足以给我页面的长度 大小 我如何获得这个长度 尺寸 找
  • 尝试使用 php 使用 aes-256-gcm 进行解密

    我想知道是否有人可以帮忙 我使用的是aes 256 gcm加密方法 可以加密 但无法解密 下面是我的代码 任何人都可以看到我哪里出错了 textToDecrypt POST message password 3sc3RLrpd17 meth
  • 使用 python 将 .xlsx 和 xls(最新版本)转换为 pdf

    借助这个使用 python 将 doc 转换为 pdf https stackoverflow com questions 6011115 doc to pdf using python链接我正在尝试使用 Excel xlsx 和 xls
  • | linq 中的运算符操作?

    linq 中的 pipe 运算符 我想知道运算符 的操作 我想检查不同表中的多个列 在我的场景中 只有单个表包含该特定列的值 my code swr Date Of Event Date lt DateTime Today Date spr
  • iOS8 中的 UIScrollView 行为有所不同

    我有以下布局 所以它基本上是一个占据整个屏幕的滚动视图 内容大小设置为三倍宽度和相同高度 在滚动视图内 有容器视图和三个表视图 每页一个 最初只有中间表格视图可见 这允许我使用滚动视图水平滚动在表格之间导航 并在中间表格内垂直滚动 我知道苹
  • 使用 Node.js 进行表连接的 GraphQL 查询

    我在学习GraphQL所以我建立了一个小项目 假设我有 2 个模型 User and Comment const Comment Model define Comment content type DataType TEXT allowNu
  • .SVG 浏览器支持

    我正在研究响应式设计 并且正在考虑将导航图标创建为 svg 文件 当前的浏览器支持如何 是否有针对旧浏览器版本的解决方法 插件 除 Sources http caniuse com search svg http caniuse com s
  • 测试 sklearn 模型是否已拟合的最佳方法是什么?

    检查 sklearn 模型是否已安装的最优雅的方法是什么 即是否是fit 函数在实例化后是否被调用 你可以这样做 from sklearn exceptions import NotFittedError for model in mode
  • 为什么 Cuda/OpenCL 的全局内存中不存在库冲突?

    我还没有弄清楚并且谷歌没有帮助我的一件事是 为什么有可能与共享内存发生银行冲突 但在全局内存中却没有 银行与寄存器会存在冲突吗 UPDATE哇 我真的很感谢 Tibbit 和 Grizzly 的两个回答 看来我只能给一个答案打绿色复选标记