gpt4 book ai didi

c++ - 通过引用 CUDA 指针进行 CUDA 矩阵求逆

转载 作者:行者123 更新时间:2023-11-30 05:39:46 37 4
gpt4 key购买 nike

目前我只是在尝试基于 cuBLAS 和 CUDA 以矩阵形式实现简单的线性回归算法。矩阵乘法和转置适用于 cublasSgemm功能。

问题始于矩阵求逆,基于 cublas<t>getrfBatched()cublas<t>getriBatched()函数(参见 here)。

可以看出,这些函数的输入参数是指向矩阵的指针数组。想象一下,作为先前计算的结果,我已经在 GPU 上为 (A^T * A) 矩阵分配了内存:

float* dProdATA;
cudaStat = cudaMalloc((void **)&dProdATA, n*n*sizeof(*dProdATA));

是否可以进行因式分解(求逆)

cublasSgetrfBatched(handle, n, &dProdATA, lda, P, INFO, mybatch);

无需额外的 HOST <-> GPU 内存复制(参见 working example of inverting array of matrices )和分配具有单个元素的数组,但仅获取对 GPU 指针的 GPU 引用?

最佳答案

没有办法解决您传递的数组位于设备地址空间中的要求,并且您在问题中发布的内容将不起作用。你真的只有两种可能性:

  1. 在设备上分配一个指针数组并进行内存传输(您不想使用的解决方案)。
  2. 使用零拷贝或托管主机内存来存储批处理数组

在后一种使用托管内存的情况下,像这样的东西应该可以工作(完全未经测试,使用风险自负):

float ** batch;
cudaMallocManaged((&batch, sizeof(float *));
*batch = dProdATA;
cublasSgetrfBatched(handle, n, batch, lda, P, INFO, mybatch);

关于c++ - 通过引用 CUDA 指针进行 CUDA 矩阵求逆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32141133/

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