Применить simd к собственному внутреннему итератору разреженной матрицы:
for(auto i = 0; i < smat.outerSize(); i++){
#pragma omp simd
for(SMat::InnerIterator iter(smat,i); it; ++it){
it.valueRef() = value;
}
}
Это не работает из-за ошибки с инициализацией в скобках в цикле for несовместимо с simd.Затем я пытаюсь:
SMat::InnerIterator iter(smat,i);
#pragma omp simd
for(;it;++it){ // error, declaration or initialization expected
for(it;it;++it){ // error, declaration or initialization expected
Затем я гуглю и ищу документацию, только чтобы встретить фразу, в которой упоминается, что simd подразумевается при добавлении разреженных матриц (так что я знаю, что это возможно, и что где-то в шаблонных недрах).из собственного, есть цикл simd над внутренним вектором, но я не знаю, как это сделать).
Далее я проверяю и обнаруживаю, что Eigen
имеет только три вызова на omp
ввесь код.Значит ли это, что Eigen зависит от флагов компилятора для активации simd?
Наконец, я пытаюсь изменить цикл на каноническую форму (согласно комментарию ниже) и получаю другую ошибку:
for(auto it = typename SMat::InnerIterator(smat,i); it; ++it)
// error: '#pragma omp simd' used with class iteration variable 'it'
Каков ожидаемый способ запуска или итерации по внутреннему векторув Eigen::SparseMatrix<double>
с simd?