fortran66のブログ

fortran について書きます。

【メモ】津波

自宅で津波に遭われた方々の動画

いずれも、足腰の悪い家族の方やペットなどと自宅に残られていて津波に遭遇しながらも、なんとか無事に助かった方々です。助かって本当に良かったです。

youtu.be

youtu.be

現実とは思えない、家が船みたいになってる夢とかでみる景色のようです。

津波はステップ関数のようになっていて普通の波とは全然違うし、線形に徐々に変化するわけでもないので、危険が確実になってからでは逃げられないのがよく分かりました。

Milan Curcic の Modern Fortran には、例題として津波モデルがあってソリトン波みたいな山が動いていくのですが、沖で巡視船の乗り越えた波に対応するのかもしれません。

youtu.be

Modern Fortran: Building efficient parallel applications

Modern Fortran: Building efficient parallel applications

  • 作者:Curcic, Milan
  • 発売日: 2020/11/24
  • メディア: ペーパーバック
光のパンジー 1

光のパンジー 1

MajiでKoiする5秒前

MajiでKoiする5秒前

  • 発売日: 2013/09/25
  • メディア: MP3 ダウンロード

【メモ帳】1972年刊本に見る当時の事情

よそ様のページリンク

1972年刊行の Fortran techniques with special reference to non-numerical applications に当時の事情などを見て、色々感想が書かれています。 

scruss.com

internet archive に上げていますが、あそこも著作権無視の無法サイトだという説もあります。 何度か寄付してしまいましたがw

Fortran Techniques with Special Reference to Non-numerical Applications

Fortran Techniques with Special Reference to Non-numerical Applications

  • 作者:A. Colin Day
  • 発売日: 1972/10/26
  • メディア: ペーパーバック

【ニュース】Fortran ブーム続くw

Tiobe 今月も 20 位

www.tiobe.com

f:id:fortran66:20210507005936p:plain

ZDnet 記事

www.zdnet.com

まず最初に目につくのは、三枚モニターに同じ画面を出しているおじさんの写真が使われている事です。この三枚同画面おじさんは有名なフォトストック写真で、以前どこかで物笑いの種にされていたのですが、Fortran 記事で再会するとはw

f:id:fortran66:20210515232325j:plain https://pbs.twimg.com/card_img/1389874903160066049/8x5MrwFJ?format=jpg&name=orig

記事内容は、ちゃんと取材したオリジナル記事です。やや悲観的に未来を見ていますw 悲しすぎて最後の方のパラフラフで exception handling が execution handling に化けています。

個人的には Fortran の再浮上は、計算機の最前線が文字列処理・データベース処理主体の WEB から、計算主体の AI にシフトしてきたことと関連していると思います。過去を振り返っても GUI が最前線だったころはオブジェクト指向がもてはやされたけれど、WEB 主体となって文字列処理に長けた軽量スクリプト言語がもてはやされたようなものです。

他言語にあるからという理由で、例外とジェネリックが喫緊の課題とされていますが、本当に必要なのか損得勘定が示されているのを見たことがありません。

かつてオブジェクト指向にあらずば人に非ず、継承と多相に非ずば OOP に非ずと世間が騒ぐので Fortran もそれらを取り入れたけれど、今や新流行で Rust やら Julia やらは継承は過剰に制約を引きずり過ぎるからと、取り入れてなかったりするし。

Fortran も元のモジュラー言語の枠組みで、抽象データ構造を表現する方向を取った方が、今の新流行に近づいていたはずw

例外は MPI の C++ で期待通りに機能せず、C のエラーコードで一本化された点を鑑みて、本当に有効なのかよく分かりません。バッチジョブで実行する場合、どうせ異常終了するなら、即死してシステム出力をダンプさせた方がいいような気もするし、モダン言語で便利とされるカジュアル例外は、単にバルク処理と界面処理とかの場合分けなどに使われていたりするので、それならば境界条件処理として実行時ではなくコンパイル時に解決できる文法構造を出す方が建設的な気がしなくもないです。

