tak0kadaの何でもノート

発声練習、生存確認用。

医学関連は 医学ノート

Rの並列化

Rも並列化で高速化することが可能らしい。使うパッケージとしてはRmpi、snow、pforeachがある。pforeachが一番後発なので多分使いやすいのだろう?

2019/02/18 追記

parallel, foreach, dosnow, doparallel, snowfall, domc, furrr, future, future.batchtools, dompi など山ほど出てくる。

foreachパッケージをdoMCやdoSNOWパッケージと組み合わせて使うのが便利そうである。どちらを使うかであるが、foreach-based Parallelismを見ると

4.2. doMC: shared-memory parallelism
4.3. doSNOW: distributed-memory parallelism

とのことであり、doMCはそもそもWindows用のバイナリを配布していない。ということで、他の人に使ってもらうときはdoSNOW、自分で使うときは基本的にdoMC、クラスタを使うときはdoSNOWということにしておく。%dopar%でだめなら%do%にすれば並列化をoffにできる。

# doMC + foreach
library(foreach)
library(doMC)

registerDoMC(cores=as.integer(system("nproc", intern=TRUE)) - 1)

result <- foreach(i=1:10, .combine=c, .export=ls(envir=parent.frame())) %dopar% {
  myProc()
}
result
# doSNOW + foreach
library(foreach)
library(doSNOW, quietly=TRUE)
library(parallel) # detectCores

cluster <- makeCluster(detectCores(), type="SOCK")
# cluster <- makeCluster(detectCores() - 1, type="MPI")
registerDoSNOW(cluster)

result <- foreach(i=1:10, .combine=c, .export=ls(envir=parent.frame())) %dopar% {
  myProc()
}
result

stopCluster(cluster)

2019/02/19 追記

GPUも使ってみたい。R Language - GPU加速コンピューティング | r Tutorialを見るにnvidia製gpuならgputools、それ以外ならgpurを使うしかなさそう。openclパッケージはOpenCLをベタ書きするのでもはやRではない。

ガウス曲率K、平均曲率Hの計算

Differential Forms with Applications to the Physical Sciencesのp.48の6番でz=f(x,y)と表せるような曲面についてガウス曲率Kと平均曲率Hを求める問題がある。これをsympyでやってみる。

続きを読む

プロの仕事とは

定められた時間内、制約内で確実に結果を出すのがプロフェッショナルである。今研究室でしている作業は他人の研究成果をコードに落とし込んでデータを解析するというエンジニア的なことなのだが、どうにも作業が進まない。というのも、自分には完璧主義的な傾向があるために、見た瞬間に解決できない難しい問題に対して周辺知識も含め全て納得しなければ不安で作業できないためである。

続きを読む

「幾何学的に理解する物理数学」を読んだ

サイエンス社SGCライブラリの幾何学的に理解する物理数学微積分を理解するために読んだ。初心者に分かりやすく、浅く広く勉強するのには便利な教科書だが、誤植(と初学者並に思う)が所々あるので証明の間を埋めるのに少し時間を要した。テンソル複素解析汎関数の概念を新たに仕入れたのでそれは今後折を見て勉強する。

続きを読む

メッシュ上の数値積分

  • 実際にはメッシュの頂点上に与えられた離散的な関数を球面調和関数で展開する
    • 球面調和関数は連続なのでできる限りその情報を失わないようにしたい
  • 連続関数のメッシュ上での積分ガウス求積が一般的に用いられる
  • Simpson法だと3種類の係数で2次の精度→一般にN種類の係数でN-1次の精度(積分点が少なくていい訳ではない)
  • ガウス求積だとN個の重みとN個の積分点で2N-1次の精度(積分点はN個だけ)
  • 積分点はSimpson法だと均一に分布するのに対し、ガウス求積だと境界部分により多く分布する
続きを読む