Twitter APIの仕様変更のため、「いいね」の新規取得を終了いたしました

黒木玄 Gen Kuroki

@genkuroki

  • いいね数 389,756/311,170
  • フォロー 995 フォロワー 14,556 ツイート 293,980
  • 現在地 (^-^)/
  • Web https://genkuroki.github.io/documents/
  • 自己紹介 私については https://twilog.org/genkuroki と https://genkuroki.github.io と https://github.com/genkuroki と https://github.com/genkuroki/public を見て下さい。
Favolog ホーム » @genkuroki » 2021年08月08日
並び順 : 新→古 | 古→新

2021年08月08日(日)

荒木健太郎 @arakencloud

21年8月8日

気象大学校は気象学を志す学生さんには本当オススメの大学です。気大は気象庁の研修機関でもあるので入学すると職員(国家公務員)になり、学生でも給料をもらえます。4学年全体で学生数60名なので、教官と気象学をはじめとする地球科学を深く学べます。#情熱大陸 #天気の図鑑 www.mc-jma.go.jp/mcjma/ pic.twitter.com/HDmcFnRPUF

タグ: 天気の図鑑 情熱大陸

posted at 23:16:33

こもりん @rishu_toroku

21年8月8日

4×100mリレーに文句つけるひと、本当にいるんかい pic.twitter.com/QU01nElHdw

タグ:

posted at 23:04:55

積分定数 @sekibunnteisuu

21年8月8日

#超算数
 これ、ツイート見ると理解力自体はありそう。おかしな教え方(式の意味、とか)をされて、変な拘りがついてしまったのかも。 twitter.com/niehidoom/stat...

タグ: 超算数

posted at 22:28:02

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 MITでの並列化に関する講義

github.com/mitmath/18337#...
Styles of Parallelism

github.com/mitmath/18337#...
GPU Computing

タグ: Julia言語

posted at 21:27:12

小林泉美(囲碁棋士) @cho_kobayashi

21年8月8日

8月8日は、台湾の父の日✨今日にピッタリな「8」詰碁をどうぞ🎁✨
#張栩 #詰碁 #父親節快樂 pic.twitter.com/9CjAlUpk9G

タグ: 張栩 父親節快樂 詰碁

posted at 20:38:07

黒木玄 Gen Kuroki @genkuroki

21年8月8日

以上のようなことを、他人が書いたフレームワーク的なパッケージのコードの書き換えを一切要求することなく、シンプルな方法でできるようにするためには、#Julia言語 やLisp系の言語の幾つかで採用されている多重ディスパッチ=多重メソッドを言語仕様として採用することがよいことが知られています。

タグ: Julia言語

posted at 20:29:38

あ〜る菊池誠(反緊縮)公式 @kikumaco

21年8月8日

Dr.ナイフなる人物のツイートが時々RTされてきて、そのあまりの見識のなさにいつも呆れているのだけど、彼または彼女を「論座」が起用したというのは、担当編集者もまた同様に呆れるほど見識がないということでしょう。担当編集者が誰なのか知りたい。

肯定的にRTすると馬鹿だと思われるよ

タグ:

posted at 20:21:13

黒木玄 Gen Kuroki @genkuroki

21年8月8日

そして、問題を解くメソッドを

function solve(prob::Problem, alg::SomeAlg)

end

と書いて、

prob = Problem(~)
alg = SomeAlg(prob, ~)
sol = solve(prob, alg)

と実行する(たとえばREPLもしくはその拡張版などで)。

タグ:

posted at 20:19:21

黒木玄 Gen Kuroki @genkuroki

21年8月8日

例えば、あるアルゴリズムSomeAlgでは、問題probのサイズに合わせて前もって作業領域tmpを配列などで用意しておいて、その作業領域を使って計算する。この場合には

struct SomeAlg{~, T}

tmp::T
end

function SomeAlg(prob::Problem, param)
~tmp作成~
SomeAlg(~, tmp)
end