ジェネリックの方は、単なる型パラメータならコンパイラの複雑化、低速化、バグ導入に対して、損得勘定が合うのかよく分かりません。代数的データ構造として、型の型を入れるなら、引き合うかもしれませんが、数学を横滑りさせるデータ構造が浮動小数点数に適するのかよく分かりません。実数は全順序で実数の公理を見たしますが、IEEE754 は NaN が数直線上にない付加点なので全順序でもなければ実数の公理も満たさず NaN が関われば a<b, a=b, a>b のいずれも成り立たちません。それどころか a==a が偽で a/=a が真となります。

まぁ整数の二の補数表現も、2n の最小剰余と考えないと整数の公理が成り立ちませんが。

損得勘定なしに他言語にあるからと欲しがるのは、昔の PL/I クレクレ病です。

クレクレタコラ DVD-BOX

クレクレタコラ DVD-BOX

  • 発売日: 2002/12/06
  • メディア: DVD
「クレクレタコラ」ミュ-ジックファイル

「クレクレタコラ」ミュ-ジックファイル

【メモ帳】アンドレイ・スルノフ

講演動画


www.youtube.com

前半は面白くない。後半は面白い。

夜の街をスケッチするのに、iPad だと明かりが要らないので便利というのが、デジタルデバイス固有の利点という事らしくて興味深いです。

インタビュー動画


www.youtube.com


www.youtube.com

チャンネル

www.youtube.com

夕刊モスクワ記事

vm.ru

translate.google.com 英訳の方が意味が通る。

Apple Pencil (第1世代)

Apple Pencil (第1世代)

  • 発売日: 2015/10/14
  • メディア: Personal Computers

Apple Pencil(第2世代)

Apple Pencil(第2世代)

  • 発売日: 2018/11/07
  • メディア: Personal Computers

Apple Pencilチップ - 4個入り

Apple Pencilチップ - 4個入り

  • 発売日: 2016/03/23
  • メディア: Personal Computers

【メモ帳】Fortran から Swift を呼ぶ その4

swift JCL 説

swift JCL 説に則り pipeline は固定のまま、入力バッファも固定のまま、引数指定のみを繰り返して、2回平方根をとります。

import Metal

@_cdecl("mymetal")

public func mymetaln(n: Int32, px: UnsafeMutablePointer<Float32>) {
    let device = MTLCreateSystemDefaultDevice()
    let cmdQueue = device?.makeCommandQueue()
    let cmdBuff = cmdQueue?.makeCommandBuffer()
    let encoder = cmdBuff?.makeComputeCommandEncoder()
    
    // make pipeline for GPU binary
    let lib = device?.makeDefaultLibrary()
    let kernelSub: MTLFunction! = lib?.makeFunction(name: "mykernel")
    let pipeline = try! device?.makeComputePipelineState(function: kernelSub)
    encoder?.setComputePipelineState(pipeline!)

    // make memory buffers
    var nsize = Int(n)
    let nlen = MemoryLayout<Float32>.size * nsize
    let buff0 = device?.makeBuffer(bytes: px, length: nlen, options: [.storageModeShared, .cpuCacheModeWriteCombined])
    encoder?.setBuffer(buff0, offset: 0, index: 0)
    let buff1 = device?.makeBuffer(bytes: &nsize, length: MemoryLayout<Int>.size, options: .storageModeShared)
    encoder?.setBuffer(buff1, offset: 0, index: 1)
    
    // group GPU threads
    // non-uniform thread group assumed
    let w = pipeline?.threadExecutionWidth
    let perGroup = MTLSize(width: w!   , height: 1, depth: 1)
    let perGrid  = MTLSize(width: nsize, height: 1, depth: 1)
    encoder?.dispatchThreads(perGrid, threadsPerThreadgroup: perGroup)

    // second run 
    encoder?.setBuffer(buff0, offset: 0, index: 0)
    encoder?.setBuffer(buff1, offset: 0, index: 1)
    encoder?.dispatchThreads(perGrid, threadsPerThreadgroup: perGroup)

    encoder?.endEncoding()  
    // run GPU kernel
    cmdBuff?.commit()
    cmdBuff?.waitUntilCompleted()
    
    // to array
    let pbuff = buff0?.contents().bindMemory(to: Float32.self, capacity: nsize)
    for i in 0 ..< n {
        px[Int(i)] = pbuff![Int(i)]
    }

    print("GPU calculation finished")
}
module test_m
    implicit none
    interface
        subroutine metal_calc(n, x) bind(c, name = 'mymetal')
            integer, value :: n
            real, intent(in out) :: x(n)
        end subroutine metal_calc
    end interface

