如何在 cudaMemcpyPeerAsync() 中定义目标设备流?

2023-12-12

我正在使用 cudaMemcpyPeerAsync() 从 gpu0 到 gpu1 执行异步 memcpy。

cudaMemcpyAsync() 提供用于 gpu0 的流选项,但不用于 gpu1。我也可以以某种方式定义接收设备的流吗?

我使用 OpenMP 线程来管理每个设备(因此,它们位于单独的上下文中)。

Visual Profiler 显示发送设备的流,但对于接收设备,此 memcpy 仅显示在 MemCpy (PtoP) 中,而不显示在任何流中(甚至不在默认流中)

PS:我目前的实现效果很好。我只是想重叠发送和接收通信。


没有针对 cuda 对等副本的 API 调用,允许您在两端指定流。你的问题的简单答案是否定的。

流是组织活动的一种方式。 cudaMemcpyPeerAsync 调用将显示在其分配到的流(和设备)中。这是您对 API 的控制级别。

由于流决定(即控制、调节)行为,因此能够将 cuda 任务分配给单独的流(在本例中为多个设备上)是 CUDA 中未公开的控制级别。设备(和流)旨在异步操作,并且要求特定的 cuda 任务满足两个单独流的要求(在本例中是在两个单独的设备上)将引入一种不合适的同步类型,并可能导致各种活动陷入停滞,甚至陷入僵局。

这里的任何描述以及 cudaMemcpyPeerAsync 的行为都不应阻止您在各个方向上重叠复制操作。事实上,在我看来,将 cuda 任务分配给多个流会使灵活重叠更难以实现。

如果您难以实现特定的重叠,您可能应该描述问题(即,提供一个简单的重现器完整的可编译 SSCCE.org 代码),并显示可视化分析器显示的当前重叠场景,并描述所需的重叠场景。

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

