【发布时间】:2017-04-14 00:33:50
【问题描述】:
我在 C++ 中使用 OpenMP。我想指定线程数(16),然后以 0 到 15 的 id 运行每个线程。 我有一个包含 16 个数字的数组,我想在每个单独的线程中将其用作参数。所以我有
omp_set_dynamic(0);
omp_set_num_threads(16);
int tid;
#pragma omp parallel shared(myvector) private(tid)
{
tid = omp_get_thread_num();
// Do some calculations using myvector[tid]
}
但是,(tid) 不是按 0 到 15 排序的,因为有些重复两次或更多次。 如何强制它使用 16 个参数中的每一个运行一个任务?
【问题讨论】:
-
您的计算需要多长时间?你的 CPU 支持多少线程?例如,每个 OMP 线程可能会运行您的两个计算,是否会重复这些 tid。你试过(for)循环吗?
-
我在集群上运行,因此每个节点有 16 个处理器。有没有办法强制他们每个线程运行一个计算,即使他们不需要很长时间? (根据数据集,它们需要一分钟到几小时不等)
-
恐怕这个问题不清楚,不可重复且非常广泛。你必须更准确地描述你所做的、你期望的和你观察到的。提供 minimal reproducible example 并准确描述您如何编译和执行它以及在什么环境下运行它(编译器!)。您是否在多个节点上运行?什么是“计算”?
标签: c++ multithreading openmp