end module test_m



program test
    use :: test_m
    implicit none
    integer, parameter :: n = 10**2
    integer :: i
    real :: x0(n), x1(n), eps = epsilon(0.0) 
    print *, 'start'
    x0 = [(real(i), i = 0, n - 1)] 
    x1 = sqrt(sqrt(x0))
    print *, 'cpu  '
    ! calclation by C++(Metal GPU) via Swift
    call metal_calc(n, x0)
    print *, 'By GPU (Metal C++ via Swift)'
    print '(5es15.7)', x0
    print *
    print *, 'By CPU (Fortran)'
    print '(5es15.7)', x1
    print *
    print '(5es15.7)', x1 - x0
    print *, 'not eq', count(abs(x1 - x0) > eps) / real(n)
    
    print *, 'Machine epsilon =', eps
    print *, '   2 epsilin,       4 epsilon,       8 epsilon'
    print *, 2 * eps, 4 * eps, 8 * eps
end program test

変更なし

//
//  kernel.metal
//  mymetal
//
//  Created by HO on 2021/04/21.
//

//using namespace metal;


#include <metal_stdlib>

kernel void mykernel(device float* arr [[buffer(0)]],
                     constant int32_t &nsize [[buffer(1)]],
                     uint pos [[thread_position_in_grid]])
{
    if (pos < (uint)nsize) {
        arr[pos] = metal::sqrt(arr[pos]);
    }
}

実行結果

2回ルートを取って、4乗根が求まっています。

[a] M1:~/fortran/swift% swiftc mymetal.swift -emit-library
[a] M1:~/fortran/swift% gfortran mymetal.f90 libmymetal.dylib nikai 
[a] M1:~/fortran/swift% ./a.out                           

 start
 cpu  
