fortran66のブログ

fortran について書きます。

【ニュース】Intel Fortran 2021.4.0 出る!

oneAPI HPC

数日前に update が来ていました。apt update ですべてが済むので、もう Linux の方が windows よりアホ向きで楽ちんですね。昔は GUIインストーラを何も考えずにクリックしまくる windows の方が楽でしたが。

ifort (IFORT) 2021.4.0 20210910
Copyright (C) 1985-2021 Intel Corporation.  All rights reserved.

ifx (IFORT) 2021.4.0 Beta 20210924
Copyright (C) 1985-2021 Intel Corporation. All rights reserved.

New features

software.intel.com

ifx 文法対応状況

llvmintel fortran もじりじりと文法対応を進めているようです。Aurora 完成時には llvm 基盤上で Fortran 2018 対応で GPU に OpenMP5 offload で対応していないと駄目なはずですが、Aurora もまだまだ遅れるだろうからじりじり頑張って欲しい。

software.intel.com

【ニュース】Flang 13 など

【ララベル速報】 llvm13 出る!

www.phoronix.com

flang がようやく仲間に!

【悲報】HISA ANDO ページ消える

Ando’s Microprocessor Information

Ando's Microprocessor Information

元々 fc2 は調子悪かったのでどこかに移られるのかもしれません。

追記:その後、復旧していました。

【メモ帳】flang13 コンパイル

WSL 2.0 Ubuntu 20.04 にて。

何度指示通りにやってもうまくいかないので泣きながら試行錯誤した後 gccコンパイルできることが判明。なお openmp は個別に make & install しました。libpgmath も make& install しましたが旧 flang のみで必要で要らないかもしれないです。disk を滅茶苦茶食うので死にます。

追記:その後バイナリがアップされましたが、ネットニュースと違って flang のバイナリが同梱されておりませんでした。何故に!?

mkdir build
cd build

cmake -j 8 -DLLVM_ENABLE_PROJECTS="clang;flang" -DHAVE_CXX_ATOMICS64_WITHOUT_LIB=True   -DHAVE_CXX_ATOMICS_WITHOUT_LIB=True ../llvm

make -j 8

sudo make -j 8 install 

make -j 8 は時間差で生成がずれるので何回か繰り返したのちに、1スレッド make の必要ありかも。

実行例1 compiler_version()

program test
    use, intrinsic :: iso_fortran_env
    implicit none
    print *, compiler_version()
end
$ flang --version
flang version 13.0.0

$ cat aaaaa.f90
program test
    use, intrinsic :: iso_fortran_env
    implicit none
    print *, compiler_version()
end

$ flang aaaaa.f90

$ ./a.out
 GCC version 9.3.0

コンパイラのバージョンが GCC version 9.3.0 と出るので、ちゃんと生成されたのか不安・・・

実行例2 flang 12 では対応していなかった f2008 の pointer function

flang 13 では問題なくコンパイル&実行できました。

fortran66.hatenablog.com

fortran66.hatenablog.com

文字列を key とする連想配列を pointer function によって実現。

