Fortran+ OpenMP实现实例
PROGRAM parallel_01
USE omp_lib
IMPLICIT NONE
INTEGER :: i,j
INTEGER() :: time_begin, time_end, time_rate
REAL, DIMENSION(:,:) :: f, g
REAL :: k
WRITE(*,*) '开始进行串行计算'
!>@ 、通过串行计算获得两个矩阵的初始化计算
CALL system_clock(time_begin,time_rate)
DO i = ,
DO j = ,
f(i,j) = i*j
k = k +
END DO
END DO
DO i = ,
DO j = ,
g(i,j) = i*j +
k = k +
END DO
END DO
CALL system_clock(time_end,time_rate)
WRITE(*,*) 'The value of k after serial computing is: ', k
WRITE(*,*) 'The time wasted on serial computing is: ',(time_end - time_begin)/time_rate
WRITE(*,*)
WRITE(*,*)
WRITE(*,*) '开始进行第一类串行计算—SECTIONS'
!>@ 、通过块并行计算获得两个矩阵的初始化计算
k = ! 重新初始化k的值
CALL system_clock(time_begin,time_rate)
CALL omp_set_num_threads()
!$omp parallel
!$omp sections private(i,j,k)
!$omp section
DO i = ,
DO j = ,
f(i,j) = i*j
k = k +
END DO
END DO
WRITE(*,*) 'The value of k after parallel computing is: ', k,', and it comes from the thread of ',omp_get_thread_num()
!$omp section
DO i = ,
DO j = ,
g(i,j) = i*j +
k = k +
END DO
END DO
WRITE(*,*) 'The value of k after parallel computing is: ', k,', and it comes from the thread of ',omp_get_thread_num()
!$omp end sections
!$omp end parallel
CALL system_clock(time_end,time_rate)
WRITE(*,*) 'The time wasted on the first class parallel computing is: ',(time_end - time_begin)/time_rate
WRITE(*,*)
WRITE(*,*)
WRITE(*,*) '开始进行第二类并行计算—DO'
!>@ 、通过DO循环实现两个矩阵的初始化计算
k = ! 重新初始化k的值
CALL system_clock(time_begin,time_rate)
!$omp parallel private(k,j,i)
!$omp do
DO i = ,
DO j = ,
f(i,j) = i*j
k = k +
! 去掉注释后,可现实每一次循环所在的线程ID
! WRITE(*,*) 'The value of k after parallel computing is: ', k,', and it comes from the thread of ',omp_get_thread_num()
END DO
END DO
!$omp end do
!$omp end parallel
!$omp parallel private(k,j,i)
!$omp do
DO i = ,
DO j = ,
g(i,j) = i*j
k = k +
! WRITE(*,*) 'The value of k after parallel computing is: ', k,', and it comes from the thread of ',omp_get_thread_num()
END DO
END DO
!$omp end do
!$omp end parallel
CALL system_clock(time_end,time_rate)
WRITE(*,*) 'The time wasted on the first class parallel computing is: ',(time_end - time_begin)/time_rate
END PROGRAM
---------------------
本文来自 B325帅猫-量子前沿技术研究所 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/dengm155/article/details/78837408?utm_source=copy
Fortran+ OpenMP实现实例的更多相关文章
- OpenMP并行化实例----Mandelbrot集合并行化计算
在理想情况下,编译器使用自动并行化能够管理一切事务,使用OpenMP指令的一个优点是将并行性和算法分离,阅读代码时候无需考虑并行化是如何实现的.当然for循环是可以并行化处理的天然材料,满足一些约束的 ...
- OpenMP for Fortran
OpenMP for Fortran OpenMP Directive Syntax of OpenMP compiler directive for Fortran: !$OMP Directive ...
- OpenMP并行编程
什么是OpenMP?“OpenMP (Open Multi-Processing) is an application programming interface (API) that support ...
- OpenMP Programming
一.OpenMP概述 1.OpenMP应用编程接口API是在共享存储体系结构上的一个编程模型 2.包含 编译制导(compiler directive).运行库例程(runtime library). ...
- c的详细学习(8)指针学习(二)
(1)指针与二维数组 一个数组的名字代表该数组的的首地址,是地址常量(作为形式参数的数组名除外),这一规定对二维数组或更高维数组同样适用. 在c语言中定义的任何一个二维数组实际上都可以看做是一个一维数 ...
- 最近学习工作流 推荐一个activiti 的教程文档
全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...
- 在fortran下进行openmp并行计算编程
最近写水动力的程序,体系太大,必须用并行才能算的动,无奈只好找了并行编程的资料学习了.我想我没有必要在博客里开一个什么并行编程的教程之类,因为网上到处都是,我就随手记点重要的笔记吧.这里主要是open ...
- OpenMP的简单使用教程
转自:http://binglispace.com/2015/01/09/openmp-intro/ OpenMP的简单使用教程 今天有幸参加了一个XSEDE OpenMP的workshop讲座,真是 ...
- 应用OpenMP的一个简单的设计模式
小喵的唠叨话:最近很久没写博客了,一是因为之前写的LSoftmax后馈一直没有成功,所以在等作者的源码.二是最近没什么想写的东西.前两天,在预处理图片的时候,发现处理200w张图片,跑了一晚上也才处理 ...
随机推荐
- Alpha(5/10)
鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...
- .NET控件名称缩写一览表 zz
标准控件1 btn Button2 chk CheckBox3 ckl CheckedListBox4 cmb ComboBox5 dtp DateTimePicker6 lbl Label7 llb ...
- os模块、os.path模块、shutil模块、configparser模块、subprocess模块
一.os模块 os指的是操作系统 该模块主要用于处理与操作系统相关的操作,常用的是文件操作(读.写.删.复制.重命名). os.getcwd() 获取当前文件所在的文件夹路径 os.chdir() ...
- 编辑datagridview单元格
以这3种为例,最简单的是第三种,直接让单元格处于可编辑状态,当完成编辑后触发CellEndEdit事件,最后对输入的数据进行处理. private DateTimePicker dtp = new D ...
- Spring cloud Eureka错误锦集(一)
初学Spring cloud的时候,启动Eureka的时候报了下面的错误: com.sun.jersey.api.client.ClientHandlerException: java.net.Con ...
- Kotlin基础(四)Lambda编程
Lambda编程 一.Lambda表达式和成员引用 一)Lambda表达式语法 //注意与Java8中的区别 val sum={ x:Int,y:Int -> x+y } println(sum ...
- Centos ATI 显卡安装,“LCD 信号超出范围” 解决方法
centso ATI 显卡驱动安装 centos 版本 32位 6.4 Final ATI 显卡版本:Radeon HD 7400 Series 之前由于很久自己安装了centos显卡,分辨率很低不能 ...
- php回话控制 cookie
<?php class CustomCookie{ static private $_instance = null; private function __construct(array $o ...
- [HNOI2018]寻宝游戏
Description: 给出\(n\)个长为\(m\)的01串,第0个为0,同时给出\(q\)个询问串,每次向其中添加\(n\)个\(\&\)或\(|\)符号,求使这些串按顺序运算得到询问串 ...
- BZOJ2268 : Wormly
考虑头部,一定是能向前就向前,因此是最左边的腿往右$b-1$个位置. 头部移动之后,腿部就要相应地移动到区间内最靠右的$l$个$1$之上. 若头部和腿部都不能移动,检查是否到达终点即可. 用前缀和以及 ...