上面的程序输出结果如下所示:
初始值 : data = https://www.huyubaike.com/biancheng/1 tid = 0变化后的值 : data = 10 tid = 0初始值 : data = 1 tid = 1变化后的值 : data = 20 tid = 1规约之后的值 : data = 400
从上面的程序的输出结果来看,当我们使用*操作符的时候,我们可以看到程序当中 data 的初始值确实被初始化成了 1 ,而且最终在主函数当中的输出结果也是符合预期的,因为 400 = 2 * 10 * 20,其中 2 只在全局变量初始化的时候的值 。
逻辑与&&操作符#include <stdio.h>#include <omp.h>static int data = https://www.huyubaike.com/biancheng/100;int main() {#pragma omp parallel num_threads(2) reduction(&&:data){printf("data =https://www.huyubaike.com/t %d tid = %d/n", data, omp_get_thread_num());if(omp_get_thread_num() == 0) {data = https://www.huyubaike.com/biancheng/10;}else if(omp_get_thread_num() == 1){data = 20;}}printf("data = https://www.huyubaike.com/biancheng/%d/n", data);return 0;}
上面的程序的输出结果如下所示:
初始化值 : data = https://www.huyubaike.com/biancheng/1 tid = 0初始化值 : data = 1 tid = 1在主函数当中 : data = 1
从上面的输出结果我们可以知道,程序当中数据的初始化的值是没有问题的,你可能会疑惑为什么主函数当中的 data 值等于 1,这其实就是 C 语言当中对 && 操作服的定义,如果最终的结果为真,那么值就等于 1,即 100 && 10 && 20 == 1,你可以写一个程序去验证这一点 。
或||操作符#include <stdio.h>#include <omp.h>static int data = https://www.huyubaike.com/biancheng/100;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/0;}else if(omp_get_thread_num() == 1){data = 0;}}printf("在主函数当中 : data = https://www.huyubaike.com/biancheng/%d/n", data);return 0;}
上面的程序输出结果如下所示:
初始化值 : data = https://www.huyubaike.com/biancheng/1 tid = 0初始化值 : data = 1 tid = 1在主函数当中 : data = 1
从上面的结果看出,数据初始化的值是正确的,主函数当中得到的数据也是正确的,因为 100 || 0 || 0 == 1,这个也是 C 语言的条件或得到的结果 。
MIN 最小值#include <stdio.h>#include <omp.h>static int data = https://www.huyubaike.com/biancheng/1000;int main() {printf("Int 类型的最大值等于 %d\n", __INT32_MAX__);#pragma omp parallel num_threads(2) reduction(min:data){printf("data =https://www.huyubaike.com/t/t%d tid = %d/n", data, omp_get_thread_num());if(omp_get_thread_num() == 0) {data = https://www.huyubaike.com/biancheng/10;}else if(omp_get_thread_num() == 1){data = 20;}}printf("data = https://www.huyubaike.com/biancheng/%d/n", data);return 0;}
上面的程序执行结果如下所示:
Int 类型的最大值等于2147483647data =https://www.huyubaike.com/biancheng/2147483647 tid = 0data =2147483647 tid = 1data = 10
可以看出来初始化的值是正确的,当我们求最小值的时候,数据被正确的初始化成对应数据的最大值了,然后我们需要去比较这几个值的最小值,即 min(1000, 0, 20) == 10 ,因此在主函数当中的到的值等于 10 。
MAX 最大值#include <stdio.h>#include <omp.h>static int data = https://www.huyubaike.com/biancheng/1000;int main() {#pragma omp parallel num_threads(2) reduction(max: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/10;}else if(omp_get_thread_num() == 1){data = 20;}}printf("data = https://www.huyubaike.com/biancheng/%d/n", data);return 0;}
经验总结扩展阅读
- centos使用lftp备份文件
- 惠州社保一二三档缴费的标准是多少
- 瓷盘子可以放烤箱里面吗
- 一升柴油等于多少斤
- 桂花怎么处理后可以食用
- 冷暴力的十种表现
- 透明胶痕迹怎么去除
- 香味橡皮擦有没有毒
- 清蒸鲳鱼一般蒸几分钟
- 金铲铲之战2022.8.11更新维护内容一览