温故知新・Fortran / @n_scattering   1




            温故知新・FORTRAN
            田名部 誠一
2012/9/15   @n_scattering
博士課程の研究テーマ、

    自己紹介                                 中性子散乱が由来です。

2
    た   な べ(ぶ)   せいいち

    田名部 誠一
    [Twitter] @n_scattering
    [facebook]
    http://www.facebook.com/seiichi.tanabetanabu

        東北人と関東人のハーフ
        日本の産業界・研究開発の黒子としてHPC
        (High-Performance Computing) などの技術者
        として従事
        非研究者博士(役に立っていない)

                        温故知新・Fortran / @n_scattering   2012/9/15
Agenda
3


    1.   はじめに
    2.   Fortranとは
    3.   Fortranの歴史
    4.   現在使用できるFortran処理系
    5.   Fortran入門
    6.   大規模科学技術計算への道




               温故知新・Fortran / @n_scattering   2012/9/15
はじめに
  3/31に開催された、第
  1回闇鍋プログラミング
  勉強会に参加。(@東京
  工科大学)
  今まで親しみのなかっ
  た言語について、数多
  くのトピック提供で、刺
  激を受けた。


             温故知新・Fortran /
2012/9/15                      4
               @n_scattering
はじめに
5


    学生だった頃、原子分子物理学(化学?)をテー
    マに研究を行いました。
     ちなみに、twitter nameは、「中性子散乱」をテーマに
     していたことに由来します。
    (実験ではなく)理論的研究でしたので、もっぱら
    計算機を回していました。
    そのときに使用していた言語がFortran (フォートラ
    ン)です。


            温故知新・Fortran / @n_scattering   2012/9/15
はじめに
6


    今は、研究とかプログラミン
    グから離れて久しいですが、
    HPC業界として、計算機を取
    り扱う仕事柄、たまにFortran
    を思い出す機会があります。
    そんなわけで、今回、Fortran
    の歴史を振り返りつつ、話を
    していこうと思います。



            温故知新・Fortran / @n_scattering   2012/9/15
計算科学とは
7




    自然界や人工の系についてのモデルを詳しく研
    究して、深く理解しようとする分野。
     解析的には答えられない
     (答えが数式では表現できない)
     人間が解くには複雑すぎて                                    θ
     どうしようもない                                            L

     こういった課題をコンピュータを                                         m
     使って解決する
    更に進展し、CAEなどに応用される

          温故知新・Fortran / @n_scattering   2012/9/15
計算科学とは
8


    コンピュータは
     高機能な電卓
     複雑なシステムを数値的に
     シミュレートする実験室
     人間の知能を拡大してくれる道具
    最大の力を発揮:3役割を同時に機能するとき

    計算科学で最も使われている言語がFortran

          温故知新・Fortran / @n_scattering   2012/9/15
Fortranとは
  1954年にIBMのジョン・
  バッカスのチームによっ
  て考案されたコンピュー
  タにおける史上初の
  高水準記述言語
  「FORTRAN」 の由来は
  「数式翻訳」→「formula
  translation」



                    温故知新・Fortran /
2012/9/15                             9
                      @n_scattering
Fortranとは
10


      FORTRAN/Fortranは科学技術計算に特化した手
      続き型プログラミング言語
      長い歴史に支えられ、多くの数学関数やサブルー
      チンをライブラリで持つ
      他の言語より高速 (←最適化しやすい)
      古くから、複素数も取り扱えた
      (複素数を当たり前のように使う、
      電気関係や量子力学関係のファンが多い)


             温故知新・Fortran / @n_scattering   2012/9/15
Fortranとは
11


      広く使われていたFORTRAN77では・・・
      数式を簡便に書ける
       ほぼ数学の数式通りに計算式を記述できる。もっともこの特徴
       は他に計算向きの高級言語がなかった時代の話であり、現代
       の水準では「プログラミング言語における標準数式表現の始
       祖」といった方が当たっている。

      出力が容易
       簡単に出力形式を定義できるFORMAT文や、実際の出力デバ
       イスを意識しないで済む入出力文がある
       (C言語の標準入出力と似た概念である)。


              温故知新・Fortran / @n_scattering   2012/9/15
