std::vector<size_t> buffer(100)
このコードで示唆されているように、ループの並列化で各スレッドに 1 つずつbuffers を使用するつもりです。
std::vector<size_t> buffer(100);
#pragma omp parallel for private(buffer)
for(size_t j = 0; j < 10000; ++j) {
// ... code using the buffer ...
}
このコードは機能しません。すべてのスレッドにバッファがありますが、それらのサイズは 0 にすることができます。
各スレッドの先頭にバッファを割り当てるにはどうすればよいですか? まだ使え#pragma omp parallel for
ますか?そして、これよりもエレガントにできますか:
std::vector<size_t> buffer;
#pragma omp parallel for private(buffer)
for(size_t j = 0; j < 10000; ++j) {
if(buffer.size() != 100) {
#pragma omp critical
buffer.resize(100);
}
// ... code using the buffer ...
}