タグ:

posted at 20:15:35

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語

質点の真上への投げ上げ
github.com/genkuroki/publ...

2次元Ising模型
github.com/genkuroki/publ...

ではアルゴリズムを記述する型のオブジェクトの値が、問題に依存しなくなっていますが、依存する場合には、問題からそのアルゴリズムで使うデータを作るコンストラクタを書けばよい。

タグ: Julia言語

posted at 20:10:03

黒木玄 Gen Kuroki @genkuroki

21年8月8日

Problem-Algorithm-SolverパターンにしたがっているパッケージXには、そのパッケージXの外部のパッケージで、パッケージX内で定義されたソルバー函数に、別のアルゴリズムで問題を解くメソッドを追加できます。

この仕組みでは本質的に #Julia言語 の最大の特徴である多重ディスパッチが使われます。

タグ: Julia言語

posted at 20:04:46

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 このProblem-Algorithm-Solverパターンで設計された基本パッケージは沢山あって、例えば、

github.com/SciML/Differen...
DifferentialEquations.jl (これがすごい!)

github.com/JuliaNLSolvers...
Optim.jl

などがあります。

github.com/genkuroki/publ...

タグ: Julia言語

posted at 19:59:39

黒木玄 Gen Kuroki @genkuroki

21年8月8日

添付画像のような、問題Board、アルゴリズムSingleThread, MultiThread、問題を解く函数update!の三点セットでコードを整理する方法については

github.com/genkuroki/publ...

が詳しいです。例が中高生レベル(質点の真上への投げ上げ)。

github.com/genkuroki/publ... twitter.com/genkuroki/stat... pic.twitter.com/SnSr1vZdKt

タグ:

posted at 19:54:18

黒木玄 Gen Kuroki @genkuroki

21年8月8日

さらに、通常のコマンドラインの代わりにJuliaで使われるのは、REPLもしくはその拡張版なので、コマンドラインでの実行の単位である「main函数」を書くという発想を捨てて、REPLで実行される単位である函数を書くという発想になります。

実行したい内容を意味する名前の函数を書くだけでよい。

タグ:

posted at 19:48:46

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 Juliaでは、フィールドの型が完全には固定されていない1つのグローバル変数に問題を記述するパラメータを全部入れておいて、函数に毎回引数として渡すようにしておくと、読み易くかつ計算効率が高くなり、Julia特有の高度なcomposabilityのメリットを享受できる可能性が増えます。

タグ: Julia言語

posted at 19:44:37

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 Juliaに限らず、問題を記述するパラメータを複数のグローバル変数達に入れたり、型が固定されたグローバル定数にして、函数の中で引数を経由せずに使う慣習は、ひどい悪習だと思います。

そういう他人のコードはひどく読み難い。

しかし、非常によく見る。大学での教育が悪いのだと思う。

タグ: Julia言語

posted at 19:40:55

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 このコードはJulia界でよく見られる典型的なパターンになっています。

解くべき問題を記述するパラメータを格納する型 Board
アルゴリズムの型 SingleThread, MultiThread
問題を解く函数 update!(board::Board, niters, alg)

docs.julialang.org/en/v1/base/io-... pic.twitter.com/Uj7c0z23L8

タグ: Julia言語

posted at 19:37:15

黒木玄 Gen Kuroki @genkuroki

21年8月8日

P(i, m), Q(j, n)は周期境界条件にするための補助函数。

update!(board, niters[, alg]) は盤面 board 全体を niters 回更新する函数で、3つのメソッド(計算法)が定義されています。

* シングルスレッド
* マルチスレッド
* デフォルト pic.twitter.com/BUsXMfQ0vi

タグ:

posted at 19:33:27

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 画像によるプロットではなく、テキストによる表示のデフォルト設定を定義するには、Base. show(io::IO, x::MyType) メソッドを定義してやります。

docs.julialang.org/en/v1/base/io-...

タグ: Julia言語

