TypechoJoeTheme

MetMan's Blog

网站页面
2025-03-22

俄罗斯全球中期模式SLAV计算性能改进

俄罗斯全球中期模式SLAV计算性能改进
Fadeev et al.(2024)介绍了俄罗斯水文气象中心(Hydrometeorological Center of Russia)的全球中期预报模式SLAV(Semi-Lagrangian based on Absolute Vorticity)的计算优化工作。该模式近期升级其分辨率到10公里。相比原先20公里分辨率,计算量增长超过10倍(水平/垂直分辨率/时间步长翻倍)。10公里(SLAV10)和20公里(SLAV20)模式配置信息见下表。每个NWP业务中心对全球中期预报计算时间要求不同,比如:ECMWF要求在8分钟内完成一天的预报而俄罗斯水文气象中心要求在20分钟内完成一天预报SLAV10最初版本计算性能(不含I/O):14000核左右并行效率超过50%,但4000核计算一天预报需要超过40分钟。因此需要进行计算优化。第一个阶段优化工作包括:部分计算和MPI通信从双精度到单精度优化扩散算法改进增加时间步长参数化程序临时数组局地化和OpenMP并行循环的向量长度控制优化这些优化工作使10公里一天预报使用4000核从40分钟降到了10分钟左右,注意这里不包括I/O时间。另...
2025年03月22日
27 阅读
0 评论
2025-03-22

Fortran数组转置

Fortran数组转置
数组转置(transpose)是一个常见的操作。二维数组转置Fortran标准有一个内置函数transpose可以对Rank-2数组进行转置操作。program main implicit none integer :: a(3,4) = reshape([1,2,3,4,5,6,7,8,9,10,11,12], [3,4]) integer,allocatable :: b(:,:) b = transpose(a) print*, 'shape(b) = ', shape(b) print*, 'b = ', b end program更高维数组转置但对于高维数组,如何转置?显式循环使用显式嵌套循环进行数组转置,下面使用do concurrent结构对一个4维数组转职。dims = shape(x) allocate(res(dims(4), dims(3), dims(2), dims(1))) do concurrent(i = 1:dims(1), j = 1:dims(2), k = 1:dims(3), l = 1:dims(4)) ...
2025年03月22日
29 阅读
0 评论
2025-03-22

Fortran Associate结构学习

Fortran Associate结构学习
只要代码写得多,总能Get新知识。Fortran 2003标准中associate结构应该不常用,但associate结构用好可以简化复杂语句,增加代码的可读性。可以将associate关联名字看成是要指向的表达式或者变量的别名(引用),供后续代码使用。语法[name:] ASSOCIATE (assoc-entity[, assoc-entity]...)    block END ASSOCIATE [name]其中name是可选的,associate结构名称,如果指定,后面的end assoicate也必须加上相同的名称。assoc-entity语法为assoicate-name => selector,其中selector是一个表达式或者变量,而associate-name是关联selector的别名。block是零条或者多条Fortran语句/结构。示例:program associateTest implicit none integer :: a=1,b=1 associate( x => a*b ) ! 表达式的引用 ...
2025年03月22日
27 阅读
0 评论
2025-03-22

用不起,告辞

用不起,告辞
前阵子阅读了一篇文献“Optimizing the Weather Research and Forecasting Model with OpenMP Offload and Codee” ,文中介绍的Codee软件引起了我的兴趣。按照文献介绍,Codee属于一款代码分析优化工具,可以提供对Fortran/C/C++代码的计算优化建议,并且能自动生成OpenMP和OpenACC指令代码。使用方式也很简单,通过命令行选项即可完成一系列操作。网上找到Codee官网,网站没有直接公布软件收费价格。只能发邮件咨询软件收费情况,工作人员随后回复我具体详情,如下:起价为每年 3 万欧元,根本用不起。。。问我能不能代表所在机构,of course no。专业软件真的是贵啊,好像调试器Totalview也非常贵。还是老老实实manual programming。
2025年03月22日
19 阅读
0 评论
2025-03-22

获取netCDF库安装信息

获取netCDF库安装信息
通常我们在高性能计算机上会直接使用管理员安装好的netCDF库,但有时会发现系统中安装了多个版本的netCDF库,不知道哪个版本适合自己的应用。使用之前需要了解安装netCDF库使用的哪套编译器,netCDF库是否支持NetCDF-4/HDF-5格式,是否支持Fortran接口、是否支持并行读写功能等等信息。我们可以通过netCDF自带的命令行工具nc-config获取以上信息。首先添加netCDF bin目录到环境变量PATH或者通过module加载netCDF库。$ nc-config可以添加相应的选项查看信息,也可以使用--all选项打印所有选项信息。$ nc-config --all
2025年03月22日
18 阅读
0 评论
2025-03-22

netCDF-Fortran依赖netCDF-C版本信息统计

netCDF-Fortran依赖netCDF-C版本信息统计
自从netCDF C/Fortran接口实现分离形成两个源代码包后,由于两个代码包发布版本不再保持一致,存在版本依赖问题。netCDF-Fortran库依赖netCDF-C实现。下面根据官方发布记录,统计两者版本号依赖关系,供需要安装netCDF库的朋友参考。| 发布日期 | netCDF-Fortran | netCDF-C | | :------- | :------------- | :------- | | 20230519 | 4.6.1 | 4.9.0+ | | 20220729 | 4.6.0 | 4.9.0+ | | 20220107 | 4.5.4 | 4.7.4+ | | 20200602 | 4.5.3 | 4.7.4+ | | 20190919 | 4.5.2 | 4.6.0+ | | 20190905 | 4.5.1 | 4.6.0+ | | 20190110 |...
2025年03月22日
21 阅读
0 评论
2025-03-22

netCDF文件创建模式介绍

netCDF文件创建模式介绍
netCDF库中通过n*_create函数(nc_create/nf_create/nf90_create)实现NETCDF文件的创建。函数需要指定创建模式flag参数,理解不同参数设置含义对正确生成netCDF文件非常有必要。下面以netCDF Fortran90函数接口为例介绍。function nf90_create(path, cmode, ncid, initialsize, bufrsize, cache_size, cache_nelems, cache_preemption, comm, info) implicit none character (len = *), intent(in) :: path integer, intent(in) :: cmode integer, intent(out) :: ncid integer, optional, intent(in) :: initialsize integer, optional, intent(inout) :: bufrsize integer, optional, i...
2025年03月22日
16 阅读
0 评论
2025-03-22

闲聊几句

闲聊几句
今天不写技术文章了,闲聊几句。翻看公众号数据,没想到最近文章里阅读量最多的是关于提升工作效率的,相比其它技术文章阅读量多了一个量级。还没读过的朋友可以点击下面链接阅读。我是喜欢研究提高工作效率方法和工具的,也愿意在这个上面投入时间和金钱。每隔一段时间就会研究下日常工作流是否有优化空间,是否有新的生产力工具软件。最近发现对我来说效率特别高的工作场景,就是在会场或者高铁这些地方。虽然这些地方环境很嘈杂,但实际上没有人打扰你,反而能专心的工作输出。所以现在习惯于带着笔记本电脑去开会,如果会议内容感兴趣就听一会,不感兴趣就干自己的活。但有时候尴尬的是会场只有我一个人拿着笔记本电脑,感觉太显眼了。考虑着买一个墨水屏阅读器带着读文献,在Little Red Book调研了一圈,也不知道哪款好,有网友评论打印机是最终的答案。。。有使用过的朋友欢迎留言推荐。闲聊结束,拜拜。
2025年03月22日
14 阅读
0 评论
登录
X
用户名
密码