У меня проблемы с распараллеливанием вызова функции-члена в цикле for. Я только хочу распараллелить итерацию объектов, а не итерацию векторов в вызываемой функции.
Так я называю параллельный участок, где particle_vector
- вектор объектов, а build_state_pylist()
- функция-член. state_vec
и state_pylist
являются членами объекта.
#pragma omp parallel for
for (int i=0; i < n_sims; ++i) {
particle_vector[i].build_state_pylist();
}
build_state_pylist()
перебирает значения state_vec
, который является вектором std :: vector. Содержащие значения и добавление их в state_pylist, boost :: python :: list, который является членом объекта.
void Particle::build_state_pylist() {
for (auto sim_iter = state_vec.begin(); sim_iter != state_vec.end(); ++sim_iter) {
auto sim_vec = *sim_iter;
for (auto vec_iter= sim_vec.begin(); vec_iter!= sim_vec.end(); ++vec_iter) {
this->state_pylist.append(*vec_iter);
}
}
}
Поскольку каждая итерация цикла обращается только к памяти, содержащейся в каждом объекте, я не думал, что распараллеливание этого раздела будет проблемой. Но я получаю эту ошибку:
double free or corruption (!prev)
и
(core dumped)
Цикл работает без распараллеливания. Любая помощь будет принята с благодарностью!