正在获取openmp以创建多个线程
Getting openmp to create more than one thread
每次我尝试打印threadID
时,无论我将print语句放在哪里,它都会打印threadId = 0
。看起来只有一个线程正在创建,但为什么呢?我看不出我做错了什么。此外,我已经检查了和num_t = 16
。我还确保在编译时使用-fopenmp
。
omp_set_num_threads(num_t);
#pragma omp parallel shared(a,b,c) private(i,j,k) num_threads(num_t)
{
#pragma omp for schedule(static)
for (int i = 0; i < m; i++)
{
std::cout << omp_get_thread_num()<< "n";
for (int j = 0; (j < n); j++)
{
c[i + j*m] = 0.0;
for (int k = 0; k < q; k++)
{
c[i+j*m] += a[i*q + k]*b[j*q + k];
}
}
}
}
要首先进行测试,我建议您使用以下方法:
#pragma omp parallel for private(...) shared(...) schedule(...) num_threads (X)
其中"X"是要创建的线程数。理论上,前一行的效果一定与您的类似,但C++有时可能会挑剔(特别是使用"并行"子句)
顺便说一句,也许不是你的情况,但要小心使用"文本键"{}。OpenMP的功能可能会有所不同,这取决于是否将它们添加到代码块中。
相关文章:
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- C++ 线程创建/删除与线程停止/恢复
- Qt - 如何从线程创建 QFuture
- 我可以使用Qt线程ID为每个线程创建唯一的缓存吗?
- 零MQ 后台线程创建
- OpenMP 线程创建
- GLFW & ImGui:从 main 以外的线程创建 ImGui 控件
- 对象:无法为位于不同线程中的父线程创建子级
- C++ 11:线程创建给我一个"Attempt to use a deleted function"错误
- C 的周期性线程创建
- MPI - 当数组初始化值必须为常量时,如何为工作线程创建部分数组
- 当主GUI线程被阻塞时,如何从工作线程创建无模式对话框
- 多个线程创建5个线程来计算质数
- 为线程创建模板
- 线程创建,CRT和DLL是如何完成的?
- 同步线程创建和销毁(静态)对象
- 竞争条件:一个线程创建静态对象,另一个线程在初始化完成之前使用它.如何处理
- 从不同线程创建QMainWindow
- QFuture 无法为位于不同线程中的父线程创建子级
- ( QNativeSocketEngine)QObject:无法为位于不同线程中的父线程创建子级