全局内存写入在 CUDA 中是否被视为原子?

2023-12-05

全局内存写入在 CUDA 中是否被视为原子操作?

考虑以下 CUDA 内核代码:

int idx = blockIdx.x*blockDim.x+threadIdx.x;
int gidx = idx%1000;
globalStorage[gidx] = somefunction(idx);

全局内存是否写入globalStorage原子?,例如不存在竞争条件,导致并发内核线程写入存储在 globalStorage 中的同一变量的字节,这可能会弄乱结果(例如部分写入)?

请注意,我在这里讨论的不是像加/减/按位等原子操作,而是直接全局写入。

编辑:重写示例代码以避免混淆。


CUDA 中的内存访问不是隐式原子的。但是,您最初显示的代码本质上并不是内存竞赛只要idx正在运行的内核中的每个线程都有一个唯一的值.

所以你原来的代码:

int idx = blockIdx.x*blockDim.x+threadIdx.x;
globalStorage[idx] = somefunction(idx);

如果内核启动使用一维网格并且globalStorage大小合适,而您的第二个版本:

int idx = blockIdx.x*blockDim.x+threadIdx.x;
int gidx = idx%1000;
globalStorage[gidx] = somefunction(idx);

不会是因为多个线程可能会写入相同的条目globalStorage。在这种情况下,没有原子保护或序列化机制可以产生可预测的结果。

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

全局内存写入在 CUDA 中是否被视为原子? 的相关文章

随机推荐

  • 使用 Tkinter 进行 Python GUI 编程

    目录 Building Your First Python GUI Application With Tkinter 添加小部件 检查你的理解情况 Working With Widgets 使用标签小部件显示文本和图像 使用按钮小部件显示可
  • 如何了解更多信息

    在我们的专门课程中了解有关 Thonny 的更多信息 Thonny 适合初学者的 Python 编辑器
  • 回顾你所学的内容

    通过回顾您在课程或教程中学到的内容 您将更深入地处理信息 这有助于长期保留 重要链接 互动测验 书签教程
  • 在 Python 中使用 len() 函数

    目录 Getting Started With Python s len 将 len 与内置序列一起使用 将 len 与内置集合一起使用 探索 len 与其他内置数据类型 Exploring len Further With Some Ex
  • 动画片

    通过使用 r和 b转义序列来控制光标的位置 您可以使用文本创建翻页书样式的动画 以下是如何制作一个旋转器来指示忙碌状态 usr bin env python from time import sleep Show the spinning
  • 使用 Beautiful Soup 和 Python 进行网页抓取(概述)

    互联网上数量惊人的数据对于任何研究领域或个人兴趣来说都是丰富的资源 为了有效地收集这些数据 您需要熟练掌握网页抓取 Python 库requests和 Beautiful Soup 是完成这项工作的强大工具 如果您喜欢通过实践示例进行学习并
  • 在 Ubuntu Linux 16.04 上安装 Python

    了解如何使用 deadsnakes PPA 在 Ubuntu 16 04 中安装 Python 3 7 deadsnakes PPA 是一个包含旧版 Ubuntu 安装的现代 Python 版本的存储库
  • While 循环和列表

    在本课中 您将学习如何使用while 环形 该代码是在视频的实时会话中调试的 一个简单的例子可能如下所示 a fizz baz buzz while a print a pop 1
  • Python 的 map() 函数入门

    以下是有关 lambda 的资源和附加文档 如何使用 Python Lambda 函数 真正的 Python 文章 如何使用 Python Lambda 函数 真正的 Python 视频课程 Lambda 表达式 Python 文档
  • 选择优质包第 2 部分

    资源和链接 如何为 GitHub 项目编写出色的自述文件 dbader org 开源许可证解释 choosealicense com
  • Python 的 map() 函数:转换 Iterables(摘要)

    在本课程中 您学习了如何map 工作原理以及如何使用它来处理可迭代对象 你还了解了一些Pythonic您可以用来替换的工具map 在你的代码中 您现在知道如何 使用Pythonmap 使用map 到过程和转换不使用显式循环的迭代 结合map
  • Python 3.9 中很酷的新功能(概述)

    Python 3 9 来了 在过去的一年里 来自世界各地的志愿者一直致力于 Python 的改进 虽然 Beta 版本已经发布了一段时间 但 Python 3 9 的第一个正式版本已于2020 年 10 月 5 日 Python 的每个版本
  • 使用需求文件

    A 需求文件是项目所有依赖项的列表 这包括依赖项所需的依赖项 它还包含每个依赖项的特定版本 用双等号指定 pip freeze将列出当前项目的依赖关系stdout 此 shell 命令会将其导出为名为的文件requirements txt
  • 多处理模块

    在本课程中 您将了解为什么要采用这种方法 因为你的代码写在函数式编程风格 你可以相当容易地并行化它 有一个平行的map构建您可以使用的 这样 您就可以并行运行处理步骤 您将导入multiprocessing模块 因为它具有并行运行此操作所需
  • JSF:从 Jar 中提供资源

    我正在创建几个装有 Facelets 模板的罐子 供整个组织使用 在 JSF 1 2 中 此功能并不是开箱即用的 堆 Jboss EAP 5 1 Seam 2 2 富脸3 3 3 在我看来 我主要需要两个资源 查找 Faclets 资源的资
  • 在特定的开始、结束日期和时间限制内运行 Quartz Scheduler 作业

    我正在使用 Quartz Scheduler 来执行重复性任务 但我遇到了麻烦 在我的服务器端 我的用户想要指定一些日期范围 例如From 2013 09 27 with in 09 00 AM 12 00 PM to 2013 09 30
  • Pinterest 的官方 OAuth2 流程似乎返回无效的访问令牌

    我按照 Pinterest 的说明进行操作验证用户身份完成步骤 2 后 我手里拿着一个访问令牌 但是 当我使用此访问令牌进行 API 调用时 我收到以下响应 status failure code 3 host coreapp devpla
  • 有没有办法让 JQuery ajax 成功函数访问它所包含的对象?

    我有这样的 JavaScript function Cat this meow function meow ajax do AJAX call success this meow var TopCat new Cat 这不起作用 因为 th
  • 如何在正则表达式子例程中访问捕获组?

    我有一个模式想在几个地方使用 但我想访问该模式的内部部分 有没有办法做到这一点 In this 简化的例子 DEFINE lt isa gt s
  • 全局内存写入在 CUDA 中是否被视为原子?

    全局内存写入在 CUDA 中是否被视为原子操作 考虑以下 CUDA 内核代码 int idx blockIdx x blockDim x threadIdx x int gidx idx 1000 globalStorage gidx so