openMP中指定4个线程使用reduction指令进行0~20指令计算,并打印不同线程ID其对应的sum值
时间: 2024-09-25 19:13:16 浏览: 41
在OpenMP(Open Multi-Processing)中,你可以通过`#pragma omp parallel for reduction(+: sum)`指令结合`omp_get_thread_num()`函数来实现线程间的协同计算并同步结果。假设你想让四个线程分别计算0到20的累加和,然后各自打印出对应的线程ID和它们所维护的sum值,可以这样做:
```cpp
#include <iostream>
#include <thread>
int total = 0;
int sum[4]; // 用于保存每个线程的局部总和
// 使用 reduction 指令初始化局部变量
#pragma omp parallel num_threads(4)
{
int thread_id = omp_get_thread_num();
#pragma omp for reduction(+: sum[thread_id])
for (int i = 0; i <= 20; ++i) {
total += i;
sum[thread_id] = i;
}
// 打印当前线程的sum值
std::cout << "Thread ID: " << thread_id << ", Sum: " << sum[thread_id] << std::endl;
}
// 各线程计算完成后,全局total值即为所有线程的累加和
std::cout << "Global Sum after all threads: " << total << std::endl;
```
在这个例子中,`reduction(+: sum[thread_id])`会把每个线程的`i`值加到`sum[thread_id]`上,最终`total`变量会包含所有线程的结果。每个线程计算完毕后,它会打印出自己的线程ID和局部的`sum`值。
阅读全文