使用 cusolverDnDpotrfBatched 得到不正确的结果

阿尼克·乔杜里

我想使用 cusolverDnDpotrfBatched 找到 3x3 矩阵的 Cholesky 分解,但我没有得到下三角矩阵中应该存在的零。这是我想要计算 cholesky 分解的矩阵 [1 2 3; 2 5 5; 3 5 12]。应该是这样吗?我错过了什么?我知道这篇文章使用 CUDA 进行 Cholesky 分解。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <cuda_runtime.h>
#include <cusolverDn.h>
#include <iostream>

void printMatrix(int m, int n, const double*A, int lda, const char* name)
{
for(int row = 0 ; row < m ; row++){
    for(int col = 0 ; col < n ; col++){
        double Areg = A[row + col*lda];
        printf("%s(%d,%d) = %f\n", name, row+1, col+1, Areg);
    }
}
}

int main(){
cusolverDnHandle_t handle = NULL;
cusolverDnCreate(&handle);

const cublasFillMode_t uplo = CUBLAS_FILL_MODE_LOWER;
const int batchSize = 1;
//const int nrhs = 1;
const int m = 3;
const int lda = m;
//const int ldb = m;
double A0[lda*m] = { 1.0, 2.0, 3.0, 2.0, 5.0, 5.0, 3.0, 5.0, 12.0 };
int infoArray[batchSize]; /* host copy of error info */

double L0[lda*m]; /* cholesky factor of A0 */

double *Aarray[batchSize];
//double *Barray[batchSize];

double **d_Aarray = NULL;
int *d_infoArray = NULL;
for(int j = 0 ; j < batchSize ; j++){
    cudaMalloc ((void**)&Aarray[j], sizeof(double) * lda * m);
    
}
cudaMalloc ((void**)&d_infoArray, sizeof(int)*batchSize);
//assert(cudaSuccess == cudaStat1);
cudaMalloc ((void**)&d_Aarray, sizeof(double*) * batchSize);
cudaMemcpy(Aarray[0], A0, sizeof(double) * lda * m, cudaMemcpyHostToDevice);
cudaMemcpy(d_Aarray, Aarray, sizeof(double*)*batchSize, cudaMemcpyHostToDevice);
cusolverDnDpotrfBatched( handle,uplo,m,d_Aarray,lda,d_infoArray, batchSize);
cudaDeviceSynchronize();
cudaMemcpy(infoArray, d_infoArray, sizeof(int)*batchSize, cudaMemcpyDeviceToHost);
cudaMemcpy(L0, Aarray[0], sizeof(double) * lda * m, cudaMemcpyDeviceToHost);

for(int i =0; i<9;i++)std::cout<<L0[i]<<std::endl;
//printMatrix(m, m, L0, lda, "L0");
//printf("=====\n");
}
罗伯特·克罗维拉

我没有得到下三角矩阵中应该存在的零。

也许您可能希望阅读文档

如果输入参数 uplo 是 CUBLAS_FILL_MODE_LOWER,则只处理 A 的下三角部分,并替换为下三角 Cholesky 因子 L。

备注:A 的另一部分用作工作区。例如,如果uplo是CUBLAS_FILL_MODE_UPPER,则A的上三角包含cholesky因子U,并且在potrfBatched之后A的下三角被破坏。

所以没有期望矩阵的另一部分会有零。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将IS NOT NULL与COUNT函数一起使用时得到不正确的结果-MySQL

使用 fscanf 扫描文件后结果不正确

Gremlin 在 hasId 中使用 select 返回不正确的结果

使用Boost Polygon的减法结果不正确

使用WITH的结果,关键字'IF'附近的语法不正确

使用php在简单算术中获得的不正确结果

使用ctypes时islower的结果不正确

MySQL if语句使用聚合函数返回不正确的结果

使用 YouTube API 搜索频道返回不正确的结果

Python使用difflib比较文件显示不正确的结果

使用bambi进行Poisson回归的结果不正确?

如果使用SUM在MySQL中产生不正确的结果

使用$ nearSphere时排序结果不正确

在 C 中使用定点的乘法结果不正确

使用 c++ 进行 RSA 加密(结果不正确)

Java:使用trim()后得到不正确的string.length()

使用R进行K中心聚类-得到的图是否不正确?

无法使用.not()或:不正确

如何使用JCLcompression单元解决“ Sevenzip:错误结果(00000001)功能不正确”

当对猫鼬返回的结果使用lodash时输出不正确

在 Pandas 系列中使用“in”运算符时结果不正确?

路径“ contains_points”使用贝塞尔曲线产生不正确的结果

使用 Lucene 查询语法的 Azure 搜索返回不正确的结果

Python 代码在不使用 .COPY() 函数的情况下产生不正确的结果

使用(numpy)浮点数时Sympy结果不正确

使用多个联接时,mysql sum查询返回不正确的结果

在浮点类型值上使用GREATEST()会得出不正确的结果

使用自定义列表视图适配器和不同布局的结果不正确

使用DFT的一维热方程产生不正确的结果(FFTW)