Параллельная функция OpenMP, вызывающая итерацию объекта - PullRequest
0 голосов
/ 08 ноября 2018

У меня проблемы с распараллеливанием вызова функции-члена в цикле 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)

Цикл работает без распараллеливания. Любая помощь будет принята с благодарностью!

...