如何在 cudaMemcpyPeerAsync() 中定义目标设备流? 的相关文章

  • 使用 tfprof 分析 TensorFlow

    我正在尝试分析 TensorFlow 的计算 内存使用情况 发现tfprof https github com tensorflow tensorflow tree master tensorflow tools tfprof是实现我的目的
  • 摆脱异步 cuda 流执行期间的忙等待

    我正在寻找一种方法 如何摆脱以下代码中主机线程中的忙等待 不要复制该代码 它仅显示我的问题的想法 它有许多基本错误 cudaStream t steams S N for int i 0 i lt S N i cudaStreamCreat
  • 使用 cudamalloc()。为什么是双指针?

    我目前正在浏览有关的教程示例http code google com p stanford cs193g sp2010 http code google com p stanford cs193g sp2010 学习CUDA 演示的代码 g
  • CUDA 和 Eigen 的成员“已声明”错误

    我只是 CUDA 和 Nsight 的初学者 希望利用出色的 GPU 性能进行线性代数运算 例如 CUBLAS 我在以下人员的帮助下编写了很多自定义代码Eigen http eigen tuxfamily org index php tit
  • CUDA-Kernel 应该根据块大小动态崩溃

    我想做稀疏矩阵 密集向量乘法 假设用于压缩矩阵中条目的唯一存储格式是压缩行存储 CRS 我的内核如下所示 global void krnlSpMVmul1 float data mat int num nonzeroes unsigned
  • 布尔实现的atomicCAS

    我想弄清楚是否存在错误答案 https stackoverflow com a 57444538 11248508 现已删除 关于Cuda like的实现atomicCAS for bool是 答案中的代码 重新格式化 static inl
  • 如何从C++头文件调用CUDA文件?

    我知道从 c 文件调用 cu 文件的方法 但现在我想从 C 头文件调用 cu 文件 有可能做到吗 如果是这样 我应该如何设置我的项目 请帮忙 这是一个有效的例子 file1 h int hello file2 h include
  • CUDA 代码会损坏 GPU 吗?

    在测试包含内存错误的 CUDA 时 我的屏幕被冻结了 重新启动后我无法再检测到显卡 我的代码是否有可能物理损坏该卡 这发生在 Ubuntu 14 04 下 我不知道该卡的型号 因为我无法检测到它 但我记得它是一张相当新的卡 感谢所有的评论我
  • 了解流式多处理器 (SM) 和流式处理器 (SP)

    我正在尝试了解 GPU 的基本架构 我已经阅读了很多材料 包括这个非常好的答案 https stackoverflow com a 2213744 2386113 但我仍然很困惑 无法得到一个好的图片 我的理解 GPU 包含两个或多个流式多
  • 如何从尖点库矩阵格式获取原始指针

    我需要从尖点库矩阵格式获取原始指针 例如 cusp coo matrix
  • goto 指令对 CUDA 代码中扭曲内发散的影响

    对于CUDA中简单的warp内线程发散 我所知道的是SM选择一个重新收敛点 PC地址 并在两个 多个路径中执行指令 同时禁用未采用该路径的线程的执行效果 例如 在下面的代码中 if threadIdx x lt 16 A do someth
  • 使用设备函数指针数组

    我需要以下设备版本 主机代码 double func double x double func1 double x return x 1 double func2 double x return x 2 double func3 doubl
  • Google Colab 显示忙碌

    我昨天在 google colab 上进行了训练过程 现在 即使重新启动运行时并中断执行后 Google Colab仍显示繁忙 我想停止当前的执行 请帮忙 从运行时菜单中选择 重新启动运行时 就足够了 如果由于某种原因不起作用 您可以通过从
  • 为什么 CUDA 内存复制速度会这样,有一些恒定的驱动程序开销?

    在我的旧 GeForce 8800GT 上使用 CUDA 内存时 我总是会遇到奇怪的 0 04 毫秒开销 我需要将 1 2K 传输到设备的常量内存中 处理其中的数据并从设备中仅获取一个浮点值 我有一个使用 GPU 计算的典型代码 alloc
  • 我可以将 CUDA 与非 NVIDIA GPU 一起使用吗? [复制]

    这个问题在这里已经有答案了 我正在寻找一种在没有 NVIDIA GPU 的系统上运行 CUDA 程序的方法 我尝试安装 MCUDA 和 gpuOcelot 但安装似乎遇到一些问题 我已经浏览了中给出的答案如何使用软件实现在没有 GPU 的情
  • 初学者 CUDA - 简单的 var 增量不起作用

    我正在使用 CUDA 开发一个项目 为了掌握它 我有以下代码 include
  • 嵌套循环中数组的二维累积和——CUDA实现?

    我一直在考虑如何使用归约在 CUDA 上执行此操作 但我对如何完成它有点不知所措 C 代码如下 要记住的重要部分 变量预先计算的值依赖于取决于both循环迭代器 另外 变量ngo并不是每个值都是唯一的m 例如m 0 1 2 可能有ngo 1
  • 遍历后加快数组查找速度?

    我有一个123MB大的int数组 它基本上是这样使用的 private static int data new int 32487834 static int eval int c int p data c 0 p data p c 1 p
  • cuda nvcc使__device__有条件

    我正在尝试将 CUDA 后端添加到 20k loc C 表达式模板库 到目前为止 它工作得很好 但我完全被淹没了 warning calling a host function from a host device function is
  • 使用 Vulkan VkImage 作为 CUDA cuArray

    使用 Vulkan VkImage 作为 CUDA cuArray 的正确方法是什么 我一直在尝试遵循一些示例 但是我在调 用时收到 CUDA ERROR INVALID VALUEcuExternalMemoryGetMappedMipm

