<< 新闻中心

国产化并行计算OpenMP开发 -java篇

2020-12-08 15:22:16 作者 书写人生
什么是OpenMP?
     OpenMP的英文全称是Open Multiprocessing,一种应用程序界面(API,即Application Program Interface),是一种单进程多线程并行的实现和方法,也可以认为是共享存储结构上的一种编程模型,可用于共享内存并行系统的多线程程序设计的一套指导性注释(Compiler Directive)。
     CPU下进行并行计算,最简单的方式就是使用OpenMP,这可以让你不必去写诸如CreateThread之类的线程管理代码,多线程程序写起来比较简洁。而且OpenMP提供了很丰富的指令,对于同步共享变量、合理分配负载等任务,都提供了有效的支持。
使用
     只要在想并行计算的地方,则可以利用OpenMP来调取相应的CPU进行并行运算。
原理
     OpenMP对应的实际上是单进程多线程的并发编程模型,可以将一个单线程的程序按for循环拆分成多线程——相当于pthread_create。除了线程级别的并行粒度,OpenMP还共享内存:对于同一个进程的多个线程来说,由于它们只是独占自己的栈内存,堆内存是共享的,因此数据交换十分地容易,直接通过共享变量就可以进行交换,编程模型非常简单易用,并且对于操作系统来说,线程的上下文切换成本也比进程低很多。然而另一方面,由于线程不能脱离进程独立存在,而一个进程不能存在于多台机器上,所以OpenMP只适用于拥有多个CPU核心的单台电脑。并且多线程编程存在临界区(Critical Section),需要你自己去加锁,解决Race Condition问题,否则的话很容易导致不可预知的后果。
特点
     OpenMP提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些pragma,或者编译器不支持OpenMp时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。
缺陷
     要确保每一个section都不依赖于其它的section,以使得它们能够并行执行。如果sections在没有同步存取资源的情况下改变了共享资源,将导致未定义结果。
  
创新技术:skycto JEEditor3D无缝展示大屏展示OCR等等。
成功案例展示:物联网AI智慧管理指挥平台数据名录匹配系统SEI频谱分析系统等等。
想了解更多国产化技术信息,欢迎致电我司技术研发,为您提供更完整的解决方案。
我们的联系方式:
公司名称:四川书写人生科技有限公司
通信地址:成都市金牛区兴盛西路2号固特大厦3幢A座405A
公司座机:028-83410634
微信电话:191-8044-7517
联系邮件:admin@skycto.com
我们承诺:邮件12小时回,微信4小时回复,欢迎致电联系。

推荐阅读

首页 分享微博 分享微信 回到顶部