openmp-OpenMp并行运算结果不一致

问题描述

OpenMp并行运算结果不一致

调用opencv的boost训练,打开openmp后计算结果和串行有差异;并且两次并行的结果也会有差异,串行则完全相同。想问下并行运算下是有数据精度的截断吗?为什么两次并行结果也不一致?并行不独立吗?

时间: 2024-08-30 04:51:00

openmp-OpenMp并行运算结果不一致的相关文章

《C++ AMP:用Visual C++加速大规模并行计算》——1.2 CPU并行技术

1.2 CPU并行技术 C++ AMP:用Visual C++加速大规模并行计算 减少应用程序串行部分耗时的一种方法是尽量降低其串行性,重新设计应用程序,充分利用CPU并行和GPU并行.虽然GPU可以同时拥有成千上万个线程,而CPU要少得多,但利用CPU的并行性也能对整体加速比有所帮助.理想情况下,CPU并行技术和GPU并行技术是兼容的,方法也有很多. 1.2.1 向量化 SIMD是一种能使处理速度变得更快的重要方法,也即单指令流多数据流(Single Instruction, Multiple

C/C++中榨干硬件性能的N种并行姿势初探

1. 前言 关于并行计算介绍参见https://computing.llnl.gov/tutorials/parallel_comp/ 下面主要就部分单进程中常见的几种并行优化技术和相应的框架做一些简单的整理和分析对比,并且主要偏重于端,不涉及多节点多进程! 2. 并行计算结构分类 目前常见的是分类方法主要是Flynn提出的经典分类法:根据指令流(单指令或多指令)和数据流(单数据流或多数据流)来分类,如下图: 几种常见的并行计算框架(技术) 1). 基于SIMD的并行优化技术 a. Neon技术

《OpenACC并行编程实战》—— 1.2 并行编程语言

1.2 并行编程语言 在并行计算发展史上出现过多种并行编程语言,至今仍在使用的只剩几种, 它们各有特色. (1)Pthreads 20世纪70年代,贝尔实验室发明了UNIX,并于20世纪80年代向美国各大高校分发V7版的源码以做研究.加利福尼亚大学伯克利分校在V7的基础上开发了BSD UNIX.后来很多商业厂家意识到UNIX的价值也纷纷以贝尔实验室的System V或BSD为基础来开发自己的UNIX,较著名的有Sun OS.AIX.VMS.随着操作系统的增多,应用程序的适配性工作越来越繁重.为了

OpenMP #pragma omp parallel for并行化小探究

今天用了一下openmp,本人表示非常喜欢openmp的傻瓜化模式,导入一个头文件 直接parallel for #include <iostream> #include <omp.h> using namespace std; int main() { //cout<<"Thread num == "<<omp_get_thread_num()<<endl; #pragma omp parallel for num_thre

OpenMP 线程同步之临界区

多核/多线程编程中肯定会用到同步互斥操作.除了互斥变量以为,就是临界区. 临界区是指在用一时刻只允许一个线程执行的一段用{...},包围的代码段. 在OpenMP中临界区声明方法如下: #pragma omp critical [(name)] //[]表示名字可选 { //需要同一时刻只能有一个线程访问的代码 } 如下面的代码: #include <stdio.h> #include <omp.h> int main() { int sum = 0; #pragma omp pa

简述OpenMP中的线程任务调度

OpenMP中任务调度主要针对并行的for循环,当循环中每次迭代的计算量不相等时,如果简单地给各个线程分配相同次数的迭代,则可能会造成各个线程计算负载的不平衡,影响程序的整体性能. 如下面的代码中,如果每个线程执行的任务数量平均分配,有的线程会结束早,有的线程结束晚: #include<stdio.h> #include<omp.h> int main(){ int a[100][100] = {0}; #pragma omp parallel for for (int i =0;

OpenMP框架入门

OpenMP 框架是使用 C.C++ 和 Fortran 进行并发编程的一种强大方法.GNU Compiler Collection (GCC) V4.2 支持 OpenMP 2.5 标准,而 GCC 4.4 支持最新的 OpenMP 3 标准.包括 Microsoft? Visual Studio 在内的其他编译器也支持 OpenMP.在本文中,您可以学习使用 OpenMP 编译指示 (pragma),寻找对 OpenMP 提供的一些应用程序编程接口 (API) 的 支持,并使用一些并行算法对

OpenMP基础----以图像处理中的问题为例

    OpenMP2.5规范中,对于可以多线程执行的循环有如下5点约束: 1.循环语句中的循环变量必须是有符号整形,如果是无符号整形就无法使用,OpenMP3.0中取消了这个约束 2.循环语句中的比较操作必须是这样的样式:loop_variable <,<=,>,>=loop_invariant_interger 3.循环语句中必须是整数加,整数减,加减的数值必须是循环不变量 4.如果比较操作是<,<=,那么循环变量的值在每次迭代时候必须增加,反之亦然 5.循环必须是

pthread vs openMP之我见

前两天看了些并行计算的文章,了解了一些并行计算的方法和原理.然后发现多线程实现里面还有个openMP,这个以前从来没见过(火星了),之前只是知道pthread线程库和微软也实现了一套线程.又看了看openMP的一些教程才知道它是怎么回事. pthread全称应该是POSIX THREAD,顾名思义这个肯定是按照POSIX对线程的标准而设计的.目前我所知道的有两个版本:Linux Thread(较早)和NPTL(主流?).pthread库是一套关于线程的API,提供"遵循"(各平台实现各