Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenMP并行填充犰狳稀疏矩阵_C++_Performance_Openmp_Rcpp_Armadillo - Fatal编程技术网

C++ OpenMP并行填充犰狳稀疏矩阵

C++ OpenMP并行填充犰狳稀疏矩阵,c++,performance,openmp,rcpp,armadillo,C++,Performance,Openmp,Rcpp,Armadillo,我需要将一个非常大的块双对角矩阵表示为犰狳中的稀疏矩阵。我将所有块的所有值分为两个arma::字段,以初始化sp_mat(提供非零位置并用1填充,然后并行更改它们)。这也失败了 看看犰狳的构造。我们使用的是具有内存重用的,这通常是正确的计划(“无拷贝”),但在这里可能会伤害您。尝试使用不同于R的内存,然后在末尾返回(可能是显式复制)。现在我只使用R作为高级接口,所以Armadillo中的所有事情都会发生。我现在正在尝试使用sp_mat构造函数的“form 2”,看看它是否能很好地与ompOne方

我需要将一个非常大的块双对角矩阵表示为犰狳中的稀疏矩阵。我将所有块的所有值分为两个
arma::字段,以初始化
sp_mat
(提供非零位置并用1填充,然后并行更改它们)。这也失败了

看看犰狳的构造。我们使用的是具有内存重用的,这通常是正确的计划(“无拷贝”),但在这里可能会伤害您。尝试使用不同于R的内存,然后在末尾返回(可能是显式复制)。现在我只使用R作为高级接口,所以Armadillo中的所有事情都会发生。我现在正在尝试使用
sp_mat
构造函数的“form 2”,看看它是否能很好地与ompOne方法配合使用。我也喜欢在独立的
main()
中尝试R之外的代码。如果可行的话,将其粘贴到R上,用于数据i/o和所有其他细节。哪个代码?作为更新,构造函数#2也会失败
#include <RcppArmadillo.h>
#include <omp.h>

arma::sp_mat test_ll(int blocks=10, int rowcol_per_block=250){
  arma::mat mat1 = arma::randn() * arma::ones(rowcol_per_block, rowcol_per_block);

  arma::sp_mat tester(blocks * rowcol_per_block, 
                      blocks * rowcol_per_block);

#pragma omp parallel for
  for(int i=0; i<blocks; i++){
    tester.submat( i*rowcol_per_block, i*rowcol_per_block, 
                   (i+1)*rowcol_per_block-1, (i+1)*rowcol_per_block-1) = mat1;

  }
  return tester;
}