posted at 19:29:19

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 using Plotsでプロット用のパッケージを読み込んで、@ recipeマクロで、イジング模型の盤面のデフォルトでのプロットの仕方を定義。

@ recipeは函数定義の式をプロットの仕方の定義を与えるコードに変換してくれるマクロです。
docs.juliaplots.org/latest/recipes/

github.com/genkuroki/publ... pic.twitter.com/XJc6faczHp

タグ: Julia言語

posted at 19:29:18

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 Isingモジュールのコード解説続き

Boardは2次元イジングの「盤面」の型で以下を期待:

* state = ±1を成分とする2次元配列
* β = 逆温度
* ±1を反転する確率達を並べたもの

randboardは初期stateがランダムな盤面のコンストラクタ。

続く

github.com/genkuroki/publ... pic.twitter.com/ZeGTZrmeDT

タグ: Julia言語

posted at 19:29:17

積分定数 @sekibunnteisuu

21年8月8日

#超算数
二重数直線への批判。
同様のことは、田の字表などにも言える。
じゃあ、どうするか?シンプルに考えればいいだけ。 twitter.com/michikusa_heya...

タグ: 超算数

posted at 18:41:42

黒木玄 Gen Kuroki @genkuroki

21年8月8日

特にPythonから来た人達は @ code_warntype の使い方を覚えた方が無難だと思います。

Juliaでは引数の型を書く必要はないが、具体的に与えられた引数の型の伝搬の仕方は非常に重要。

docs.julialang.org/en/v1/manual/p
Performance Tips

に目を通しておくと時間の無駄を防げます。

タグ:

posted at 18:25:26

OokuboTact 大久保中二病中年 @OokuboTact

21年8月8日

「和田義信著作・講演集」は絶版だけど、算数教育の専門家達への影響力がかなりある。
大学院の授業で使われているからだろうか pic.twitter.com/G7uKk53Qm2

タグ:

posted at 18:20:24

ヒトデマン☀ @wa1t_sush1

21年8月8日

川の中で麻雀をやる異常集団 pic.twitter.com/FO4tROTDpr

タグ:

posted at 18:18:38

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 Pythonでよく見る書き方がJuliaでは計算速度的によくない書き方になることが多いので要注意。頻繁に見る

function f(~)

a = []
for i in ~

push!(a, ~)
end

end

だと、aがVector{Any}型になり、aを使った計算が劇的に遅くなります。

タグ: Julia言語

posted at 18:15:23

黒木玄 Gen Kuroki @genkuroki

21年8月8日

struct Foo
A::Matrix{Float64}
x::Float64
end

ではなく、フィールドの型をJuliaに自動的に判別させる

struct Foo{S, T}
A::S
x::T
end

という書き方をしておけば、Matrix{Float64}, Float64以外のフィールドの型でFoo型を予想できなかった形で使用可能になる余地が残ります。

タグ:

posted at 18:07:25

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 structの定義を書くときに、計算速度が重要ならば、

struct Foo
A::Matrix{Float64}
x::Float64
end

のように具象型(typeofで表示される型)を書く必要があります。面倒な人は

struct Foo{S, T}
A::S
x::T
end

と書くとよいです。具象型を覚える必要がなくなる。

タグ: Julia言語

posted at 18:04:57

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 面倒で失敗する確率が高いので函数の引数の型を書かない場合でも書いた場合でも、@ code_warntype で具体的な引数の型がどのように伝搬するようなコードを自分が書いたかを確認した方がよいことが多いです。

「引数の型がどのように伝搬するか」が超大事。

docs.julialang.org/en/v1/manual/p...

タグ: Julia言語

posted at 18:00:49

天むす名古屋 Temmus @temmusu_n

21年8月8日

これ、12a÷(-6a²b)×2bと負符号の割り算があるおかげでカッコがあるのが幸いしている。もし6a²bで割るとかだったらきっとカッコがなくて、併置積は計算の結果であり一つの数とみなすが炸裂しているはず。#超算数 twitter.com/LimgTW/status/...