GPU calculation finished
 By GPU (Metal C++ via Swift)
  0.0000000E+00  1.0000000E+00  1.1892071E+00  1.3160740E+00  1.4142135E+00
  1.4953488E+00  1.5650847E+00  1.6265765E+00  1.6817930E+00  1.7320508E+00
  1.7782794E+00  1.8211604E+00  1.8612098E+00  1.8988290E+00  1.9343365E+00
  1.9679897E+00  2.0000000E+00  2.0305433E+00  2.0597670E+00  2.0877976E+00
  2.1147425E+00  2.1406953E+00  2.1657367E+00  2.1899388E+00  2.2133639E+00
  2.2360680E+00  2.2581010E+00  2.2795072E+00  2.3003266E+00  2.3205957E+00
  2.3403473E+00  2.3596113E+00  2.3784142E+00  2.3967819E+00  2.4147365E+00
  2.4322994E+00  2.4494898E+00  2.4663258E+00  2.4828238E+00  2.4989996E+00
  2.5148668E+00  2.5304396E+00  2.5457299E+00  2.5607498E+00  2.5755095E+00
  2.5900202E+00  2.6042907E+00  2.6183305E+00  2.6321480E+00  2.6457515E+00
  2.6591482E+00  2.6723452E+00  2.6853495E+00  2.6981680E+00  2.7108061E+00
  2.7232699E+00  2.7355647E+00  2.7476962E+00  2.7596693E+00  2.7714880E+00
  2.7831578E+00  2.7946827E+00  2.8060663E+00  2.8173132E+00  2.8284271E+00
  2.8394117E+00  2.8502700E+00  2.8610055E+00  2.8716218E+00  2.8821216E+00
  2.8925076E+00  2.9027832E+00  2.9129505E+00  2.9230127E+00  2.9329722E+00
  2.9428308E+00  2.9525919E+00  2.9622567E+00  2.9718277E+00  2.9813075E+00
  2.9906976E+00  3.0000000E+00  3.0092168E+00  3.0183496E+00  3.0274000E+00
  3.0363703E+00  3.0452616E+00  3.0540757E+00  3.0628145E+00  3.0714786E+00
  3.0800703E+00  3.0885909E+00  3.0970411E+00  3.1054230E+00  3.1137376E+00
  3.1219859E+00  3.1301694E+00  3.1382890E+00  3.1463466E+00  3.1543422E+00

 By CPU (Fortran)
  0.0000000E+00  1.0000000E+00  1.1892071E+00  1.3160740E+00  1.4142135E+00
  1.4953488E+00  1.5650846E+00  1.6265765E+00  1.6817929E+00  1.7320508E+00
  1.7782794E+00  1.8211603E+00  1.8612098E+00  1.8988289E+00  1.9343364E+00
  1.9679897E+00  2.0000000E+00  2.0305431E+00  2.0597670E+00  2.0877976E+00
  2.1147425E+00  2.1406951E+00  2.1657367E+00  2.1899388E+00  2.2133639E+00
  2.2360680E+00  2.2581010E+00  2.2795069E+00  2.3003266E+00  2.3205957E+00
  2.3403473E+00  2.3596110E+00  2.3784142E+00  2.3967817E+00  2.4147363E+00
  2.4322994E+00  2.4494898E+00  2.4663258E+00  2.4828238E+00  2.4989994E+00
  2.5148668E+00  2.5304396E+00  2.5457299E+00  2.5607495E+00  2.5755095E+00
  2.5900199E+00  2.6042907E+00  2.6183305E+00  2.6321480E+00  2.6457512E+00
  2.6591480E+00  2.6723452E+00  2.6853497E+00  2.6981678E+00  2.7108061E+00
  2.7232697E+00  2.7355649E+00  2.7476962E+00  2.7596691E+00  2.7714880E+00
  2.7831578E+00  2.7946825E+00  2.8060663E+00  2.8173132E+00  2.8284271E+00
  2.8394115E+00  2.8502700E+00  2.8610055E+00  2.8716216E+00  2.8821213E+00
  2.8925076E+00  2.9027832E+00  2.9129505E+00  2.9230127E+00  2.9329722E+00
  2.9428310E+00  2.9525919E+00  2.9622567E+00  2.9718277E+00  2.9813075E+00
  2.9906976E+00  3.0000000E+00  3.0092168E+00  3.0183494E+00  3.0274003E+00
  3.0363703E+00  3.0452616E+00  3.0540760E+00  3.0628142E+00  3.0714786E+00
  3.0800703E+00  3.0885906E+00  3.0970411E+00  3.1054227E+00  3.1137373E+00
  3.1219857E+00  3.1301692E+00  3.1382890E+00  3.1463463E+00  3.1543422E+00

  0.0000000E+00  0.0000000E+00  0.0000000E+00  0.0000000E+00  0.0000000E+00
  0.0000000E+00 -1.1920929E-07  0.0000000E+00 -1.1920929E-07  0.0000000E+00
  0.0000000E+00 -1.1920929E-07  0.0000000E+00 -1.1920929E-07 -1.1920929E-07
  0.0000000E+00  0.0000000E+00 -2.3841858E-07  0.0000000E+00  0.0000000E+00
  0.0000000E+00 -2.3841858E-07  0.0000000E+00  0.0000000E+00  0.0000000E+00
  0.0000000E+00  0.0000000E+00 -2.3841858E-07  0.0000000E+00  0.0000000E+00
  0.0000000E+00 -2.3841858E-07  0.0000000E+00 -2.3841858E-07 -2.3841858E-07
  0.0000000E+00  0.0000000E+00  0.0000000E+00  0.0000000E+00 -2.3841858E-07
  0.0000000E+00  0.0000000E+00  0.0000000E+00 -2.3841858E-07  0.0000000E+00
 -2.3841858E-07  0.0000000E+00  0.0000000E+00  0.0000000E+00 -2.3841858E-07
 -2.3841858E-07  0.0000000E+00  2.3841858E-07 -2.3841858E-07  0.0000000E+00
 -2.3841858E-07  2.3841858E-07  0.0000000E+00 -2.3841858E-07  0.0000000E+00
  0.0000000E+00 -2.3841858E-07  0.0000000E+00  0.0000000E+00  0.0000000E+00
 -2.3841858E-07  0.0000000E+00  0.0000000E+00 -2.3841858E-07 -2.3841858E-07
  0.0000000E+00  0.0000000E+00  0.0000000E+00  0.0000000E+00  0.0000000E+00
  2.3841858E-07  0.0000000E+00  0.0000000E+00  0.0000000E+00  0.0000000E+00
  0.0000000E+00  0.0000000E+00  0.0000000E+00 -2.3841858E-07  2.3841858E-07
  0.0000000E+00  0.0000000E+00  2.3841858E-07 -2.3841858E-07  0.0000000E+00
  0.0000000E+00 -2.3841858E-07  0.0000000E+00 -2.3841858E-07 -2.3841858E-07
 -2.3841858E-07 -2.3841858E-07  0.0000000E+00 -2.3841858E-07  0.0000000E+00
 not eq  0.310000002    
 Machine epsilon =   1.19209290E-07
    2 epsilin,       4 epsilon,       8 epsilon
   2.38418579E-07   4.76837158E-07   9.53674316E-07

