我的程序包含一个用于()循环处理一些原始图像数据,一行行,我想使用OpenMP这样的并行:为并行化的()循环提供线程专用预分配缓冲区?
...
#if defined(_OPENMP)
int const threads = 8;
omp_set_num_threads(threads);
omp_set_dynamic(threads);
#endif
int line = 0;
#pragma omp parallel private(line)
{
// tell the compiler to parallelize the next for() loop using static
// scheduling (i.e. balance workload evenly among threads),
// while letting each thread process exactly one line in a single run
#pragma omp for schedule(static, 1)
for(line = 0 ; line < max; ++line) {
// some processing-heavy code in need of a buffer
}
} // end of parallel section
....
问题是这样的:
是使用标准OpenMP编译指示/函数(从而不需要为每个循环分配新的缓冲区),可以向执行我的循环的团队的每个线程提供单独的(预分配的)缓冲区(指针)?
在此先感谢。
比约恩·
这里的问题是必要的缓冲区可能对堆栈太大,特别是当我们使用多个线程时。在'omp parallel private'#pragma中添加'buffer'是否也适用于指针? – Bjoern
IIRC'private'适用于/ names /(标识符)。无论如何,我怀疑你必须指定它。根据我的经验,声明_inside_并行部分的变量是每个线程的。所以是的,随便声明'std :: vector <...>缓冲区'或者新的。不要忘记删除它:) – sehe
非常感谢!我会给这个镜头,明天的第一件事=)。 – Bjoern