Fortranとは
12


      スタック指向/構造化指向の言語ではない
       COMMON文、BLOCK DATA文やSAVE文など、データ
       を固定的に割り当てることを前提としている。
      固定形式の書式である
       記述方法がカラム位置で決まっている(一部の実装
       では拡張されている)
       かつて、穿孔カードを
       用いていた由来
       古くさい

              温故知新・Fortran / @n_scattering   2012/9/15
Fortranとは
13


      Fortran 90/95・・・では
       数値計算プログラムを簡単かつ簡潔に記述できる。
       プログラムの誤りを犯しにくい言語である。
       数値計算のための便利な道具があらかじめ用意され
       ている。 (言語仕様・ライブラリ)
       作成したプログラムを大規模高速演算に使用
       無料のコンパイラが公開されている。
       gFortran, g95, Intel Fortran Composer 等



                温故知新・Fortran / @n_scattering   2012/9/15
Fortranの歴史
14


     IBMのジョン・ワーナー・バッ
     カス (John Warner Backus,
     1924年12月3日 - 2007年3月17日)のチーム

     により
     IBM 704 メインフレームのた
     めのFORTRANの設計と開発
     (1954~)
     目的はミサイルの軌道計算
     のプログラムの簡略化
                温故知新・Fortran / @n_scattering   2012/9/15
Fortranの歴史
15


     1957   IBM704用FORTRAN
     1966   American Standards Association
        (現ANSI)による規格制定
            FORTRAN66
     1978   FORTRAN77

                 世代間の断絶(やや大げさ)
     1991      Fortran90
     95, 2003, 2008・・・今に至る

                 温故知新・Fortran / @n_scattering   2012/9/15
Fortranの歴史
16


     FORTRAN77が利用されてきた期間が長かった。
     (今もこよなく愛する人もいるくらい)

     Fortran90/95で大きく仕様が変更された。
     今現在も、メジャー/マイナーな仕様変更が地味
     に行われ、現実の処理系に反映されつつある。




            温故知新・Fortran / @n_scattering   2012/9/15
Fortranの歴史
17


     FORTRAN77とFortran90との比較
      フリーフォームソース入力と小文字のFortranキー
      ワード。プログラム本文を7桁目から書かなくても良く、
      80桁の制限も無い。
      変数の長さも32文字までOK
      配列演算(配列ごとにまとめて計算できる)
      Do While文の実装

      FORTRANからFortranへ

              温故知新・Fortran / @n_scattering   2012/9/15
現在使用できるFortran処理系
18


     今も生き続けるFortranの世界
     現在利用できる処理系                                          自宅でも
                                                       Fortran焼肉
      無償                                                が楽しめる
       Gfortran、G95
       Intel Fortran Composer (非商用利用に限り)
      有償                                  Linux版に限る

       Intel Visual Fortran
       PGI Fortran
       NAG Fortran ・・・etc.


                  温故知新・Fortran / @n_scattering   2012/9/15
Fortran入門
19


      近代的な高級言語は論理構造ブロックを持って
      いる
       書いてある順(linear)に実行する(上から下)
       N回の繰り返し(do~enddo)
       If-Then-Else
       (回数未定の繰り返し) (While)
      ただし、古くさい仕様もある。GOTOなど。



              温故知新・Fortran / @n_scattering   2012/9/15
Fortran入門
20



     逐次実行の例               Program area
                   c
     半径rを持つ円       c      area of circle, input r
                          implicit none
     の面積を求め        c
                          REAL*8 pi ,r, a
                          calculate pi
     る             c
                          pi=3.1415926535d0
                          read r from standard input (terminal)
                          write(*,*) 'Input Radius'
                          read(*,*) r
                   c      calculate area
                          a = pi * r**2
                   c      write area onto terminal screen
                          write (*,10) 'radius r=',r, 'a =',a
                       10 Format (a10, e20.10, a5, e22.12)
                          Stop 'area'
                          End




            温故知新・Fortran / @n_scattering   2012/9/15
Fortran入門
21


      N回の繰り返し



            do i = i1, i2
                (処理)
            end do



            温故知新・Fortran / @n_scattering   2012/9/15
