Следуя примеру tbb для Parallel_reduce здесь с базовыми типами данных, я хотел попробовать реализовать версию tbb суммы строк матрицы Armadillo. (Я понимаю, что для этой цели можно использовать Arma::sum, но это была попытка лучше узнать tbb, Armadillo и то, как они работают вместе.)
Следующий код предназначен для перебора столбцов матрицы X и добавления значений столбцов к текущему итоговому вектору. Компилируется нормально, но вылетает во время выполнения. Мне интересно, где я ошибаюсь. Является ли использование X.col(j) неправильным? Спасибо!
arma::vec parallelRowsumTBB_withArma(arma::mat X){
arma::vec y=tbb::parallel_reduce(
tbb::blocked_range(0,X.n_cols),
arma::vec(X.n_rows).fill(0),
[&](const tbb::blocked_range& r, arma::vec runningTotal) { //note the definition of runningTotal here
for(int j=r.begin(); j!=r.end(); ++j){
runningTotal = runningTotal + X.col(j);
}
return runningTotal;
},
[](arma::vec a, arma::vec b){
return a + b;
}
);
return y;
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... llo-matrix