タグ: 超算数

posted at 17:59:47

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 Juliaの基本仕様である多重ディスパッチを使う場合には、その定義から、函数(より正確にはメソッド)の定義で引数の型を適切に書くことが必須になります。(これは当たり前)

タグ: Julia言語

posted at 17:55:22

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 のdiscourse discourse.julialang.org でも、引数の型をどうしても書きたい人やさらに戻り値の型までどうしても書きたい人が現れて、「それ、やめた方がいいよ」とみんなに言われているシーンを定期的に見ます。

多分「静的型付けで安全!」などとどこかで過学習してしまっている。

タグ: Julia言語

posted at 17:51:58

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 のジェネリック函数が予想外の場合にも使えることはよくあるのですが、自分が使用する範囲内に引数の型を制限していると、Juliaにそのような恩恵があることに永久に気付かずに終わってしまいます。

函数の戻り値の型は普通書きません。

github.com/JuliaLang/juli... pic.twitter.com/QFQxm3G6uU

タグ: Julia言語

posted at 17:48:51

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 開発版のドキュメントにも添付画像のように、引数の型を過剰に制限することがよくある間違いであることと、疑わしい場合には引数の型を書かない方が良いことが太字で強調されています。

github.com/JuliaLang/juli... pic.twitter.com/OBSTAQd3b7

タグ: Julia言語

posted at 17:45:27

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 Juliaの型の世界は複雑です。配列の型がVector, Matrix, Array以外にも無数にある。

函数の引数に適切な型を書こうとすると、多くの場合に、大して益がない形でコードが複雑になります。

函数の引数の型を頑張って書いても計算速度は変わらないし、安全にもならない。

タグ: Julia言語

posted at 17:40:12

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 eltype(A)とtypeof(x)が違っていてもよいなら、

function f(A::AbstractMatrix{<:Real}, x::Real}

end

と書けます。1つ前のツイートのダメな例と似ているが、これは⭕️。

タグ: Julia言語

posted at 17:34:14

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 AbstractMatrix, Realのような抽象型とか、パラメータTとか、where T<:Real のような書き方に精通できていない場合には、函数の引数の型を頑張って書くと、ひどいことになり易いです。

❌ function f(A::AbstractMatrix{Real}, x::Real} ~ end

の類はアウトです。

タグ: Julia言語

posted at 17:34:13

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 行列Aとスカラーxを引数とする函数の定義の仕方の第一候補は引数の型を何も書かないことです。

function f(A, x) ~ end

経験的に大抵の場合、これがベストです。

どうしても引数の型を書きたい人は

function f(A::AbstractMatrix{T}, x::T} where T<:Real

end

のように書く。

タグ: Julia言語

posted at 17:34:12

katodaikaku @katodaikaku

21年8月8日

ところで研究者が亡くなって架蔵本の処理に困るというのは全国至る所で生じている。大学図書館はどこももうコレクションを引き取ってくれない。古書店に売るのも手だが、コレクションとしての価値がある。で、早稲田は引き取ってPDFにして文庫化するようですね。これには驚きました。

タグ:

posted at 17:23:57

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語

Vector{T}, Matrix{T} はそれぞれ Array{T, 1}, Array{T, 2} のエイリアスです。

注意:ベクトルと行列と配列の型は、Vector, Matrix, Array以外にも、無数にあるので、例えば行列を引数とする函数を

function f(A::Matrix) ~ end

のように書かないで下さい。 twitter.com/sugimochi_1019... pic.twitter.com/RqR5BQZ1Qt

タグ: Julia言語

posted at 17:23:02

道草学習の部屋@オンライン家庭教師&教育 @michikusa_heya

21年8月8日

「二重数直線」に対する批判動画、YouTubeに投稿しました。20分を少し超えて少し長くなってしまいました。1.5倍速ぐらいで視聴されるのがちょうどいいと思います。
www.youtube.com/watch?v=M1NeZL...