Fortran入門
22



      繰り返し実行の例
           Program diff
           Implicit None
     c Declarations
     c h stepsize for approximation, xrange and xstepsize
     c
           Real*8 f, h, result(3), x, xmin, xmax, xstep
           Open(6, File='diff.dat', Status='Unknown')
           h     = 1.e-3
           xmin = 0.0
           xmax = 7.0
           xstep = 0.01
           Do 10 x=xmin, xmax, xstep
             result(1) = (f(x+h) - f(x))/h
             result(2) = (f(x+h/2) - f(x-h/2))/h
             result(3) = (8*(f(x+h/4)-f(x-h/4)) - (f(x+h/2)-f(x-h/2)))/(3*h)
             Write (6, 20) x, result(1), result(2), result(3)
        10 Continue


                         温故知新・Fortran / @n_scattering   2012/9/15
Fortran入門
23



       関数f(x)の数値微分(3パターン実施)
     ・・・続く

        10 Format(F5.3, TR4, F10.8, TR4, F10.8, TR4, F10.8)
           Close(6)
           Stop 'data saved in diff.dat'
           End
     c
     c the function we want to integrate
           Function f(x)
             Implicit none
             Real*8 f, x
             f = cos(x)                     微分する関数の定義
             Return
           End

                          温故知新・Fortran / @n_scattering   2012/9/15
Fortran入門
24


      result(1) = (f(x+h) - f(x))/h



      result(2) = (f(x+h/2) - f(x-h/2))/h



      result(3) = (8*(f(x+h/4)-f(x-h/4)) -
      (f(x+h/2)-f(x-h/2)))/(3*h)



                温故知新・Fortran / @n_scattering   2012/9/15
Fortran入門
25


      If-Then-Else
               if (条件1) then
                   (処理1)
               elseif (条件2) then
                   (処理2)
               else
                   (処理3)
               endif

                     温故知新・Fortran / @n_scattering   2012/9/15
Fortran入門
26

                          Program fizzbuzz

     条件分岐の例
                    C
                          implicit none
                          integer i,fb
     いわゆる「Fizz-           do i=1,30
                            fb=0
     Buzz」の簡単な              if(mod(i,3).eq.0) then
                              write(*,*) 'fizz'
     例                        fb=1
                            endif
                            if(mod(i,5).eq.0) then
                              write(*,*) 'buzz'
                              fb=1
                            endif
                            if (fb.eq.0) then
                              write(*,*) i
                            endif
                          enddo

                          Stop 'fizzbuzz'
                          End

             温故知新・Fortran / @n_scattering    2012/9/15
Fortran入門
27


      回数未定の繰り返し

           do while (条件1)
               (
               (処理1)
                   1)
           end do

      Fortran90で標準で実装されたので、FORTRAN77
      では実装されていない処理系がある。


             温故知新・Fortran / @n_scattering   2012/9/15
Fortran入門
28


      よく使われる数値演算ライブラリ
       BLAS (ベクトルと行列に関する基本線型代数操作)
       LAPACK (線型計算のための数値解析ソフトウェアライブラリ)
       FFTW (高速フーリエ変換のためのライブラリ)
       AMD ACML
      市販などのライブラリ
       Intel MKL
       などなど


                   温故知新・Fortran / @n_scattering   2012/9/15
大規模科学技術計算への道
29


     最近のマシン(単体ワークステーションなど)では、
     1台の計算機に複数のコア、複数のCPUが利用可
     能な場合が増えています。
     このような環境の場合には、OpenMPを使って、複
     数のコアを有効活用して並列処理することが可能
     です。
     OpenMPは、Fortran処理系に実装されています。



            温故知新・Fortran / @n_scattering   2012/9/15
大規模科学技術計算への道
30




         温故知新・Fortran / @n_scattering   2012/9/15
大規模科学技術計算への道
31


     CPUの各コアに、ジョブを分け与えて、「分担作
     業」で全体の計算時間を短縮する。
     計算時間が1/N(コア数)となってくれるのが理想だ
     が、一人でやる作業:
      各コアに平等にジョブを分ける作業
      各コアの作業が終わって、結果をまとめる作業
     があるため、単純には1/Nとはなってくれない。
     一人でやる作業をできるだけ少なくする匠の技


           温故知新・Fortran / @n_scattering   2012/9/15
