openMP没有并行线程
no parallel threads with openMP
我的问题是我无法使用openMP进行并行化。
我的系统:ubuntu 11.4英特尔(R(酷睿(TM(i5 CPU M 430@2.27GHz
编译器:g++版本:4.5.2带有标志-fopenmp
有了这段代码,我发现只有一个线程:
int nthreads, tid, procs, maxt, inpar, dynamic, nested;
// Start parallel region
#pragma omp parallel private(nthreads, tid) {
// Obtain thread number
tid = omp_get_thread_num();
// Only master thread does this
if (tid == 0)
{
printf("Thread %d getting environment info...n", tid);
// Get environment information
procs = omp_get_num_procs();
nthreads = omp_get_num_threads();
maxt = omp_get_max_threads();
inpar = omp_in_parallel();
dynamic = omp_get_dynamic();
nested = omp_get_nested();
// Print environment information
printf("Number of processors = %dn", procs);
printf("Number of threads = %dn", nthreads);
printf("Max threads = %dn", maxt);
printf("In parallel? = %dn", inpar);
printf("Dynamic threads enabled? = %dn", dynamic);
printf("Nested parallelism supported? = %dn", nested);
}
}
因为我看到以下输出:
Number of processors = 4
Number of threads = 1
Max threads = 4
In parallel? = 0
Dynamic threads enabled? = 0
Nested parallelism supported? = 0
问题出在哪里?
有人能帮忙吗?
您的代码在Ubuntu 11.04上使用g++编译器4.5.2版,但我不得不更改
#pragma omp parallel private(nthreads, tid) {
至
#pragma omp parallel private(nthreads, tid)
{
以便成功编译。
编辑:如果修复语法不起作用,我的下一个想法是问你用来编译代码的确切命令是什么?
#pragma omp parallel private(nthreads, tid) {
是不正确的语法,如hrandjet 所指出的
杂注必须以新行结束,因此{应该在下一行。
#pragma omp parallel private(nthreads, tid)
{
这在Windows XP上对我有效。
输出是否以开头
Thread 0 getting environment info...
如果不是,问题如上所述-开括号({(必须在新行上。要进一步证明这一点,请尝试初始化
int tid = 1
看看输出是否仍然显示。否则,编译器将忽略#pragma(可能是因为括号问题(。
相关文章:
- 并行块(线程清理器)之外的 OpenMP 中的争用条件;误报?
- System Verilog DPI - 在 cpp 中运行并行线程,在 SV 中运行另一个并行线程
- 是否可以限制C++17并行"for_each"的线程数
- 是否可以在并行区域中为共享 2D 数组创建选定元素的线程本地副本?(共享,私有,障碍:OPenMP)
- 如何从多个线程并行安全地访问和写入复杂容器?
- 查询时间/周期是针对所有内核/线程的序列化请求还是并行请求?
- 如何在新的 C++17 并行算法中管理线程?
- 在任何地方对C++中所有并行线程中的所有锁定和解锁实例使用相同的 std::mutex 和 lock 对象
- 使用 vector<thread> 和 .join() 未并行运行的多线程C++程序
- 最大线程数 - 如何确定C++线程是否并行运行?
- C 多线程,在并行多个线程时获得SegFault
- FFmpeg:使用自定义线程池进行并行编码
- OpenMP 并行编程基于线程数与执行时间的关系
- 为什么在某些特定情况下具有多个线程(并行处理)会降低性能
- 使用C 中的线程并行计算
- Windows 线程:并行合并排序
- 使用哪个线程并行接口来使用堆栈进行任务共享和拆分
- 我如何在不同的核心上运行4个线程(并行)
- 调度大量线程,因此只有4个线程并行执行
- 从 Java 的多线程并行调用非线程安全的 DLL 函数