0
OpenMPループ内にboost::ptr_vector
を記入することは可能ですか? ptr_vector
に「新しい」エントリを追加する方法がわかる唯一の方法は、push_back()
経由です。これはスレッドセーフではないと想定しています。OpenMPループのboost :: ptr_vectorの割り当て
以下の例(gcc compilation: g++ ptr_vector.cpp -fopenmp -DOPTION=1
)を参照してください。現在のところg++ ptr_vector.cpp -DOPTION=2
のみが動作します。
#include <boost/ptr_container/ptr_vector.hpp>
#include <iostream>
#ifdef _OPENMP
#include <omp.h>
#endif
int main() {
boost::ptr_vector<double> v;
int n = 10;
# if OPTION==1
v.resize(n);
# endif
int i;
#ifdef _OPENMP
#pragma omp barrier
#pragma omp parallel for private(i) schedule(runtime)
#endif
# if OPTION==1
for (i=0; i<n; ++i) {
double * vi = &v[i];
vi = new double(i);
}
# elif OPTION==2
for (i=0; i<n; ++i)
v.push_back(new double(i));
# endif
for (size_t i=0; i<n; ++i)
std::cout << "v[" << i << "] = " << v[i] << std::endl;
}
ありがとうございました!
http://stackoverflow.com/questions/18669296/c-openmp-parallel-for-loop-alternatives-to-stdvector/18671256#18671256 –