大規模科学技術計算への道
32


     PCサーバなどをネットワークなどで相互に接続し、
     PCクラスタを構築する場合もあります。
     複数の計算機を協調して動かすために、互いの
     計算機同士と通信しあう必要性があり、
     そのため、MPI (Message Passing Interface)が必要
     になります。
     MPIはMPICH2、OpenMPIなどがあり、処理系に応
     じて構築する必要があります。


               温故知新・Fortran / @n_scattering   2012/9/15
大規模科学技術計算への道
33




         温故知新・Fortran / @n_scattering   2012/9/15
大規模科学技術計算への道
34


     ネットワークに接続されている全マシンにあるCPU
     の各コアに、ジョブを分け与えて、「分担作業」で
     全体の計算時間を短縮する。
     計算時間が1/N(コア数)となってくれるのが理想だ
     が
      各コアに平等にジョブを分ける作業
      各コアの作業が終わって、結果をまとめる作業
      ノードをまたぐ際に、通信で時間が掛かる
     があるため、単純には1/Nとはなってくれない。

           温故知新・Fortran / @n_scattering   2012/9/15
まとめ
35


     1.   はじめに
     2.   Fortranとは
     3.   Fortranの歴史
     4.   現在使用できるFortran処理系
     5.   Fortran入門
     6.   大規模科学技術計算への道




                温故知新・Fortran / @n_scattering   2012/9/15
最後に (フォートランの歌)
36

     おおブレネリ あなたの言語はなに?
      私の言語はフォートランよ 数値計算が得意なのよ
        ヤーーッフォー フォートランランラン
            ヤッフォー フォートランランラン
            ヤッフォー フォートランランラン
            ヤッフォー フォートランランラン
        ヤーーッフォー フォートランランラン
            ヤッフォー フォートランランラン
            ヤッフォー フォートランランラン
            ヤッフォーフォー

                     (いろいろなところで語り継がれています。)


             温故知新・Fortran / @n_scattering   2012/9/15
参考文献
37


     Wikipedia 「FORTRAN」の項目
     小柳義夫 監訳 「計算物理学」(基礎編・応用編)
     朝倉書店(2001)
     原田賢一 著 「Fortran77 プログラミング」
     サイエンス社(1986)
     理化学研究所 「スカラー・チューニング講習会」、
     「並列プログラミング(MPI)講習会」テキスト
     http://accc.riken.jp/HPC/training/


             温故知新・Fortran / @n_scattering   2012/9/15

