gpt4 book ai didi

cuda - CUBLAS 中的异步和内存所有权

转载 作者:行者123 更新时间:2023-12-02 00:57:49 38 4
gpt4 key购买 nike

CUBLAS 是一个异步库。传递给 CUBLAS 的参数对内存所有权有什么要求?

很明显,在异步调用完成之前,不应释放由 CUBLAS 操作的矩阵 - 但标量参数呢?

例如,下面的代码是声音:

//...
float alpha = compute_alpha();
cublasSaxpy(handle, n,

//Taking the address of an automatic variable!
&alpha, //and handing it to an asynchronous function!

x, incx,
y, incy);
return;

我担心在 Saxpy 实际启动时 alpha 可能不存在:如果我们在 Saxpy 启动之前从函数返回,并且 alpha 的堆栈空间被其他内容覆盖,那么可能 Saxpy 可能会得到错误的答案(甚至崩溃)。

我不想将标量参数复制到某种堆内存中,并确保它们在异步调用 CUBLAS 之前不会被破坏 - 跟踪这会很复杂。

如果 CUBLAS 明确保证标量参数在调用 CUBLAS 后不需要存在,那就太好了,但文档似乎对此不太清楚。

最佳答案

如果指针模式为HOST,alpha和beta可以在栈上,也可以在堆上分配。在下面,内核将以 alpha 和 beta 的值启动。因此,如果它们是在堆上分配的,则可以在调用返回后立即释放它们(即使内核启动是异步的)

如果指针是 DEVICE,则 alpha 和 beta 必须在设备上可访问,并且在内核完成之前不应修改它们的值。请注意,由于 cudaFree 执行隐式 cudaDeviceSynchronize(),因此在调用后仍可以立即调用 alpha/beta 的 cudaFree,但在这种情况下它违背了 DEVICE 指针模式的目的。

关于cuda - CUBLAS 中的异步和内存所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25070907/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com