ソース・プログラム

    module hash_m
        implicit none
     !   private
     !   public :: ia
        
        integer, parameter :: nhash = 73
        type :: t_key
            character(len = :), allocatable :: key  
        end type t_key
        type (t_key)    :: keyc(nhash)  
        integer, target :: vals(nhash) = 0  
    contains
        pure integer function ihash(text) 
            character(len = *), intent(in) :: text
            integer :: i
            ihash = 0
            do i = 1, len_trim(text)
                ihash = mod(256 * ihash + iachar(text(i:i)), nhash)
            end do
            ihash = ihash + 1
        end function ihash  
       
        
        function ia(text) result(ires)
            character(len = *), intent(in) :: text
            integer, pointer :: ires 
            integer :: key, loc, ihop
            ihop = 1
            key = ihash(text) 
            do
                if (.not. allocated(keyc(key)%key)) then
                    keyc(key)%key = trim(text)
                    ires => vals(key)
                    exit
                else if (keyc(key)%key == trim(text)) then 
                    ires => vals(key)
                    exit
                else ! collision
                    key = mod(key + ihop, nhash) + 1   
                    ihop = ihop + 2
                    if (ihop == nhash) stop 'associative array exhausted!' 
                end if
            end do  
        end function ia      
    end module hash_m
    
    
    program Hash
        use hash_m
        implicit none
      
        ia('a') = 41
        print *, ia('a')
        ia('a') = 100
        print *, ia('a')
        ia('b') = 200
        print *, ia('a') + ia('b')
      
        ia('FORTRAN I') = 1957
        ia('FORTRAN II') = 1958
        ia('FORTRAN IV') = 1961
        ia('FORTRAN 66') = 1966
        ia('FORTRAN 77') = 1978
        ia('Fortran 90') = 1991
        ia('Fortran 95') = 1997
        ia('Fortran 2003') = 2004
        ia('Fortran 2008') = 2010
        ia('Fortran 2018') = 2018
        
        ia('Gold') = 1488
        ia('Silver') = 17
        ia('Platinum') = 946
        ia('Palladium') = 1590
        ia('Rhodium') = 4700
      
        block
          integer :: i
          do i = 1, nhash
              print '(i3,a,a20,a,i10)', i, ':', keyc(i)%key, '=>', ia(keyc(i)%key)
          end do    
       end block
    end program Hash

実行結果

$ flang hash.f90
$ ./a.out
          41
         100
         300
  1:                    =>         0
  2:             Rhodium=>      4700
  3:                    =>         0
  4:                    =>         0
  5:            Platinum=>       946
  6:                    =>         0
  7:                    =>         0
  8:                    =>         0
  9:           Palladium=>      1590
 10:                    =>         0
 11:                    =>         0
 12:                    =>         0
 13:                    =>         0
 14:                    =>         0
 15:                    =>         0
 16:                    =>         0
 17:                    =>         0
 18:                    =>         0
 19:                    =>         0
 20:                    =>         0
 21:                    =>         0
 22:                    =>         0
 23:                    =>         0
 24:                    =>         0
 25:                   a=>       100
 26:                   b=>       200
 27:        Fortran 2018=>      2018
 28:                    =>         0
 29:                    =>         0
 30:                    =>         0
 31:          FORTRAN 77=>      1978
 32:                    =>         0
 33:                    =>         0
 34:                    =>         0
 35:                    =>         0
 36:                    =>         0
 37:                    =>         0
 38:                    =>         0
 39:                    =>         0
 40:                    =>         0
 41:                    =>         0
 42:           FORTRAN I=>      1957
 43:                    =>         0
 44:          Fortran 90=>      1991
 45:                    =>         0
 46:                    =>         0
 47:          Fortran 95=>      1997
 48:              Silver=>        17
 49:                    =>         0
 50:                    =>         0
 51:                    =>         0
 52:                    =>         0
 53:                    =>         0
 54:                    =>         0
 55:                    =>         0
 56:                    =>         0
 57:                    =>         0
 58:          FORTRAN II=>      1958
 59:                    =>         0
 60:        Fortran 2003=>      2004
 61:                    =>         0
 62:                    =>         0
 63:        Fortran 2008=>      2010
 64:                    =>         0
 65:                    =>         0
 66:          FORTRAN 66=>      1966
 67:                    =>         0
 68:                    =>         0
 69:                    =>         0
 70:                    =>         0
 71:          FORTRAN IV=>      1961
 72:                    =>         0
 73:                Gold=>      1488

【メモ帳】最近のニュースなど

Intel llvmFortran 情報

刮目して年末まで待てとのこと。

www.isus.jp

LLVM ベースのインテル® Fortran コンパイラーへの対応 インテル® Fortran は、長年にわたって、広範な標準サポートと優れたパフォーマンスを提供してきました。この伝統は、ベータプログラムが完了した後、LLVM ベースのインテル® Fortran コンパイラーに引き継がれます。皆様からのフィードバックをお待ちしております。

 