タグ:

posted at 17:21:07

Quark @Quarkgabber

21年8月8日

Juliaで書いてあるものをPythonで
とか
BRugsで書いてあるものをRstanで
とかやると結構勉強になるよね

タグ:

posted at 15:58:57

平山 尚 @hirasho

21年8月8日

長女のセンス好きだ。ほぼ毎日冷蔵庫のホワイトボードになにか描かれる。 pic.twitter.com/5o2qvvt572

タグ:

posted at 14:24:33

TaKu @takusansu

21年8月8日

@hgn_no_otaku 「何を考えて式を書いたか知りたい」と「この式を書いていたらこう考えた事にする」をごちゃ混ぜにする算数教育界wの悪習の体現ですよね。

タグ:

posted at 13:36:41

ジョゼフ・アンリ @joseph_henri

21年8月8日

@hgn_no_otaku この人に,面心立方格子や体心立方格子や六方最密構造の単位格子中の原子数を数える式を作らせたいです。

タグ:

posted at 12:46:48

ハガネの連勤術師 @hgn_no_otaku

21年8月8日

「気にしなくていいこと」が気になって仕方ないんだな twitter.com/metameta007/st...

タグ:

posted at 12:41:28

くじら @kujirabloger

21年8月8日

スクリプト言語でありながらPythonの数十倍速いJuliaを使うための準備の手順をまとめました!
今後も勉強しながらJuliaの記事を発信予定です。

#Julia
#JupyterLab
#ブログ初心者

cae-memo.com/julia-environm...

タグ: Julia JupyterLab ブログ初心者

posted at 12:30:00

gauchez(がうしぇ) @gauchez

21年8月8日

@yujitach @genkuroki CUDAをこんな簡単に使えるのは凄いですね。羨ましい。

タグ:

posted at 12:16:39

黒木玄 Gen Kuroki @genkuroki

21年8月8日

訂正

「図5の分割は周期境界条件では使えない」と書いたが、解釈による。

図5での赤の領域の個数が周期境界条件で1つ減ることにすれば、図5の分割を周期境界条件での並列化で使える。 pic.twitter.com/mIkCsUzTEP

タグ:

posted at 11:57:03

黒木玄 Gen Kuroki @genkuroki

21年8月8日

図5の分割は周期境界条件では使えない。

右下の図の領域1と領域2の格子点は直接線で繋がっていないので、相互作用しておらず、領域1内と領域2内の計算は別々に独立に可能。

ここまで理解すれば3次元以上の場合も同様。 pic.twitter.com/w5J3F7RxVV

タグ:

posted at 11:52:48

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 上では図1のような2次元正方格子上のIsing模型を扱いました。直接線で繋がった格子点どうしのみが相互作用している(実際には周期境界条件でやっている)。

上で使った並列化は図2の分割に対応。赤の部分と青の部分でそれぞれ並列化している。

他にも図3,4,5のような分割でも並列化可能。 pic.twitter.com/kSdfVc0BTa

タグ: Julia言語

posted at 11:49:59

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 どなたかGPU版(CUDA.jl版)をよろしく!😊

タグ: Julia言語

posted at 11:30:49

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 訂正。上で「ひどい手抜き」と言ってしまいましたが、実際にはそうでもないような気がして来ました。たぶん、上のやり方で問題ない。

もしも「いや、やはり、それは手抜きすぎで、こうすればもっと効率が上がる!」と気付いた人がいたら、その改善の方法を教えてください。

タグ: Julia言語

posted at 10:46:33

黒木玄 Gen Kuroki @genkuroki

21年8月8日

もちろん、私も全然わかっていない。

しかし、#Julia言語 なら、コードを書くことがおそろしく楽なので、小さなコストでやれることが増え易いと思います。

タグ: Julia言語

posted at 10:38:00

黒木玄 Gen Kuroki @genkuroki

21年8月8日

