一 OpenMP 教程 深入人剖析 OpenMP reduction 子句( 四 )


^按位异或#include <stdio.h>#include <omp.h>static int data = https://www.huyubaike.com/biancheng/1;int main() {#pragma omp parallel num_threads(2) reduction(^:data){printf("data = https://www.huyubaike.com/biancheng/%d tid = %d/n", data, omp_get_thread_num());if(omp_get_thread_num() == 0) {data = https://www.huyubaike.com/biancheng/8;}else if(omp_get_thread_num() == 1){data = 12;}}printf("data = https://www.huyubaike.com/biancheng/%d/n", data);return 0;}上面的程序的输出结果如下所示:
data = https://www.huyubaike.com/biancheng/0 tid = 0data = 0 tid = 1data = 5各个数据的比特位表示:
0= 0000_0000_0000_0000_0000_0000_0000_00001= 0000_0000_0000_0000_0000_0000_0000_00018= 0000_0000_0000_0000_0000_0000_0000_100012 = 0000_0000_0000_0000_0000_0000_0000_11005= 0000_0000_0000_0000_0000_0000_0000_0101大家可以自己对照的进行异或操作,得到的结果是正确的 。
总结在本篇文章当中我们主要使用一个例子介绍了如何解决并发程序当中的竞争问题,然后也使用了 reduction 子句去解决这个问题,随后介绍了在 OpenMP 当中 reduction 各种规约符号的使用!
在本篇文章当中主要给大家介绍了 OpenMP 的基本使用和程序执行的基本原理,在后续的文章当中我们将仔细介绍各种 OpenMP 的子句和指令的使用方法 , 希望大家有所收获!
更多精彩内容合集可访问项目:https://github.com/Chang-LeHung/CSCore
关注公众号:一无是处的研究僧,了解更多计算机(Java、Python、计算机系统基础、算法与数据结构)知识 。

推荐阅读