LLVM ベースのベータ版インテル® Fortran コンパイラーでは、Fortran 標準を幅広くサポートしていますが、一部の機能はまだ実装されていません。リリースごとの各機能のサポート状況は、「ベータ版インテル® Fortran コンパイラーの Fortran 言語と OpenMP* 機能」を参照してください。インテル® Fortran コンパイラーのリリースノートには、インテル® Fortran コンパイラー・クラシックと LLVM ベースのベータ版インテル® Fortran コンパイラーの両方の情報が記載されています。

 

インテル® Fortran コンパイラーの LLVM 対応状況については、2021 年後半に最新情報をお届けする予定です。

イギリス スパコン

2019 スライド

"THE UK EXASCALE PROJECT"

PDF 直リン https://hpcuserforum.com/presentations/scotland/UKExascaleProject20191010.pdf

2020 スライド

"EXASCALING AI"

PDF 直リン https://www.hpcadvisorycouncil.com/events/2020/uk-conference/pdf/day-one/M_Parsons_ExascalingAI_131020.pdf

三者から見た日米対比

f:id:fortran66:20210930020907p:plain f:id:fortran66:20210930012323p:plain

アメリカの賭けた heterogeneous の場合大幅なプログラム書き換えが必要で拡張 C++ が必要だが、日本式に homogeneous の場合従来の ISO 規格内の Fortran で行けるという利点もあるのだが無視されている。 NEC のベクトルボードも従来型 Fortran で十分性能出せる。

この市場の歪みを衝くべきw

岸防衛相 自民党総裁不在者投票

www.sankei.com

29日の自民党総裁選では、国会議員382票のうち380票が1回目の投票、決選投票とも有効票となった。総裁選挙管理委員会野田毅委員長は終了後の記者会見で、白紙で投じられた1票が無効になり、1人は棄権したと明らかにした。棄権したのは、入院治療中のため棄権の意向を事前に示していた山本公一環境相とみられる。

28日に尿路感染症と診断された岸信夫防衛相は、1回目と決選投票のいずれも不在者投票した。

安倍首相の実弟の岸防衛相が不在者投票で白紙でないとすれば、岸田議員に投票したと思われるが、安倍首相の推していた高市候補でないというのは、票読みの結果なのか? 所属派閥の細田派は、岸田・高市両方おkのはずなので派閥の縛りではないような。安倍首相の今回の本命は岸田説を裏付けて見せるテクニックなのかw

【ネタ】Fortran の庭

jardin de Fortran

フランスに『Fortran の庭』なる庭園があるようです。

観光案内ページのようなものを見ても、来歴のごとき能書きが書いていなくて、Fortran の名の由来が分かりません。人名ではないかと思いますが。

www.civraisiencharlois.com

https://www.lanouvellerepublique.fr/vienne/commune/linazay/patrimoine-le-remarquable-jardin-de-fortran-a-linazay-ouvre-ses-portes-le-week-end-prochain

Le jardin de Fortran – Histoire et patrimoine de Linazay (Vienne)

www.google.com


www.youtube.com

【メモ帳】最近の話題

Fortran con 2021 スライド一覧

動画はまだの模様。

degenerateconic.com

