OpenMP编程->数据约束


/*多个线程的执行结果通过reduction中声明的操作符进行计算,以加法操作符为例:假设 sum的初始值为10,reduction(+: sum)声明的并行区域中每个线程的sum初始值为0(规定 ),并行处理结束之后,会将sum的初始化值10以及每个线程所计算的sum值相加。      */ void test8() { 	int sum = 0;     	std::cout << "Before: " << sum << std::endl;   omp_set_num_threads(3);   #pragma omp parallel for reduction(+: sum)    	for (int i = 0; i < 15; ++i)    	{   		sum = sum + i;   		cout<<"ID "<<omp_get_thread_num()<<endl; 		std::cout << sum << std::endl;   	}    	std::cout << "After: " << sum << std::endl;   } /*   reduction (operator: var1, val2, ...) 其中operator以及约定变量的初始值如下: 运算符            数据类型              默认初始值 +                 整数、浮点               0 -                 整数、浮点               0 *                 整数、浮点               1 &                 整数                     所有位均为1 |                 整数                     0 ^                 整数                     0 &&                整数                     1 ||                整数                     0  */


你可能感兴趣的:(OpenMP编程->数据约束)