我打算使用 buffers std::vector<size_t> buffer(100)
,每个线程中的一个循环并行化,正如这段代码所建议的:
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 ...
}