0

我正在尝试使用 cmakefile 运行此 C++ 控制台应用程序项目,并且我收到此项目中编写的 cuda 优化器的此错误。

// wrap the existing CUDA CSR data in a viennacl::compressed_matrix:
    viennacl::compressed_matrix<double> vcl_A(d_L_Row, d_L_Col, d_L, viennacl::CUDA_MEMORY, ncols, ncols, nnzL);
    viennacl::vector<double> vcl_R(d_R, viennacl::CUDA_MEMORY, ncols);
    viennacl::vector<double> vcl_X(X, viennacl::CUDA_MEMORY, ncols);

对于上述部分代码显示此错误:

没有构造函数“viennacl::compressed_matrix<NumericT, AlignmentV>::compressed_matrix [with NumericT=double, AlignmentV=1U]”的实例与参数列表匹配

这到底是什么意思?如何解决?

4

1 回答 1

2

错误消息指出您的线路

viennacl::compressed_matrix<double> vcl_A(d_L_Row, d_L_Col, d_L, viennacl::CUDA_MEMORY, ncols, ncols, nnzL)

与预期的签名不匹配。在这种特殊情况下,构造函数定义为

explicit compressed_matrix(unsigned int *mem_row_buffer,
                           unsigned int *mem_col_buffer,
                           NumericT *mem_elements,       // NumericT is double as per template argument
                           viennacl::memory_types mem_type,                              
                           vcl_size_t rows,  // size_t
                           vcl_size_t cols,  // size_t 
                           vcl_size_t nonzeros) // size_t

由于整数转换为 vcl_size_t 不太可能导致此错误,因此指针类型很可能不匹配。确保d_L_Rowd_L_Col是指向unsigned int并且d_L是指向 的指针double。您的编译器可能提供了有关匹配失败原因的其他提示。

由于您使用的是 CUDA,因此还要确保在 ViennaCL 标头VIENNACL_WITH_CUDA的相应语句之前设置预处理器定义。#include

于 2020-12-16T03:41:54.903 回答