fortran66のブログ

fortran について書きます。

【メモ帳】Dirac の量子論講義ビデオ

Dirac lecture - Quantum Mechanics

急におすすめに出てきました。 雑音を除去して聞きやすくなったようです。そのうち見たいですw


www.youtube.com


www.youtube.com


www.youtube.com


www.youtube.com

晩年、宇宙の直径に比例して物理常数が変わるとか言っていたような。エディントン以来の常数いじりは英国老人の伝統w

【メモ帳】Tiobe 月旦評 2024年 12月号

Fortran 10 位

ブレの範囲内で10位圏維持。

www.tiobe.com

【ニュース】AMD ROCm 6.3 で Fortran からの GPU 利用可に

AMD、ROCm 6.3を発表

tech-gadget.reinforz.co.jp

AMD Fortranコンパイラが切り開くGPUアクセラレーションの新境地   

 ROCm 6.3で提供されるAMD Fortranコンパイラは、長年活用されてきたFortranコードをGPUアクセラレーションに適応させるための画期的なツールである。従来のコード資産をそのまま利用しつつ、AMD Instinct GPUの性能を引き出す設計が特徴で、レガシーコードを抱える研究機関や産業界にとって大きなメリットとなる。  

 特筆すべきは、後方互換性の確保である。既存のFortranコードをほとんど改変することなく、最新のGPU技術を利用可能にすることで、開発者の負担を軽減しながら高性能なシステムを構築できる。このアプローチは、特にHPCを活用する科学技術分野や金融モデリングにおいて、時間とコストの削減に寄与するだろう。

  一方で、Fortranの利用者層が限られる中で、この技術が広く普及するにはさらなる啓発が求められる可能性がある。とはいえ、AMDのこうした柔軟なツール提供は、競合他社との差別化にもつながる重要な戦略と言える。

rocm.docs.amd.com

ドキュメンテーションをチラ見したところ、Windows でも使え、CPU 内蔵型 GPU でも使えるようです。

OpenMP を利用した offload による GPU 利用のようです。

米政府がスパコンにおける Nvidia の CUDA の様なベンダー依存を嫌って、なんらかの標準化を求めた結果 Intel、AMD は OpenMP の道を選び Nvidia は do concurrent の様な標準文法内の対応を選んだのではないかと邪推しております。

【メモ帳】OpenMP 6.0 出る

OpenMP 6.0 承認

Task parallel 機能の充実と、GPU を見据えた計算デバイス利用の整備をうたっているようです。

Full support for C23, including C attribute syntax, Fortran 2023 and C++23;

www.openmp.org

時々流れてくるベンチマークを見る限り、OpenMP はイマイチ性能が出てない感がありますが、デバイスが抽象化されているので長いスパンではベンダー固有のプログラミングより報われるかも知れません。まぁ AI がプログラミングの風景を激変させるだろうから、長期は意味ないのかも知れないけどw

【メモ帳】HIP Fortran 入門動画その他

AMD Hip Fortran

オーストラリアのスパコンセンターが HIP Fortan の入門講座動画を出している様です。

HIP Fortran は AMD の GPU 用の CUDA Fortran の様なものです。確か外付け GPU と Linux でないと動かなかった気がします。Nvidia の GPU が高いので代替品としてこれから伸びるかも知れません。伸びないかも知れません。

まだ見てませんが、カンガルーやコアラに混じって勉強したいです。

引用しているもの以外にも沢山ありました。


www.youtube.com

AMD AOCC Fortran

AMD の CPU 向けのコンパイラの最新版が出て Zen5 向けの最適化が加わった様です。こちらも Linux 上でしか動かないです。LLVM flang を取り込んでいるようですが、ARM の Fortran も LLVM flang ベースを目指している様なので、共に高め合って欲しいですw

www.amd.com

AMD 次世代 Fortran

flang に基づく GPU も使えるコンパイラを目指す様です。

www.phoronix.com

ChatGPT を使ったライティングの学生向けガイド

学生向けと書いてありますが、なかなか興味深い活用法が並んでいてためになります。

chatGPT との会話内容リンクをレポートの参照文献にせよというのは思いもよらなかったです。

過去の偉大な人物に成り代わってもらって対話するのは、孟子の言うところの尚友の如きでとても面白いアイデアだと思いました。

openai.com

  1. 引用に関する面倒な作業をChatGPTに委託する
  2. 新しいトピックについてすぐに理解する
  3. 関連情報源のロードマップを入手する
  4. 具体的な質問をして理解を深める
  5. 構造に関するフィードバックを得てフローを改善する
  6. 逆アウトラインでロジックをテストする
  7. ソクラテスの対話を通して自分の考えを発展させる
  8. 反論を求めて論文のプレッシャーテストを行う
  9. 自分の考えを歴史上の偉大な思想家と比較する
  10. 反復的なフィードバックを通じて文章の質を高める
  11. 高度な音声モードを読書の補助として使う
  12. 形式的にやるのではなく、スキルを磨く

透明性を保ち、会話を引用する

ChatGPTをどのように使用しているかをオープンにすることも重要です。 これを行う最も簡単な方法は、共有可能なリンクを生成することです。 それらを参考文献に含めてください⁠ AI の使用状況を監査する方法を教授に積極的に提供することで、学術的誠実さへの取り組みを示すとともに、AI を作業を回避する近道としてではなく、学習をサポートするためのツールとして使用していることを示すことができます。