「相互作用があるような系では色々考えなければいけないことが増える」というのは結構大問題で、その辺のノウハウを知りたい人達はいっぱいいるはず。

タグ:

posted at 10:35:54

黒木玄 Gen Kuroki @genkuroki

21年8月8日

プログラミング言語とは無関係に並列化やGPU化そのものに結構難しい所があります。

すべてが完全に独立に実行できる場合(例:マンデルブロ集合)は超絶簡単ですが、相互作用があるような系では色々考えなければいけないことが増える。

タグ:

posted at 10:34:43

黒木玄 Gen Kuroki @genkuroki

21年8月8日

誰かが頑張って結合法則の一般化の考え方で並列化を楽に行えるようにしてくれるフレームワークのパッケージがあると便利かもしれません。

GPUでの計算の本質も並列化。

タグ:

posted at 10:31:00

黒木玄 Gen Kuroki @genkuroki

21年8月8日

勉強不足で並列計算の教科書の類を何1つ見たことがないのですが、並列化の基本が結合法則の一般化であることは、Juliaでの並列計算でちょっと遊んでみればすぐに気付きます。

タグ:

posted at 10:29:00

黒木玄 Gen Kuroki @genkuroki

21年8月8日

結合法則を1次元の場合とみなして、それを2次元化すれば、2次元正方格子上のIsing模型などの並列化の仕方も得られるわけです。

互いに相互作用がない部分集合達A_{i_1}, A_{i_2}, …のそれぞれの上での計算は独立に実行可能なので並列化できる。そのような並列化された実行を繰り返して全体を更新。

タグ:

posted at 10:26:30

黒木玄 Gen Kuroki @genkuroki

21年8月8日

並列化の基本は、代数学における結合法則およびその(多次元への)一般化です。

結合法則を使えば、abcdefghをab, cd, ef, ghに分割して並列に計算し、(ab)(cd), (ef)(gh)を並列で計算し、((ab)(cd))((ef)(gh))を計算するという3ステップで計算できます。ab, (ab)c, ((ab)c)d, ...と計算しなくてよい。

タグ:

posted at 10:22:35

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 マルチスレッド版

もしもマルチスレッド化で「物理」を変えてしまうバグを混入させていたらごめんなさい。結構やりがち。

github.com/genkuroki/publ... pic.twitter.com/9ZSKybqiYt

タグ: Julia言語

posted at 10:14:45

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 これはシングルスレッド版で作った動画

200×200の盤面全体を更新するごとにフレームを作成しています。全部で400フレームの動画。fpsは20です。逆温度は理論的な臨界値。

github.com/genkuroki/publ... pic.twitter.com/DwEhRS4DEM

タグ: Julia言語

posted at 10:14:39

黒木玄 Gen Kuroki @genkuroki

21年8月8日

そういう手抜きになってしまった理由は、必要最小限のコードの変更で並列化したからです。もうちょっとコードを書けば効率を上げられるはずです。

しかし、そういう手抜きのコードであっても12スレッドで6~9倍速くなった。スレッド生成は気にしすぎるほど重くないということなのでしょう。

タグ:

posted at 10:08:53

黒木玄 Gen Kuroki @genkuroki

21年8月8日

一般には、格子を部分集合A_i達に分割して、互いに独立に実行できる A_{i_1}, A_{i_2}, ... 達の上での更新を並列化することを繰り返して、格子全体上での更新を実現すればよいです。

この一般化を理解していれば、上の方法はひどい手抜きでスレッドを無駄に多く生成していることも分かります。

タグ:

posted at 10:08:53

黒木玄 Gen Kuroki @genkuroki

21年8月8日

同様に、

{1,2,…,m} × {j} (j = 2, 4, 6, …)

の各々の上での更新も違いに独立に実行の順序を気にせずにやって構わない。

これが、jが奇数と偶数の場合に分けて、それぞれを並列化した理由です。

タグ:

posted at 10:08:52

