问题标签 [cuda-context]

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.

0 投票
0 回答
26 浏览

cuda - 失败的 CUDA 内存分配是否需要 cudaDeviceReset 调用?

当用于 GPU 内存分配的 CUDA 运行时 API 调用失败时,是否有必要使用调用来重置上下文cudaDeviceReset()

0 投票
1 回答
101 浏览

cuda - cuCtxGetApiVersion value differs from other version management calls

I'm running the following code:

Here is the output:

From the documentation, I can see that cudaDriverGetVersion, cuDriverGetVersion, and cudaRuntimeGetVersion return values of the form (1000 * major + 10 * minor). The documentation does not specify what cuCtxGetApiVersion should return, but I assume it should be the same as the other three functions.

My question is why is the version number for the context 3020, when all the others are using 10000 and 10010? Is this how it should be?

I am having another issue where new threads that I create need to have their context shared manually, otherwise I get a 201 (invalid context) error. This is strange because I know past CUDA 4.0 all processes have one context per device per process. So I should not have to set the context for new threads that I am creating within the same process. Because cuCtxGetApiVersion is producing 3020, this leads me to believe that the context I created is using an old incorrect version, which would not have the functionality of being shared across threads.

Is this a possibility?

0 投票
1 回答
2340 浏览

c++ - 异常后重置 Cuda 上下文

我有一个使用 Cuda / C++ 的工作应用程序,但有时,由于内存泄漏,抛出异常。我需要能够实时重置 GPU,我的应用程序是服务器,因此它必须保持可用。

我尝试过这样的事情,但它似乎不起作用:

我的想法是每次从 GPU 收到异常时重置设备,但我无法使其正常工作。:( 顺便说一句,由于某些原因,我无法解决我的 Cuda 代码的所有问题,我需要一个临时解决方案。谢谢!

0 投票
1 回答
730 浏览

cuda - 多个进程可以共享一个 CUDA 上下文吗?

这个问题是 Jason R对 Robert Crovellas 对这个原始问题(“一个设备的多个 CUDA 上下文 - 有什么意义?”)的回答的评论的后续行动:

当您说多个上下文不能同时运行时,这是否仅限于内核启动,还是也指内存传输?我一直在考虑在同一个 GPU 上进行多进程设计,该 GPU 使用 IPC API 在进程之间传输缓冲区。这是否意味着实际上,一次只有一个进程可以独占访问整个 GPU(而不仅仅是特定的 SM)?[...] 就调度而言,这如何与每个进程中的流上的异步排队内核/副本相互作用?

Robert Crovella 建议在一个新问题中提出这个问题,但它从来没有发生过,所以让我在这里做这个。

0 投票
1 回答
305 浏览

cuda - 获取 cuda 上下文的内存使用情况

有没有一种方法可以让我获得 cuda 上下文内存使用情况,而不必使用仅报告设备全局信息的 cudaMemGetInfo?或者至少是一种获取当前应用程序占用多少内存的方法?

0 投票
2 回答
513 浏览

cuda - 如何减少 CUDA 上下文大小(多进程服务)

我按照 Robert Crovella 的示例介绍了如何使用 Nvidia 的Multi-Process Service。根据文档

2.1.2. 减少 GPU 上的上下文存储

如果没有 MPS,每个使用 GPU 的 CUDA 进程都会在 GPU 上分配单独的存储和调度资源。相比之下,MPS 服务器分配一份由所有客户端共享的 GPU 存储和调度资源。

我理解为减少每个进程的上下文大小,这是可能的,因为它们是共享的。这将增加可用的 GPU 内存,从而能够并行运行更多进程。

现在,回到示例。没有 MPS:

MPS 禁用

使用 MPS:

启用 MPS

不幸的是,每个进程仍然占用几乎相同 (~300MB) 的内存量。这与文档不矛盾吗?有没有办法减少每个进程的内存消耗?

0 投票
1 回答
642 浏览

cuda - Runtime API 何时销毁主 CUDA 上下文?

在运行时与驱动程序 API 的讨论中,据说

主要上下文根据需要创建,每个设备每个进程一个,被引用计数,然后在不再引用它们时被销毁。

什么算作这样的参考?而且 - 这是否意味着,通常,主要上下文应该在被重复使用后立即被破坏?例如,您获得默认设备 ID,然后启动内核;还剩下什么“参考”?当然,它不是保存设备 ID 的整数变量......

0 投票
0 回答
89 浏览

cuda - 如何确定 CUDA 上下文是否是主要上下文 - 便宜?

cuDevicePrimaryCtxRetain()您可以(?)通过调用并将返回的指针与您拥有的上下文进行比较来确定 CUDA 上下文是否是主要上下文。但是 - 如果还没有人创建主要上下文怎么办?那么有没有更便宜的方法来获得否定的答案呢?或者 - 非主要上下文是否不可能存在而主要不存在?

0 投票
1 回答
484 浏览

cuda - cudaSetDevice() 对 CUDA 设备的上下文堆栈有什么作用?

假设我有一个与 device 关联的活动 CUDA 上下文i,我现在调用cudaSetDevice(i). 发生什么了?:

  1. 没有?
  2. 主上下文替换栈顶?
  3. 主要上下文被压入堆栈?

它实际上似乎是不一致的。我已经编写了这个程序,在一台只有一个设备的机器上运行:

我得到以下输出:

这似乎是一种行为有时是一种替代,有时是一种推动。

这是怎么回事?

0 投票
1 回答
556 浏览

linux - 缺少符号:cuDevicePrimaryCtxRelease 与 cuDevicePrimaryCtxRelease_v2

我正在尝试构建以下程序:

编译总是很顺利;但是,使用 CUDA 10.2,链接工作,而使用 CUDA 11.2,我得到:

为什么会发生这种情况,我该如何解决?

注意:我正在使用带有驱动程序版本 440.82 的 Devuan Beowulf(尚未为 CUDA 11.2 安装新驱动程序)。