2024-12-12 收藏一份Intel ifort软件包 收藏一份Intel ifort软件包 根据Intel编译器团队公告,最近发布的Intel oneAPI 2024.2.0中包含的ifort 2021.13.0版本将是ifort最后一个公开版本。预计2024年最后一个季度发布的oneAPI 2025.0不再包含ifort编译器。最后的ifort版本在处理器支持方面只部分支持到Sapphire Rapids。在Sapphire Rapids之后的处理器、新Fortran语言标准功能将只会在ifx中支持实现。Intel oenAPI网址: https://www.intel.com/content/www/us/en/developer/tools/oneapi/overview.html对于HPC用户,一般只需要下载安装oneAPI Base Toolkit和HPC Toolkit即可。所以现在可以到官网下载一份Intel oneAPI 2024.2.0软件包珍藏,然后拥抱ifx吧!!!参考资料https://community.intel.com/t5/Blogs/Tech-Innovation/Tools/A-Historic-Moment-for-The-Inte... 2024年12月12日 138 阅读 0 评论
2024-12-03 Fortran内置函数Transfer Fortran内置函数Transfer Transfer是Fortran一个偏底层的内置函数,其功能类似C语言中Type Casting(类型转换)。// C type casting void *ptr = NULL; itn *p = (int *)ptr;Transfer类型转换与一般的数值类型转换(比如浮点数转换为整数)不同,其转换过程中保持底层二进制位表示不变。函数语法:RESULT = TRANSFER(SOURCE, MOLD[, SIZE])其中SOURCE是要转换变量,可以是任何类型的标量或者数组。MOLD是希望转换的类型,可以是任何类型的标量或者数组,一般会设置成RESULT变量。示例:program main implicit none integer :: a real :: b character :: c a = 48 b = transfer(a,b) c = transfer(a,c) print*, 'tranfer(1) into real is ',b print*, 'tranfer(1) into character is ',c e... 2024年12月03日 86 阅读 0 评论
2024-11-19 Intel ifort进入废弃状态 Intel ifort进入废弃状态 Only constant in life is change.原先预计Intel IFORT编译器被废弃至少得两三年时间,没想到在去年年底Intel发布了Intel Fortran Compiler Classic(ifort)的废弃通知。不过你不必担心ifort立刻不能使用了。按照Intel产品发布策略,“Deprecation”只是意味着功能不再更新,也不鼓励用户继续使用,并且在未来可能会被淘汰,但产品仍然可以使用一段时间。但Intel通知ifort会在2024年末被移除,即在Intel oneAPI 2025版本中会移除ifort编译器(2024版本ifort与ifx共存)。即如果需要使用Intel oneAPI新版本,还是建议尽快迁移到ifx。官方列举了从ifort升级到ifx编译器的好处包括:更快的编译时间对最新的及未来的Intel处理器的优化能在Intel GPUs加速代码因为基于LLVM编译框架,LLVM社区工具,比如Santizers能够帮助查找修正内存/线程问题Fortran 2023和OpenMP 5.2、6.0标准正在加入持续的支持建议笔者遇到过咨询GEO... 2024年11月19日 102 阅读 0 评论
2024-11-19 Fortran Array Constructor Fortran Array Constructor Fortran数组构造器(array constructor)语法可以用来创建和赋值一维(rank-one)数组和数组常量。使用(/ /)或者[ ]包括数组构造表达式。两种用法是等价的,但[ ]方式有点像Python列表语法(我更喜欢后者用法)。数组构建器语法形式包括以下四种:(/标量表达式/)标量表达式值对应新数组每个元素。integer :: a1(5) a1 = (/1,2,3,4,5/)(/数组表达式/)数组表达式每个元素值对应新数组的元素。integer :: a2(5) a2 = (/a1(1:5)-10/)(/隐式DO循环/)类似DO循环结构,生成数组元素列表。(联想Python的列表推导式 list comprehension)integer :: a3(5) a3 = (/(j, integer :: j=6, 10)/) ! 迭代变量j可以局地声明注意gfortran 13.2测试还未支持该语法。混合形式以上三种形式可以组合使用。integer :: a4(15) a4 = [-1,-2,a1,(i+7,i=1,5),0,1,2]下面看一个不断“增长”大小的... 2024年11月19日 71 阅读 0 评论
2024-11-03 如何查阅Fortran语言标准 如何查阅Fortran语言标准 如果你对Fortran的语法细节感兴趣,希望了解标准如何定义的,可以阅读官方Fortran标准说明文档。各大编译器厂商基本上按照Fortran标准实现自家的编译器,再加上一些各自的扩展功能。由于ISO组织拥有Fortran最终标准的版权,无法免费获取正式标准的电子文档,需要花钱购买它们的纸质或电子文档。但有一个网上公开合法获取Fortran标准说明文档途径是美国Fortran编程语言标准技术委员会(J3)提供的内部工作版本。Fortran标准由"Working Group 5 of Sub-Committee 22 of the Joint Technical Committee 1 of the International Organization for Standardization and the International Electrotechnical Commission (IEC)"(ISO/IEC JTC1/SC22/WG5)负责开发,这个小组简称为WG5。官方网站:https://wg5-fortran.org而前面提到的J3是ISO/IEC JTC1/SC... 2024年11月03日 121 阅读 0 评论
2024-11-03 Fortran标准库系列:查询变量占用内存大小 Fortran标准库系列:查询变量占用内存大小 C语言提供sizeof()运算符计算数据类型对象占用内存字节数,常用于malloc分配对象空间时使用。那么Fortran语言中是否有类似函数计算对象大小?Fortran标准实际上提供了STORAGE_SIZE和C_SIZEOF内置函数可以实现该功能,此外GNU编译器提供了额外的扩展SIZEOF支持该功能。STORAGE_SIZEFortran 2008标准内置函数,函数返回参数A的存储大小,单位是bits。RESULT = STORAGE_SIZE(A [, KIND])参数A是任意类型的标量或者数组。可选参数KIND是标量整型常量表达式,用于指定返回值的整型KIND。需要注意的是,如果传入的参数A是数组,返回的是数组一个元素占有的位数,而不是整个数组存储空间大小。SIZEOFGNU扩展,不是Fortran标准内置函数。计算参数X占用的存储字节数,单位是字节(bytes)。函数假设数组连续。N = SIZEOF(X)返回值类型是INTEGER(C_SIZE_T),值是参数占用的字节数。如果参数是POINTER属性,返回指向的存储区域字节数。如果参数是包含POINTER或ALLOC... 2024年11月03日 95 阅读 0 评论
2024-09-22 Fortran Sequential二进制文件读入问题诊断 Fortran Sequential二进制文件读入问题诊断 问题现有一个二进制文件rain_clmn_202306.0000.dat及对应的GrADS CTL数据描述文件,使用GrADS绘图正常显示,但通过Fortran程序读入数据会报错。CTL数据描述文件如下所示:DSET ^rain_clmn_202306.0000.dat OPTIONS sequential big_endian UNDEF 9999.000 TITLE Result for CTRL,MWR, XDEF 45 linear 5.0000 9.0000 YDEF 8 levels 3.0000 6.0000 9.0000 12.0000 15.0000 18.0000 21.0000 24.0000 ZDEF 1 levels 0.000 TDEF 30 linear 00Z01JUN2023 1dy VARS 12 CTRL1 1 0 CTRL (TS) CTRL2 1 0 CTRL (MISSED) CTRL3... 2024年09月22日 160 阅读 0 评论
2024-08-10 Fortran标准库系列:MOD vs MODULO Fortran标准库系列:MOD vs MODULO 取余运算 vs 取模运算取余运算(remainder)在计算商时,会将商向0方向舍入。这意味着取余运算尽可能让余数的绝对值最小。取模运算(modulus)在计算商时,会将商向负无穷方向舍入。取模运算尽可能让商的值最小。当两个数都是正数时,取余运算和取模运算的结果是一样的,因为它们的商都是向0方向舍入的。然而,当两个数符号不同时,取余运算和取模运算的结果会不同。Fortran标准提供取余函数MOD和取模函数MODULO。MOD函数计算A除以P的余数。R=MOD(A,P)参数A是INTEGER或者REAL类型的标量。参数P必须与A相同类型和精度,不能为0。函数返回结果是$A-(INT(A/P)* P)$ ,返回值R符号与参数A相同,且$|R|<|P|$。MODULO计算A对P取模结果。R=MODULO(A,P)参数A是INTEGER或REAL类型的标量。参数P必须与A相同类型和精度,。返回结果类型和精度与参数相同,且返回值R符号与P相同,且$|R|<|P|$。。如果A和P是INTEGER类型,返回结果R满足$A=Q*P+R$ ,其中Q是一个整数,$R\in [0,P)$ ... 2024年08月10日 254 阅读 0 评论