Yaminabe fortran

  • 1.
    温故知新・Fortran / @n_scattering 1 温故知新・FORTRAN 田名部 誠一 2012/9/15 @n_scattering
  • 2.
    博士課程の研究テーマ、 自己紹介 中性子散乱が由来です。 2 た な べ(ぶ) せいいち 田名部 誠一 [Twitter] @n_scattering [facebook] http://www.facebook.com/seiichi.tanabetanabu 東北人と関東人のハーフ 日本の産業界・研究開発の黒子としてHPC (High-Performance Computing) などの技術者 として従事 非研究者博士(役に立っていない) 温故知新・Fortran / @n_scattering 2012/9/15
  • 3.
    Agenda 3 1. はじめに 2. Fortranとは 3. Fortranの歴史 4. 現在使用できるFortran処理系 5. Fortran入門 6. 大規模科学技術計算への道 温故知新・Fortran / @n_scattering 2012/9/15
  • 4.
    はじめに 3/31に開催された、第 1回闇鍋プログラミング 勉強会に参加。(@東京 工科大学) 今まで親しみのなかっ た言語について、数多 くのトピック提供で、刺 激を受けた。 温故知新・Fortran / 2012/9/15 4 @n_scattering
  • 5.
    はじめに 5 学生だった頃、原子分子物理学(化学?)をテー マに研究を行いました。 ちなみに、twitter nameは、「中性子散乱」をテーマに していたことに由来します。 (実験ではなく)理論的研究でしたので、もっぱら 計算機を回していました。 そのときに使用していた言語がFortran (フォートラ ン)です。 温故知新・Fortran / @n_scattering 2012/9/15
  • 6.
    はじめに 6 今は、研究とかプログラミン グから離れて久しいですが、 HPC業界として、計算機を取 り扱う仕事柄、たまにFortran を思い出す機会があります。 そんなわけで、今回、Fortran の歴史を振り返りつつ、話を していこうと思います。 温故知新・Fortran / @n_scattering 2012/9/15
  • 7.
    計算科学とは 7 自然界や人工の系についてのモデルを詳しく研 究して、深く理解しようとする分野。 解析的には答えられない (答えが数式では表現できない) 人間が解くには複雑すぎて θ どうしようもない L こういった課題をコンピュータを m 使って解決する 更に進展し、CAEなどに応用される 温故知新・Fortran / @n_scattering 2012/9/15
  • 8.
    計算科学とは 8 コンピュータは 高機能な電卓 複雑なシステムを数値的に シミュレートする実験室 人間の知能を拡大してくれる道具 最大の力を発揮:3役割を同時に機能するとき 計算科学で最も使われている言語がFortran 温故知新・Fortran / @n_scattering 2012/9/15
  • 9.
    Fortranとは 1954年にIBMのジョン・ バッカスのチームによっ て考案されたコンピュー タにおける史上初の 高水準記述言語 「FORTRAN」 の由来は 「数式翻訳」→「formula translation」 温故知新・Fortran / 2012/9/15 9 @n_scattering
  • 10.
    Fortranとは 10 FORTRAN/Fortranは科学技術計算に特化した手 続き型プログラミング言語 長い歴史に支えられ、多くの数学関数やサブルー チンをライブラリで持つ 他の言語より高速 (←最適化しやすい) 古くから、複素数も取り扱えた (複素数を当たり前のように使う、 電気関係や量子力学関係のファンが多い) 温故知新・Fortran / @n_scattering 2012/9/15
  • 11.
    Fortranとは 11 広く使われていたFORTRAN77では・・・ 数式を簡便に書ける ほぼ数学の数式通りに計算式を記述できる。もっともこの特徴 は他に計算向きの高級言語がなかった時代の話であり、現代 の水準では「プログラミング言語における標準数式表現の始 祖」といった方が当たっている。 出力が容易 簡単に出力形式を定義できるFORMAT文や、実際の出力デバ イスを意識しないで済む入出力文がある (C言語の標準入出力と似た概念である)。 温故知新・Fortran / @n_scattering 2012/9/15
  • 12.
    Fortranとは 12 スタック指向/構造化指向の言語ではない COMMON文、BLOCK DATA文やSAVE文など、データ を固定的に割り当てることを前提としている。 固定形式の書式である 記述方法がカラム位置で決まっている(一部の実装 では拡張されている) かつて、穿孔カードを 用いていた由来 古くさい 温故知新・Fortran / @n_scattering 2012/9/15
  • 13.
    Fortranとは 13 Fortran 90/95・・・では 数値計算プログラムを簡単かつ簡潔に記述できる。 プログラムの誤りを犯しにくい言語である。 数値計算のための便利な道具があらかじめ用意され ている。 (言語仕様・ライブラリ) 作成したプログラムを大規模高速演算に使用 無料のコンパイラが公開されている。 gFortran, g95, Intel Fortran Composer 等 温故知新・Fortran / @n_scattering 2012/9/15
  • 14.
    Fortranの歴史 14 IBMのジョン・ワーナー・バッ カス (John Warner Backus, 1924年12月3日 - 2007年3月17日)のチーム により IBM 704 メインフレームのた めのFORTRANの設計と開発 (1954~) 目的はミサイルの軌道計算 のプログラムの簡略化 温故知新・Fortran / @n_scattering 2012/9/15
  • 15.
    Fortranの歴史 15 1957 IBM704用FORTRAN 1966 American Standards Association (現ANSI)による規格制定 FORTRAN66 1978 FORTRAN77 世代間の断絶(やや大げさ) 1991 Fortran90 95, 2003, 2008・・・今に至る 温故知新・Fortran / @n_scattering 2012/9/15
  • 16.
    Fortranの歴史 16 FORTRAN77が利用されてきた期間が長かった。 (今もこよなく愛する人もいるくらい) Fortran90/95で大きく仕様が変更された。 今現在も、メジャー/マイナーな仕様変更が地味 に行われ、現実の処理系に反映されつつある。 温故知新・Fortran / @n_scattering 2012/9/15
  • 17.
    Fortranの歴史 17 FORTRAN77とFortran90との比較 フリーフォームソース入力と小文字のFortranキー ワード。プログラム本文を7桁目から書かなくても良く、 80桁の制限も無い。 変数の長さも32文字までOK 配列演算(配列ごとにまとめて計算できる) Do While文の実装 FORTRANからFortranへ 温故知新・Fortran / @n_scattering 2012/9/15
  • 18.
    現在使用できるFortran処理系 18 今も生き続けるFortranの世界 現在利用できる処理系 自宅でも Fortran焼肉 無償 が楽しめる Gfortran、G95 Intel Fortran Composer (非商用利用に限り) 有償 Linux版に限る Intel Visual Fortran PGI Fortran NAG Fortran ・・・etc. 温故知新・Fortran / @n_scattering 2012/9/15
  • 19.
    Fortran入門 19 近代的な高級言語は論理構造ブロックを持って いる 書いてある順(linear)に実行する(上から下) N回の繰り返し(do~enddo) If-Then-Else (回数未定の繰り返し) (While) ただし、古くさい仕様もある。GOTOなど。 温故知新・Fortran / @n_scattering 2012/9/15
  • 20.
    Fortran入門 20 逐次実行の例 Program area c 半径rを持つ円 c area of circle, input r implicit none の面積を求め c REAL*8 pi ,r, a calculate pi る c pi=3.1415926535d0 read r from standard input (terminal) write(*,*) 'Input Radius' read(*,*) r c calculate area a = pi * r**2 c write area onto terminal screen write (*,10) 'radius r=',r, 'a =',a 10 Format (a10, e20.10, a5, e22.12) Stop 'area' End 温故知新・Fortran / @n_scattering 2012/9/15
  • 21.
    Fortran入門 21 N回の繰り返し do i = i1, i2 (処理) end do 温故知新・Fortran / @n_scattering 2012/9/15
  • 22.
    Fortran入門 22 繰り返し実行の例 Program diff Implicit None c Declarations c h stepsize for approximation, xrange and xstepsize c Real*8 f, h, result(3), x, xmin, xmax, xstep Open(6, File='diff.dat', Status='Unknown') h = 1.e-3 xmin = 0.0 xmax = 7.0 xstep = 0.01 Do 10 x=xmin, xmax, xstep result(1) = (f(x+h) - f(x))/h result(2) = (f(x+h/2) - f(x-h/2))/h result(3) = (8*(f(x+h/4)-f(x-h/4)) - (f(x+h/2)-f(x-h/2)))/(3*h) Write (6, 20) x, result(1), result(2), result(3) 10 Continue 温故知新・Fortran / @n_scattering 2012/9/15
  • 23.
    Fortran入門 23 関数f(x)の数値微分(3パターン実施) ・・・続く 10 Format(F5.3, TR4, F10.8, TR4, F10.8, TR4, F10.8) Close(6) Stop 'data saved in diff.dat' End c c the function we want to integrate Function f(x) Implicit none Real*8 f, x f = cos(x) 微分する関数の定義 Return End 温故知新・Fortran / @n_scattering 2012/9/15
  • 24.
    Fortran入門 24 result(1) = (f(x+h) - f(x))/h result(2) = (f(x+h/2) - f(x-h/2))/h result(3) = (8*(f(x+h/4)-f(x-h/4)) - (f(x+h/2)-f(x-h/2)))/(3*h) 温故知新・Fortran / @n_scattering 2012/9/15
  • 25.
    Fortran入門 25 If-Then-Else if (条件1) then (処理1) elseif (条件2) then (処理2) else (処理3) endif 温故知新・Fortran / @n_scattering 2012/9/15
  • 26.
    Fortran入門 26 Program fizzbuzz 条件分岐の例 C implicit none integer i,fb いわゆる「Fizz- do i=1,30 fb=0 Buzz」の簡単な if(mod(i,3).eq.0) then write(*,*) 'fizz' 例 fb=1 endif if(mod(i,5).eq.0) then write(*,*) 'buzz' fb=1 endif if (fb.eq.0) then write(*,*) i endif enddo Stop 'fizzbuzz' End 温故知新・Fortran / @n_scattering 2012/9/15
  • 27.
    Fortran入門 27 回数未定の繰り返し do while (条件1) ( (処理1) 1) end do Fortran90で標準で実装されたので、FORTRAN77 では実装されていない処理系がある。 温故知新・Fortran / @n_scattering 2012/9/15
  • 28.
    Fortran入門 28 よく使われる数値演算ライブラリ BLAS (ベクトルと行列に関する基本線型代数操作) LAPACK (線型計算のための数値解析ソフトウェアライブラリ) FFTW (高速フーリエ変換のためのライブラリ) AMD ACML 市販などのライブラリ Intel MKL などなど 温故知新・Fortran / @n_scattering 2012/9/15
  • 29.
    大規模科学技術計算への道 29 最近のマシン(単体ワークステーションなど)では、 1台の計算機に複数のコア、複数のCPUが利用可 能な場合が増えています。 このような環境の場合には、OpenMPを使って、複 数のコアを有効活用して並列処理することが可能 です。 OpenMPは、Fortran処理系に実装されています。 温故知新・Fortran / @n_scattering 2012/9/15
  • 30.
    大規模科学技術計算への道 30 温故知新・Fortran / @n_scattering 2012/9/15
  • 31.
    大規模科学技術計算への道 31 CPUの各コアに、ジョブを分け与えて、「分担作 業」で全体の計算時間を短縮する。 計算時間が1/N(コア数)となってくれるのが理想だ が、一人でやる作業: 各コアに平等にジョブを分ける作業 各コアの作業が終わって、結果をまとめる作業 があるため、単純には1/Nとはなってくれない。 一人でやる作業をできるだけ少なくする匠の技 温故知新・Fortran / @n_scattering 2012/9/15
  • 32.
    大規模科学技術計算への道 32 PCサーバなどをネットワークなどで相互に接続し、 PCクラスタを構築する場合もあります。 複数の計算機を協調して動かすために、互いの 計算機同士と通信しあう必要性があり、 そのため、MPI (Message Passing Interface)が必要 になります。 MPIはMPICH2、OpenMPIなどがあり、処理系に応 じて構築する必要があります。 温故知新・Fortran / @n_scattering 2012/9/15
  • 33.
    大規模科学技術計算への道 33 温故知新・Fortran / @n_scattering 2012/9/15
  • 34.
    大規模科学技術計算への道 34 ネットワークに接続されている全マシンにあるCPU の各コアに、ジョブを分け与えて、「分担作業」で 全体の計算時間を短縮する。 計算時間が1/N(コア数)となってくれるのが理想だ が 各コアに平等にジョブを分ける作業 各コアの作業が終わって、結果をまとめる作業 ノードをまたぐ際に、通信で時間が掛かる があるため、単純には1/Nとはなってくれない。 温故知新・Fortran / @n_scattering 2012/9/15
  • 35.
    まとめ 35 1. はじめに 2. Fortranとは 3. Fortranの歴史 4. 現在使用できるFortran処理系 5. Fortran入門 6. 大規模科学技術計算への道 温故知新・Fortran / @n_scattering 2012/9/15
  • 36.
    最後に (フォートランの歌) 36 おおブレネリ あなたの言語はなに? 私の言語はフォートランよ 数値計算が得意なのよ ヤーーッフォー フォートランランラン ヤッフォー フォートランランラン ヤッフォー フォートランランラン ヤッフォー フォートランランラン ヤーーッフォー フォートランランラン ヤッフォー フォートランランラン ヤッフォー フォートランランラン ヤッフォーフォー (いろいろなところで語り継がれています。) 温故知新・Fortran / @n_scattering 2012/9/15
  • 37.
    参考文献 37 Wikipedia 「FORTRAN」の項目 小柳義夫 監訳 「計算物理学」(基礎編・応用編) 朝倉書店(2001) 原田賢一 著 「Fortran77 プログラミング」 サイエンス社(1986) 理化学研究所 「スカラー・チューニング講習会」、 「並列プログラミング(MPI)講習会」テキスト http://accc.riken.jp/HPC/training/ 温故知新・Fortran / @n_scattering 2012/9/15