黒木玄 Gen Kuroki @genkuroki

21年8月8日

この方法での並列化のポイントは

互いに独立に実行の順番を気にせずにすむforループに
Threads.@ threadsマクロを作用させること

です。m×nの正方格子上のIsingモデルでは

{1,2,…,m} × {j} (j = 1, 3, 5, …)

の各々の上での更新は違いに独立に実行の順序を気にせずにやって構いません。続く

タグ:

posted at 10:08:51

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 j0は1と2を動きます。それによって、格子のj座標の動く範囲は奇数と偶数に分割されます。

Threads.@ threads はその直後のforループをスレッド並列化されたコードに書き直してくれるマクロです。

これによって、j座標が奇数と偶数の場合が別々に並列化されています。続く pic.twitter.com/ih62qXMV0p

タグ: Julia言語

posted at 09:52:12

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 添付画像は2次元正方格子上のIsing模型の盤面全体を更新する函数です。シングルスレッド版とマルチスレッド版の違いは赤線の部分しかありません。

これだけの変更でスレッド並列化が完了します。続く pic.twitter.com/9DD5QkEKLy

タグ: Julia言語

posted at 09:52:10

黒木玄 Gen Kuroki @genkuroki

21年8月8日

#Julia言語 ごめんなさい、まだそのgistを見てないです。

以前書いた2D Isingのコードの並列化を書こうとずっと思っていたのをついさっき書きました。

今回試した場合には、6コア12スレッドCPUでのマルチスレッド化で6~9倍程度速くなっています。解説に続く。

github.com/genkuroki/publ... twitter.com/yujitach/statu... pic.twitter.com/xwoNkDA9wc

タグ: Julia言語

posted at 09:42:19

Chad Scherrer @ChadScherrer

21年8月8日

An open-source license that starts out "free for non-commercial use", and opens up for commercial use as you're paid for the work

タグ:

posted at 04:48:18

数学女子 @phasetrbot

21年8月8日

JuliaとF# 動かしたい。

タグ:

posted at 00:47:17

数学女子 @phasetrbot

21年8月8日

そういえばvscodeのipynb読み込みでpython以外の言語動かせる?

タグ:

posted at 00:47:04

@yujitach

21年8月8日

また、僕の上に貼った gist のコードが Julia らしくない、並列化以前にもっとこうやったら速くなる、等ありましたらご鞭撻ください。なにぶん Julia をインストールしたのが水曜だったので…

タグ:

posted at 00:41:36

@yujitach

21年8月8日

コードを GPU 向けにコンパイルし直すんですね。文献は llvm.org/devmtg/2019-04...arxiv.org/abs/1712.03112 のあたりのようです。

タグ:

posted at 00:33:03

@yujitach

21年8月8日

書いて gist にあげました: gist.github.com/yujitach/c30d7... が、どうでしょう、GPU でなくても並列で高速化していただけるととても助かりますが、Julia 大好きな方に教えていただけますと有り難いです。

それは兎も角、CUDA.jl の仕組みはすごいですね、Julia が 内部で使っている LLVM を直接つかって

タグ:

posted at 00:33:03

@yujitach

21年8月8日

Julia の良い所を数日前に聞いたら、@genkuroki さんにGPU で簡単にコードを走らせられると教えていただきました。今研究で spin chain Hamiltonian の数値対角化をしようとしていて、GPU で速くなるのならとても有り難いのですが。サンプルとして一次元 Ising 鎖のコードを Julia で twitter.com/genkuroki/stat...

タグ:

posted at 00:33:02

@genkurokiホーム
スポンサーリンク
▲ページの先頭に戻る
ツイート  タグ  ユーザー

User

» More...

Tag

» More...

Recent

Archive

» More...

タグの編集

掛算 統計 超算数 Julia言語 数楽 JuliaLang 十分 と教 モルグリコ 掛け算

※タグはスペースで区切ってください

送信中

送信に失敗しました

タグを編集しました