在DCU上适配slate的时候遇到了不兼容问题
我们在 DTK 25.04 环境下使用 GPUfusion 的 CUDA/cuSOLVER 兼容接口运行 SLATE。GEMM 测试正常,但 GPU Cholesky 分解(POTRF)报错:
```
terminate called after throwing an instance of 'blas::Error'
what(): host_work_size != 0, in function potrf
```
调用链为
SLATE → LAPACK++ GPU potrf
→ cusolverDnXpotrf_bufferSize
→ hipsolverDnXpotrf_bufferSize
抛出错误的源码部分会检测CPU工作区大小
```
// query for workspace size
size_t dev_work_size, host_work_size;
potrf_work_size_bytes(
uplo, n, dA, ldda, &dev_work_size, &host_work_size, queue );
// alloc workspace in queue
queue.work_ensure_size< char >( dev_work_size ); // syncs if needed
void* dev_work = queue.work();
blas_error_if( host_work_size != 0 );
// launch kernel
#if CUSOLVER_VERSION >= 11000
auto params = queue.solver_params();
blas_dev_call(
cusolverDnXpotrf(
solver, params, uplo_, n,
CudaTraits::datatype, dA, ldda,
CudaTraits::datatype,
dev_work, dev_work_size,
nullptr, 0, // host work assumed 0
dev_info ));
```
想问一下 `cusolverDnXpotrf`或者hipsolverDnXpotrf在这一块的具体实现?是否有分配GPU工作区?
以及解决的建议?目前不太敢直接删除,如果 DTK 确实需要 CPU 工作区,可能出现参数错误、空指针访问、崩溃或错误结果。