【メモ帳】Tiobe 月旦評 2024年 11月号

祝 Fortran 8位 近年の最高位!

復活!(多分)今世紀最高順位!

あの日 揚った Z旗を
父が仰いだ 波の上
今日はその子が その孫が
強く雄々しい 血を継いで
八重の潮路を 越えるのだ


www.youtube.com

プログラム言語の人気ランキングは Tiobe に限らずべき分布をしていることが知られていて、また時間が経過しても順位は入れ替わりはすれどもべき分布を保つことも観察されています。特定言語が時間軸方向にどのような人気曲線を描くのか一般的には断定はできないものの、プログラム言語人気の場合べき分布的な特徴を持つ可能性が高く、Fortran のようにある時点で高い人気を保ったものは、そののち衰退期に入ってもいわゆるロングテールを引いて、半減期のような特徴的スケールもなく、ダラダラと人気を保ちコミュニティが持続すると期待されます。

その様な背景の上で、何度かの言語規格の改訂と AI ブームによる数値計算の重要性の高まりから、コミュニティの再活性化が図られこのような復活を遂げたと卑見ながら推測します。

www.tiobe.com

 

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

ifx 2025.0 少し Fortran 2023 に対応

overview

www.intel.com

Compiler Release Notes

You can specify new pure intrinsic subroutines SPLIT and TOKENIZE.

www.intel.com

Fortran 2023 機能としては、文字列から単語を切り出すためのサブルーチン SPLIT と TOKENIZE の二つが実装されたようです。

John Reid の The new features of Fortran 2023 を参考にして、以下で試してみます。

https://wg5-fortran.org/N2201-N2250/N2212.pdf

Fortran 2023 機能を試す

split

指定した区切り文字の位置を順々に返してくれます。

ソース・プログラム

    program split_test
        implicit none
        character(len = :), allocatable :: text
        integer :: ipos
        text = 'The rain in Spain stays mainly in the plain.'
        
        ! split
        
        ipos = 0
        do      
            call split(text, ' .', ipos)       
            print *, ipos
            print *, text(:ipos-1)
            if (ipos > len_trim(text)) exit
        end do
    end program split_test

実行例

           4
 The
           9
 The rain
          12
 The rain in
          18
 The rain in Spain
          24
 The rain in Spain stays
          31
 The rain in Spain stays mainly
          34
 The rain in Spain stays mainly in
          38
 The rain in Spain stays mainly in the
          44
 The rain in Spain stays mainly in the plain
          45
 The rain in Spain stays mainly in the plain.

tokenize

ソース・プログラム

tokenize は二つのサブルーチンの総称名になっていて、引数の与え方で振る舞いが異なります。

最初の tokenize の呼び出しでは、指定した区切り文字で切り出した文字列が配列に入って返されます。文字列の配列は長さが同じにならないとダメなので、空白を padding されて最長の単語文字列の長さで返されます。またオプションで各区切り文字も返してもらえます。

二番目の tokenize の呼び出しでは、指定した区切り文字で区切られた単語の最初と最後の文字の位置をそれぞれ配列に返します。文字列内の位置を返す点では split に少し近いところがありますが、区切り文字の位置を返すか token の位置を返すかの違いがあります。

なお Fortran の継続行の記号 & は、文字列の途中で改行するとき余計な空白を入れないために、末尾の&は次の行の & のところから連続するようになっています。

    program token_test
        implicit none
        character(len = :), allocatable :: text, tokens(:), separator(:)
        integer, allocatable :: first(:), last(:)
        integer :: i
        
        ! tokenize 1
         
        text = 'Old King Cole was a merry old soul,&
               &And a merry old soul was he;'
        
        call tokenize(text, ' ,;', tokens,  separator)        
        do i = 1, size(tokens)
               print *, i, ':', tokens(i), ':'
        end do            
        
        do i = 1, size(separator)
            print *, i, ':', separator(i), ':'
        end do            
        
        ! tokenize 2

        print *        
        call tokenize(text, ' ,;', first, last)
        do i = 1, size(first)            
            print *, i, first(i), last(i), ':', text(first(i):last(i)), ':'
        end do            
    end program token_test

実行結果

           1 :Old  :
           2 :King :
           3 :Cole :
           4 :was  :
           5 :a    :
           6 :merry:
           7 :old  :
           8 :soul :
           9 :And  :
          10 :a    :
          11 :merry:
          12 :old  :
          13 :soul :
          14 :was  :
          15 :he   :
          16 :     :
           1 : :
           2 : :
           3 : :
           4 : :
           5 : :
           6 : :
           7 : :
           8 :,:
           9 : :
          10 : :
          11 : :
          12 : :
          13 : :
          14 : :
          15 :;:

           1           1           3 :Old:
           2           5           8 :King:
           3          10          13 :Cole:
           4          15          17 :was:
           5          19          19 :a:
           6          21          25 :merry:
           7          27          29 :old:
           8          31          34 :soul:
           9          36          38 :And:
          10          40          40 :a:
          11          42          46 :merry:
          12          48          50 :old:
          13          52          55 :soul:
          14          57          59 :was:
          15          61          62 :he:
          16          64          63 ::