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
可能会不存在:如果我们在函数返回之前返回,且存储 alpha 的栈空间被其他东西覆盖,那么 Saxpy 可能会得到错误的答案(甚至崩溃)。
我不想将标量参数复制到某种堆内存中,并确保它们在异步调用 CUBLAS 后不被销毁 - 跟踪这一点会很复杂。
如果 CUBLAS 明确保证标量参数在调用 CUBLAS 后不需要继续存在,那就太好了,但文档似乎并不是非常清楚。
cudaMemcpyAsync
中,这对我来说似乎不太可能。 - Robert Crovella