умножения матрицы (вектор векторов) на вектор, в котором при паралельном выполнении ловлю сегфолт. Если запускаю последовательно - все ок. В чем проблема? Выход из индексов не вижу
vector<double> matrix_vec_mul(vector<vector<double>> m, vector<double> b) {
vector<double> res;
res.reserve(b.size());
#pragma omp parallel for shared(b, m, res) default(none)
for (int i = 0; i < b.size(); ++i) {
double row_res = 0;
for (int j = 0; j < b.size(); ++j) {
row_res += m.at(i).at(j) * b.at(j);
}
res.insert(res.begin() + i, row_res);
}
return res;
}
А ты точно хочешь копировать матрицы при вызове фукнции ?
это второй вопрос, его уже тоже увидел
У тебя с постановкой задачи нет тут проблем ?
Так а сегфолт же поймал - можно сразу в дебагере глянуть, что там и как...
В дебаг версии CLion запускаю - только out of bounds, а где - хрен пойми
res тут не может быть shared никак...
Ты тут будешь параллельно вставлять в res. Это недопустимо.
Так по разным индексам ж
Res, в конце Мы ж I-loop параллелим
res.insert(res.begin() + i, row_res); эту операцию нельзя делать параллельно
А res[i] = row_res; ?
#pragma omp parallel for shared(b, m, res) default(none) for (int i = 0; i < b.size(); ++i) { double row_res = 0; for (int j = 0; j < b.size(); ++j) { row_res += m.at(i).at(j) * b.at(j); } res.insert(res.begin() + i, row_res); } Вот это параллелицо
Обсуждают сегодня