随机推荐

  • System.IO.StreamWriter 不会为整个 for 循环写入内容

    我正在尝试用 C 将一长串数字写入文件 但它在列表末尾之前一直停止 例如下面的代码 System IO StreamWriter file new System IO StreamWriter D test txt for int i 0
  • NetworkStream 如何在两个方向上工作?

    我读过 Tcp Echo 服务器的示例 但有些事情我不清楚 TcpClient client null NetworkStream netStream null try client listener AcceptTcpClient net
  • C/C++ 结构体到 C#.Net CF WinCE 的转换

    您好 我正在尝试将 C C 结构转换为 C C C 结构如下 typedef struct NDISUIO QUERY OID NDIS OID Oid PTCHAR ptcDeviceName UCHAR Data sizeof ULON
  • OpenNETCF签名控制问题

    我正在使用 OpenNETCF 中的签名控件 它非常适合我需要的大多数东西 但是 我需要一种方法反转签名并将其重新加载 它有一个调用来获取签名的 字节 GetSignatureEx 它返回一个byte 的签名 然后可以使用以下命令重新加载此
  • 如何在C#中使用Fiddlercore捕获http请求?

    我正在尝试使用 C 中的 fiddlercore 捕获请求标头 这是我的代码 我使用 selenium 访问我想要获取请求标头 网络表单的网页 我可以访问网页 但无法使用 fiddlercore 捕获任何内容 我知道我必须使用委托和 Beg
  • ASP.net MVC - 呈现包含不同类型的列表,每种类型具有不同的视图

    想象一下 我有一个实现名为 ISummary 的接口的对象列表 该列表中的对象可能具有附加属性 即 public interface ISummary Guid Id get set string Title get set DateTim
  • 控件显示在设计器中但不显示在模拟器中

    这是我的第一个 Xamarin 应用程序 我在 Visual Studio 中设置了环境 并且有一个可以在 Android 模拟器中运行的模板项目 将几个控件拖放到设计器表面后 我发现当我在模拟器中运行应用程序时 我添加的两个控件 一个按钮
  • 何时使用reinterpret_cast?

    我对以下内容的适用性有点困惑reinterpret cast vs static cast 根据我的阅读 一般规则是当类型可以在编译时解释时使用静态强制转换 因此这个词static 这也是 C 编译器在内部用于隐式转换的转换 reinter
  • 在 ORM 查询中使用原始 SQL

    是否可以使用您自己的原始 SQL 进行编辑或覆盖 ORM 生成的 SQL 或者 ORM 是否足够灵活 可以构建几乎任何我能想象到的查询 具体来说 这是我试图进行的查询 也许通过 ORM 构建并不太难 尽管我看不到任何明显的构建路径 这是模型
  • 滚动时修复列标题 - jqgrid

    如果我的网格数据在当前窗口上滚动 是否可以在滚动数据时冻结列标题 以便列标题始终可见 就像在 Excel 中一样 我使用 height auto 因为我不想修复网格高度 提前致谢 如果网格是页面上最顶层的元素 则使用position fix
  • 如何使用绑定更新 Azure 函数中的 Azure 表行?

    我正在使用node和Azure Functions使用functions json中定义的绑定来更新我的azure表 我能够使用 out 绑定插入行 但找不到任何有关如何更新它们的文档 函数 json tableName myTable c
  • 在 OSGi Bundle 中使用受限类

    为了使用 Endpoint 通过 SSL 进行发布 我需要访问包下的类com sun net httpserver 通过使用 Eclipse IDE 我找到了一种使用此类的方法 但是导出捆绑包并在另一个春分 OSGi 安装中运行它们我无法启
  • 如何使用 BasicAuth 保护自定义端点?

    假设我已使用 BasicAuth 启用了对资源的身份验证 class MyBasicAuth BasicAuth def check auth self username password allowed roles resource me
  • 如何使用 PHP Mysql 创建总账/T 型账户

    我正在尝试创建一个复式记账财务会计系统 我已经完成了数据库的设计 请检查此链接以查看我的数据库的图表 http i39 tinypic com juhbv6 png 我已经尝试了很多开发 mysql 查询来生成总账 但我没有任何进展 我所能
  • XDocument:将 XML 保存到没有 BOM 的文件

    我正在生成一个UTF 8 XML文件使用XDocument XDocument xml document new XDocument new XDeclaration 1 0 utf 8 null new XElement ROOT NAM
  • Microsoft CCI - 编写编译器的资源和参考

    前一段时间 我在研究编译器 我使用过System Reflection从我的 AST 生成代码 IL 现在 我有了另一个我想要开发的编译器的想法 这将是另一个宠物项目 不会在生产代码中使用任何内容 至少现在不会 如您所知 与生产代码相比 宠
  • 从 Android 通知加载 Xamarin Forms 页面

    我正在尝试从 Android 通知加载 Xamarin Forms 页面 我真的对 Android 方面迷失了方向 我的大部分代码都是从教程和博客文章中拼凑而成的 然而 似乎没有什么真正能够完全涵盖这种情况 我已经实现了一个非常简单的接口与
  • 在文件系统中存储图像时,使用相对路径还是绝对路径?

    我正在开发一个网络应用程序 我决定 在阅读了许多关于SO的文章之后 将实际图像存储在文件系统中并将元数据存储在数据库中 我应该存储相对路径还是绝对路径 我可以想到每个选择的一些优点 绝对 Pros 对于读取数据库的其他应用程序来说 该文件的
  • Teradata 与 Oracle DUAL 的等效项是什么

    在 Oracle 中 我们可以编写此代码以使用SELECT陈述 SELECT 1 AS x FROM dual Teradata 的同等产品是什么 一般不需要这样的表 在大多数情况下 Teradata 数据库中实际上不需要任何表 以下是有效
  • 如何在 cudaMemcpyPeerAsync() 中定义目标设备流?

    我正在使用 cudaMemcpyPeerAsync 从 gpu0 到 gpu1 执行异步 memcpy cudaMemcpyAsync 提供用于 gpu0 的流选项 但不用于 gpu1 我也可以以某种方式定义接收设备的流吗 我使用 Open