(ネタ元:https://twitter.com/DegenerateConic/status/1441878835033747464 )

面白そうな講演

  • キーノート講演

Damian Rouson Keynote: Fortran at the Intersection

  • LFortran

Ondřej Čertík LFortran: Interactive LLVM-based Fortran Compiler for Modern Architectures

GPU 利用も可能にするために一般的な形での Fortran の標準文法の task parallel 拡張を提案している。

Jeff Hammond The Case for Asynchronous Task Parallelism in Fortran

Jeff Hammond Standard Fortran on GPUs and its utility in quantum chemistry codes

Alessandro Fanfarillo HIPFort: Present and Future Directions for Portable GPU Programming in Fortran

  • 現状展望 

Laurence Kedward The State of Fortran

f:id:fortran66:20210926201738p:plain

The Future is Bright

答えはまろやか!

BCS (British Computer Society) Fortran 会合

BCS Fortran Specialist Group Future Events

BCS Fortran / Science & Engineering Computing AGM

Thursday 30th September 2021, 1430

1430 - 1730 Fortran Specialist Group 2021 AGM

IBMLLVM

Next generation of IBM C/C++ and Fortran compilers are now available on IBM AIX
developer.ibm.com

Hisa Ando さんのニュースより

リンクが壊れていて、本文はバックナンバーでもうまく読めません。

『ArgonneのExaスケールはどうなるのか?』

4番目は遅れているArgonne国立研究所のExaスパコンはどうなるのかという話題です。どうもArgonneにはArcticusというプログラム開発用システムを設置し,Oak Ridge国立研究所にもSpockという開発用システムを置き,さらにOak Ridgeの大型スパコンPolarisを使わせてもらうというアレンジメントになるようです。

www.hpcwire.com

the HPE Apollo system would provide a bridge from Theta, Argonne’s current manycore Intel Knights Landing platform, to Aurora,

Ponte Vecchio 橋へのつなぎの Bridge で草。


www.youtube.com


www.youtube.com

【寝言】高市早苗と FORTRAN

次期首相は高市早苗で決まり!

ネット情報によりますと、自民党総裁候補の高市早苗氏は FORTRAN を学習していたとのこと。 

これで首相は決まりです!

f:id:fortran66:20210921202954p:plain


www.youtube.com

♪ 春は早苗の季節です~


www.youtube.com


www.youtube.com


www.youtube.com

【メモ帳】長月の二十日のころ

九月二十日といえば

九月二十日といえば、徒然草の長月の二十日のころとか、ほっちゃんの’誕生日とかを連想しますが、今年はネットに 1954 年 9 月 20 日 FORTRAN の誕生日説が流れていて不思議に思いました。それで、少し調べてみました。

一例:

そもそも FORTRAN コンパイラは(確か) 1956 年になってようやく完成し 1957 年に正式に出荷されているので、1954 年に最初のプログラムが動くのはおかしいような気がします。また、1954 年は FORTRAN の初期仕様を定めて発表した年であるので、何かの勘違いではないかと思えます。

1954-11-10 www.computerhistory.org

しかしながら情報の出どころを探すと computer history museum にたどり着きました。computer history museum は多くの初期 FORTRAN 資料を収集整理しているので、単なる誤りとも思えず、何らかの根拠があるのかもしれません。

www.computerhistory.org

但し同じ computer history museum に 1957 年 4 月 19 日が " First FORTRAN Program Runs" となっているページもあるので、なんとも混乱します。不思議の国のアリスの中の A very merry un-birthday を祝うきちがい帽子屋と三月ウサギとの邂逅のようです。

www.computerhistory.org

ネットを検索すると 2013 年に全く同じ疑問をもって調べた人の投稿が出てまいりました。

news.ycombinator.com

それに対するコメントに、以下のようなものがありました。

kps on Sept 21, 2013 [–]

I haven't found a reference to that date that's earlier than 4.4BSD's /usr/share/calendar, which includes 

09/20 Harlan Herrick runs first FORTRAN program, 1954 

In The History of FORTRAN I, II, III (from HOPL I and available at your CHM link), Backus writes: 

The FORTRAN compiler (or “translator” as we called it then) was begun in early 1955, although a lot of work on various schemes which would be used in it had been done in 1954; e.g. Herrick had done a lot of trial programming to test out our language [....]

So that's consistent.

これを信ずるとすれば、1954 年 9 月 20 日 は Harlan Herrick 氏による何らかの初期のプロタイプの実行を指しているのかもしれません。

FORTRAN コンパイラの完成が遅れたのは、人間の書いたアセンブリコードに負けないバイナリ出力を出す最適化に時間がかかったためらしいので、最適化抜き・配列抜きなどのプロトタイプなら、早くできていてもおかしくないかもしれません。


www.youtube.com

追記 H3.9.24

smartermsp.com