基礎から学ぶ Metal〜MetalによるGPUプログラミング入門

基礎から学ぶ Metal〜MetalによるGPUプログラミング入門

  • 作者:林 晃
  • 発売日: 2021/01/20
  • メディア: 単行本(ソフトカバー)

【ネタ】わたみんの論語は木村英一

ワタミ社長の論語

写真を拡大してみると、和民社長の渡邉美樹氏の愛読論語は、講談社文庫版の木村英一編注の論語のようでした。今は絶版で私は見たことないのですが、少し標準的でない解釈の論語で一部で評価が高いようです。木村英一のハードカバー「孔子論語」は家の本棚に転がっていましたが、パラパラという以上読んだことがありません。

高校時代から愛読しており、当時から持つ文庫は、ぼろぼろになった。

年齢的に見て、なんとなく本屋にあるものを選んだだけで、思慮の上で選択したものではないと思いますが、興味深いと思います。

www.zakzak.co.jp

https://www.zakzak.co.jp/images/news/210428/ecn2104280002-p1.jpg

f:id:fortran66:20210430005517j:plain

論語の読み方としてはおおよそ、内容への賛否とは別に孔子の思想をそのままに明らかにしようという訓詁的な読み方と、ロールシャッハテストのように論語を読んで己の心に浮かぶものを探す宋学的な読み方があると思います。本来固定された内容が様々に解釈される様子を見て、逆問題のようにそこから解釈者の脳内・心象を読み解くことが出来ますが、はたしてわたみんの論語や如何に!

若き心理学者キャサリンは、最先端の技術を使って研究患者の精神世界に入り込む治療を行っていた。ある時、逮捕された異常連続殺人犯カール・スターガーの脳に入り、彼が拉致した女性の監禁場所を探り出して欲しいとFBIからの依頼を受けることに。キャサリンは、危険人物の潜在意識に入る、そして前代未聞の危険な冒険に挑み始める。

ザ・セル [Blu-ray]

ザ・セル [Blu-ray]

  • 発売日: 2015/08/05
  • メディア: Blu-ray

【乞食速報】Humble Bundle に、やおいマンガ登場!

Humble Bundle

アジア人を標的とした犯罪防止に寄付されるようですが、斯様な不健全なマンガはむしろ助長しそうなw 今の所、2千セットで4万ドルばかり売り上げています。

最近は、BL 一辺倒でやおいとかジュネ系とか言わなくなりましたね。

www.humblebundle.com

O'Reilly Head First Programming 15冊組み

少し前からやっている O'Reilly Head First Programming の方は、1万セットで16万ドルばかり売り上げています。

www.humblebundle.com

やおい君の日常的でない生活

やおい君の日常的でない生活

翔んで埼玉

翔んで埼玉