【问题标题】:Can execution of CUDA kernels from two contexts overlap?从两个上下文执行 CUDA 内核可以重叠吗?
【发布时间】:2015-09-15 02:36:22
【问题描述】:

来自this,似乎来自不同上下文的两个内核无法同时执行。在这方面,我在从两个应用程序中读取 CUPTI 活动跟踪时感到困惑。跟踪显示 kernel_start_timestamp、kernel_end_timestamp 和持续时间(即 kernel_end_timestamp - kernel_start_timestamp)。

应用 1: ………… 8024328958006530 8024329019421612 61415082 .......

应用 2: ………… 8024328940410543 8024329048839742 108429199

为了使长时间戳和持续时间更具可读性:

应用程序 1:61.415 毫秒的内核 X 从 xxxxx28.958 秒运行到 xxxxx29.019 秒

应用 2:108.429 毫秒的内核 Y 从 xxxxx28.940 秒运行到 xxxxx29.0488 秒

因此,内核 X 的执行与内核 Y 的执行完全重叠。

我正在使用 /path_to_cuda_install/extras/CUPTI/sample/activity_trace_async 来跟踪应用程序。我将 CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_SIZE 修改为 1024,将 CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_POOL_LIMIT 修改为 1。我只启用了对 CUPTI_ACTIVITY_KIND_MEMCPY、CUPTI_ACTIVITY_KIND_CONCURRENT_KERNEL 和 CUPTI_ACTIVITY_KIND_OVERHEAD 的跟踪。我的应用程序在各自的逻辑时间步中调用 cuptiActivityFlushAll(0) 一次。

我看到这些错误的 CUPTI 值是由于使用不当还是其他原因?

澄清:未启用 MPS,在单 GPU 上运行

更新:bug 归档,这似乎是 CUDA 6.5 的一个已知问题 正在等待使用 CUDA 7 进行测试的机会(在多个用户之间共享一个 GPU,并且需要一个不活动窗口来临时切换到 CUDA 7)

【问题讨论】:

  • 我建议您向 NVIDIA 注册开发者计划提交错误报告。请包括可重现的、操作系统、驱动程序版本和 GPU 信息。可能发生这种情况的唯一情况是 (a) MPS,(b) 具有线程块级抢占 (CC >= 3.5) 的 Linux/MacOS,以及 (c) 内核在两个不同的 GPU 上运行。时间戳比我预期的 (b) 已经发生的更接近。
  • @GregSmith (b),你的意思是抢占 CDP 内核吗?

标签: cuda gpgpu


【解决方案1】:

我不知道如何设置 CUPTI 活动跟踪。但是,即使没有 MPS 服务器,2 个内核也可以在单个 GPU 上共享一个时间跨度,尽管一次只能在 GPU 上运行一个。

如果未使用 CUDA MPS 服务器,则来自不同上下文的内核不能重叠。我假设您没有使用 MPS 服务器,然后时间片调度程序将决定一次访问 GPU 的上下文。如果没有 MPS,上下文只能在时间片调度程序分配给它的时隙中访问 GPU。因此,一次只有来自单个上下文的内核在 GPU 上运行(没有 MPS 服务器)。

请注意,有可能多个内核在 GPU 上彼此共享一个时间跨度,但仍然在该时间跨度内,只有来自单个上下文的内核可以访问 GPU 资源(我也假设您使用的是单个 GPU)。

更多信息你也可以查看MPS Service文档

【讨论】:

  • 我已经更新了 OP。你的两个假设都是正确的。
  • "请注意,有可能多个内核在 GPU 上彼此共享一个时间跨度,但在该时间跨度内,只有来自单个上下文的内核可以访问 GPU 资源“你能更详细地解释一下吗?在我看来,只有在内核被中断然后恢复(上下文切换)时才有可能。我认为上下文切换只能在内核边界进行。
猜你喜欢
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
  • 2011-09-25
  • 2015-01-27
  • 2021-05-15
  • 2011-05-19
相关资源
最近更新 更多