Я намереваюсь заполнить разреженную матрицу значениями, которые получены из серии шагов, чтобы сделать ее более эффективной, OpenMP используется для ускорения этих процессов, я считаю, что он отлично работает при использовании 1 потока, но перехватил segfault для нескольких-потом, я подготовил простой демонстрационный код для воспроизведения ошибки, искренне надеюсь, что кто-то может сделать мне одолжение.
#include <RcppArmadillo.h>
#include <omp.h>
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::depends(bigmemory, BH)]]
using namespace std;
using namespace Rcpp;
using namespace arma;
// [[Rcpp::export]]
arma::sp_mat test(arma::vec x, int n, int threads = 1){
omp_set_num_threads(threads);
arma::sp_mat m(n, n);
#pragma omp parallel for schedule(dynamic)
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
m(i, j) = x[i * n + j];
}
}
return m;
}
# run
a<-test(sample(c(0,1,2),100*100,rep=T), n=100, threads=1)
a<-test(sample(c(0,1,2),100*100,rep=T), n=100, threads=10)