SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
プログラミング言語 
の紹介 
2014/9/16 
Kentaro Iizuka 
Github: iizukak
• 一言で言えば、科学技術計算向けの高速なLL 
• 数値計算 ∪ 確率統計 ∪ 機械学習 ∪ 画像処理 ∪ 等々
ぱっと見、普通なLL 
function 
randmatstat(t) 
n 
= 
5 
v 
= 
zeros(t) 
w 
= 
zeros(t) 
for 
i=1:t 
a 
= 
randn(n,n) 
b 
= 
randn(n,n) 
c 
= 
randn(n,n) 
d 
= 
randn(n,n) 
P 
= 
[a 
b 
c 
d] 
Q 
= 
[a 
b; 
c 
d] 
v[i] 
= 
trace((P.'*P)^4) 
w[i] 
= 
trace((Q.'*Q)^4) 
end 
return 
(std(v)/mean(v), 
std(w)/ 
mean(w)) 
end 
function 
mandel(z) 
c 
= 
z 
maxiter 
= 
80 
for 
n 
= 
1:maxiter 
if 
abs(z) 
> 
2 
return 
n-­‐1 
end 
z 
= 
z^2 
+ 
c 
end 
return 
maxiter 
end
もちろん対話環境有 
$ 
julia 
_ 
_ 
_ 
_(_)_ 
| 
A 
fresh 
approach 
to 
technical 
computing 
(_) 
| 
(_) 
(_) 
| 
Documentation: 
http://docs.julialang.org 
_ 
_ 
_| 
|_ 
__ 
_ 
| 
Type 
"help()" 
for 
help. 
| 
| 
| 
| 
| 
| 
|/ 
_` 
| 
| 
| 
| 
|_| 
| 
| 
| 
(_| 
| 
| 
Version 
0.3.0 
(2014-­‐08-­‐20 
20:43 
UTC) 
_/ 
|__'_|_|_|__'_| 
| 
Official 
http://julialang.org/ 
release 
|__/ 
| 
x86_64-­‐apple-­‐darwin13.3.0 
julia> 
1 
+ 
2 
3 
julia> 
ans 
3 
http://docs.julialang.org/en/release-0.3/manual/getting-started/
でいいじゃん?
CPython, R よりは速い 
http://julialang.org/benchmarks/
NumPy, PyPy 
でいいじゃん?
そ、そうかな…? 
• 確かにNumPyは速い 
• 線形代数関係の使い勝手がよい、と思う 
• ユーザー数多い 
• だが、NumPyのソースコードを読むのは難易度高
NumPy is 半分 C
NumPy is 半分 C 
• 神によってチューニングされた C 
• 使うのは簡単だが、改造/改良は難易度高 
• NumPy に限らず、LLで書いて遅いところはCで書 
きなおすのは定石
Julia is だいたい Julia 
だいたいJulia 
どうしてもなところはC
function 
randmatstat(t) 
n 
= 
5 
v 
= 
zeros(t) 
w 
= 
zeros(t) 
for 
i=1:t 
a 
= 
randn(n,n) 
b 
= 
randn(n,n) 
c 
= 
randn(n,n) 
d 
= 
randn(n,n) 
P 
= 
[a 
b 
c 
d] 
Q 
= 
[a 
b; 
c 
d] 
v[i] 
= 
trace((P.'*P)^4) 
w[i] 
= 
trace((Q.'*Q)^4) 
end 
return 
(std(v)/mean(v), 
std(w)/ 
mean(w)) 
end 
struct 
double_pair 
randmatstat(int 
t) 
{ 
dsfmt_t 
dsfmt; 
dsfmt_init_gen_rand(&dsfmt, 
1234); 
int 
n 
= 
5; 
struct 
double_pair 
r; 
double 
*v 
= 
(double*)calloc(t,sizeof(double)); 
double 
*w 
= 
(double*)calloc(t,sizeof(double)); 
double 
*a 
C 
= 
(double*)malloc((n)*(n)*sizeof(double)); 
double 
*b 
= 
(double*)malloc((n)*(n)*sizeof(double)); 
double 
*c 
= 
(double*)malloc((n)*(n)*sizeof(double)); 
double 
*d 
= 
(double*)malloc((n)*(n)*sizeof(double)); 
double 
*P 
= 
(double*)malloc((n)*(4*n)*sizeof(double)); 
double 
*Q 
= 
(double*)malloc((2*n)*(2*n)*sizeof(double)); 
double 
*PtP1 
= 
(double*)malloc((4*n)*(4*n)*sizeof(double)); 
double 
*PtP2 
= 
(double*)malloc((4*n)*(4*n)*sizeof(double)); 
double 
*QtQ1 
= 
(double*)malloc((2*n)*(2*n)*sizeof(double)); 
double 
*QtQ2 
= 
(double*)malloc((2*n)*(2*n)*sizeof(double)); 
for 
(int 
i=0; 
i 
< 
t; 
i++) 
{ 
randmtzig_fill_randn(&dsfmt, 
a, 
n*n); 
randmtzig_fill_randn(&dsfmt, 
b, 
n*n); 
randmtzig_fill_randn(&dsfmt, 
c, 
n*n); 
randmtzig_fill_randn(&dsfmt, 
d, 
n*n); 
memcpy(P+0*n*n, 
a, 
n*n*sizeof(double)); 
memcpy(P+1*n*n, 
b, 
n*n*sizeof(double)); 
memcpy(P+2*n*n, 
c, 
n*n*sizeof(double)); 
memcpy(P+3*n*n, 
d, 
n*n*sizeof(double)); 
for 
(int 
j=0; 
j 
< 
n; 
j++) 
{ 
for 
(int 
k=0; 
k 
< 
n; 
k++) 
{ 
Q[2*n*j+k] 
= 
a[k]; 
Q[2*n*j+n+k] 
= 
b[k]; 
Q[2*n*(n+j)+k] 
= 
c[k]; 
Q[2*n*(n+j)+n+k] 
= 
d[k]; 
} 
} 
cblas_dgemm(CblasColMajor, 
CblasTrans, 
CblasNoTrans, 
n, 
n, 
4*n, 
1.0, 
P, 
4*n, 
P, 
4*n, 
0.0, 
PtP1, 
4*n); 
cblas_dgemm(CblasColMajor, 
CblasNoTrans, 
CblasNoTrans, 
4*n, 
4*n, 
4*n, 
1.0, 
PtP1, 
4*n, 
PtP1, 
4*n, 
0.0, 
PtP2, 
4*n); 
cblas_dgemm(CblasColMajor, 
CblasNoTrans, 
CblasNoTrans, 
4*n, 
4*n, 
4*n, 
1.0, 
PtP2, 
4*n, 
PtP2, 
4*n, 
0.0, 
PtP1, 
4*n); 
for 
(int 
j=0; 
j 
< 
n; 
j++) 
{ 
v[i] 
+= 
PtP1[(n+1)*j]; 
} 
cblas_dgemm(CblasColMajor, 
CblasTrans, 
CblasNoTrans, 
2*n, 
2*n, 
2*n, 
1.0, 
Q, 
2*n, 
Q, 
2*n, 
0.0, 
QtQ1, 
2*n); 
cblas_dgemm(CblasColMajor, 
CblasNoTrans, 
CblasNoTrans, 
2*n, 
2*n, 
2*n, 
1.0, 
QtQ1, 
2*n, 
QtQ1, 
2*n, 
0.0, 
QtQ2, 
2*n); 
Julia
Julia プログラマは 
Julia 本体のコードが読める
低レイヤ層マンにも優しい 
julia> f(x) = x * x! 
f (generic function with 1 method)! 
! 
julia> f(2.0)! 
4.0! 
! 
julia> code_llvm(f, (Float64,))! 
! 
define double @julia_f662(double) {! 
top:! 
%1 = fmul double %0, %0, !dbg !3553! 
ret double %1, !dbg !3553! 
}! 
♥ 
出力される LLVM コードの 
チェックも楽
Julia では、ドメインエキスパートと 
速度マニアが一緒に仕事ができる。 
これは大きな達成である。 
Why I’m Betting on Julia 
By Evan Miller 
http://www.evanmiller.org/why-im-betting-on-julia.html
絶賛開発中 
• 0.1 : 2013/02 
• 0.2 : 2013/11 
• 0.3 : 2014/08 
• JuliaCon 2014 : 2014/06
ドキュメントしっかりしてる 
http://julia.readthedocs.org/en/latest/
コミュニティが活発 
MLへの投稿多し 
(in 12 hour)
More Features 
• 多重ディスパッチ 
• 同図像性(マクロがあります) 
• C の呼び出しも簡単(ええ、C も使えますよもちろん) 
• 使いやすい並列計算の仕組み 
• パッケージ管理ももちろんあります 
• MIT License
• 科学技術計算向けの速いLL 
• OO な LL を書いたことがある人なら簡単 
• Julia の大部分は Julia で書かれている 
• 科学好きプログラマにぴったり!
おまけ 
• インストール 
• OS X なら dmg を落とすだけ! 最新版を使う 
• http://julialang.org/downloads/ 
• チュートリアル 
• http://julia.readthedocs.org/en/latest/manual/getting-started/ 
• ドキュメント 
• http://docs.julialang.org/en/latest/ 
• JuliaCon 2014 の発表動画 
• https://www.youtube.com/user/JuliaLanguage

Contenu connexe

Tendances

⾃動プログラム修正による マージ競合の⾃動解決を⽬指して(SES 2020 発表資料)
⾃動プログラム修正による マージ競合の⾃動解決を⽬指して(SES 2020 発表資料)⾃動プログラム修正による マージ競合の⾃動解決を⽬指して(SES 2020 発表資料)
⾃動プログラム修正による マージ競合の⾃動解決を⽬指して(SES 2020 発表資料)katsuhisamaruyama
 
mlr-grep - レコード指向grep
mlr-grep - レコード指向grepmlr-grep - レコード指向grep
mlr-grep - レコード指向grepRyoichi KATO
 
Sec15 dynamic programming
Sec15 dynamic programmingSec15 dynamic programming
Sec15 dynamic programmingKeisuke OTAKI
 
卒業論文発表スライド 分割統治法の拡張
卒業論文発表スライド 分割統治法の拡張卒業論文発表スライド 分割統治法の拡張
卒業論文発表スライド 分割統治法の拡張masakazuyamanaka
 
ゆとりが数週間でC++を始めるようです
ゆとりが数週間でC++を始めるようですゆとりが数週間でC++を始めるようです
ゆとりが数週間でC++を始めるようですEric Sartre
 
Hello, Guava ! samples
Hello, Guava ! samplesHello, Guava ! samples
Hello, Guava ! samples輝 子安
 
定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系CoqについてYoshihiro Mizoguchi
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
位置情報コード「ロカポ」のご紹介
位置情報コード「ロカポ」のご紹介位置情報コード「ロカポ」のご紹介
位置情報コード「ロカポ」のご紹介Hal Seki
 
AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説AtCoder Inc.
 
Fokker–Planck equation and DPD simulations
Fokker–Planck equation and DPD simulationsFokker–Planck equation and DPD simulations
Fokker–Planck equation and DPD simulationsKotaro Tanahashi
 

Tendances (20)

⾃動プログラム修正による マージ競合の⾃動解決を⽬指して(SES 2020 発表資料)
⾃動プログラム修正による マージ競合の⾃動解決を⽬指して(SES 2020 発表資料)⾃動プログラム修正による マージ競合の⾃動解決を⽬指して(SES 2020 発表資料)
⾃動プログラム修正による マージ競合の⾃動解決を⽬指して(SES 2020 発表資料)
 
wq-2. 待ち行列
wq-2. 待ち行列wq-2. 待ち行列
wq-2. 待ち行列
 
Clean
Clean Clean
Clean
 
mlr-grep - レコード指向grep
mlr-grep - レコード指向grepmlr-grep - レコード指向grep
mlr-grep - レコード指向grep
 
Sec15 dynamic programming
Sec15 dynamic programmingSec15 dynamic programming
Sec15 dynamic programming
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
llvm入門
llvm入門llvm入門
llvm入門
 
CMSI計算科学技術特論B(12) 大規模量子化学計算(1)
CMSI計算科学技術特論B(12) 大規模量子化学計算(1)CMSI計算科学技術特論B(12) 大規模量子化学計算(1)
CMSI計算科学技術特論B(12) 大規模量子化学計算(1)
 
卒業論文発表スライド 分割統治法の拡張
卒業論文発表スライド 分割統治法の拡張卒業論文発表スライド 分割統治法の拡張
卒業論文発表スライド 分割統治法の拡張
 
ゆとりが数週間でC++を始めるようです
ゆとりが数週間でC++を始めるようですゆとりが数週間でC++を始めるようです
ゆとりが数週間でC++を始めるようです
 
Hello, Guava ! samples
Hello, Guava ! samplesHello, Guava ! samples
Hello, Guava ! samples
 
diff template library
diff template librarydiff template library
diff template library
 
Index
IndexIndex
Index
 
定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系Coqについて
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
Coqチュートリアル
CoqチュートリアルCoqチュートリアル
Coqチュートリアル
 
位置情報コード「ロカポ」のご紹介
位置情報コード「ロカポ」のご紹介位置情報コード「ロカポ」のご紹介
位置情報コード「ロカポ」のご紹介
 
Emcjp item33,34
Emcjp item33,34Emcjp item33,34
Emcjp item33,34
 
AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説
 
Fokker–Planck equation and DPD simulations
Fokker–Planck equation and DPD simulationsFokker–Planck equation and DPD simulations
Fokker–Planck equation and DPD simulations
 

En vedette

Juliaを使った機械学習
Juliaを使った機械学習Juliaを使った機械学習
Juliaを使った機械学習Aki Ariga
 
ベイジアンディープニューラルネット
ベイジアンディープニューラルネットベイジアンディープニューラルネット
ベイジアンディープニューラルネットYuta Kashino
 
Convex Optimization Modelling with CVXOPT
Convex Optimization Modelling with CVXOPTConvex Optimization Modelling with CVXOPT
Convex Optimization Modelling with CVXOPTandrewmart11
 
最適化超入門
最適化超入門最適化超入門
最適化超入門Takami Sato
 
TensorFlowで逆強化学習
TensorFlowで逆強化学習TensorFlowで逆強化学習
TensorFlowで逆強化学習Mitsuhisa Ohta
 

En vedette (8)

Juliaで並列計算
Juliaで並列計算Juliaで並列計算
Juliaで並列計算
 
Julia入門
Julia入門Julia入門
Julia入門
 
Juliaを使った機械学習
Juliaを使った機械学習Juliaを使った機械学習
Juliaを使った機械学習
 
ベイジアンディープニューラルネット
ベイジアンディープニューラルネットベイジアンディープニューラルネット
ベイジアンディープニューラルネット
 
線形計画法入門
線形計画法入門線形計画法入門
線形計画法入門
 
Convex Optimization Modelling with CVXOPT
Convex Optimization Modelling with CVXOPTConvex Optimization Modelling with CVXOPT
Convex Optimization Modelling with CVXOPT
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
TensorFlowで逆強化学習
TensorFlowで逆強化学習TensorFlowで逆強化学習
TensorFlowで逆強化学習
 

Similaire à プログラミング言語 Julia の紹介

JOI予選はランチの後で
JOI予選はランチの後でJOI予選はランチの後で
JOI予選はランチの後でKen Ogura
 
Rate-Distortion Function for Gamma Sources under Absolute-Log Distortion
Rate-Distortion Function for Gamma Sources under Absolute-Log DistortionRate-Distortion Function for Gamma Sources under Absolute-Log Distortion
Rate-Distortion Function for Gamma Sources under Absolute-Log Distortion奈良先端大 情報科学研究科
 
[DLHacks]PyTorch, PixyzによるGenerative Query Networkの実装
[DLHacks]PyTorch, PixyzによるGenerative Query Networkの実装 [DLHacks]PyTorch, PixyzによるGenerative Query Networkの実装
[DLHacks]PyTorch, PixyzによるGenerative Query Networkの実装 Deep Learning JP
 
Fiekppteste 130709205838-phpapp02
Fiekppteste 130709205838-phpapp02Fiekppteste 130709205838-phpapp02
Fiekppteste 130709205838-phpapp02Arbenng
 
FIEK provime pranuese teste.
FIEK provime pranuese teste.FIEK provime pranuese teste.
FIEK provime pranuese teste.Arton Feta
 
TopCoder SRM614 解説
TopCoder SRM614 解説TopCoder SRM614 解説
TopCoder SRM614 解説EmKjp
 
Stanとdlmによる状態空間モデル
Stanとdlmによる状態空間モデルStanとdlmによる状態空間モデル
Stanとdlmによる状態空間モデルHiroki Itô
 
JOIss2020 発表資料
JOIss2020 発表資料JOIss2020 発表資料
JOIss2020 発表資料mdkcpp 1015
 
PBL1-v1-009j.pptx
PBL1-v1-009j.pptxPBL1-v1-009j.pptx
PBL1-v1-009j.pptxNAIST
 
何もないところから数を作る
何もないところから数を作る何もないところから数を作る
何もないところから数を作るTaketo Sano
 
情報検索の基礎(11章)
情報検索の基礎(11章)情報検索の基礎(11章)
情報検索の基礎(11章)Katsuki Tanaka
 
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法nitoyon
 
公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性Joe Suzuki
 
OutLookAR for EKF_SLAM_Model
OutLookAR for EKF_SLAM_ModelOutLookAR for EKF_SLAM_Model
OutLookAR for EKF_SLAM_ModelToshiki Imagaw
 
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜Takeshi Arabiki
 
Granger因果による 時系列データの因果推定(因果フェス2015)
Granger因果による時系列データの因果推定(因果フェス2015)Granger因果による時系列データの因果推定(因果フェス2015)
Granger因果による 時系列データの因果推定(因果フェス2015)Takashi J OZAKI
 

Similaire à プログラミング言語 Julia の紹介 (20)

JOI予選はランチの後で
JOI予選はランチの後でJOI予選はランチの後で
JOI予選はランチの後で
 
Rate-Distortion Function for Gamma Sources under Absolute-Log Distortion
Rate-Distortion Function for Gamma Sources under Absolute-Log DistortionRate-Distortion Function for Gamma Sources under Absolute-Log Distortion
Rate-Distortion Function for Gamma Sources under Absolute-Log Distortion
 
[DLHacks]PyTorch, PixyzによるGenerative Query Networkの実装
[DLHacks]PyTorch, PixyzによるGenerative Query Networkの実装 [DLHacks]PyTorch, PixyzによるGenerative Query Networkの実装
[DLHacks]PyTorch, PixyzによるGenerative Query Networkの実装
 
Fiekppteste 130709205838-phpapp02
Fiekppteste 130709205838-phpapp02Fiekppteste 130709205838-phpapp02
Fiekppteste 130709205838-phpapp02
 
FIEK provime pranuese teste.
FIEK provime pranuese teste.FIEK provime pranuese teste.
FIEK provime pranuese teste.
 
C07
C07C07
C07
 
予想.pdf
予想.pdf予想.pdf
予想.pdf
 
TopCoder SRM614 解説
TopCoder SRM614 解説TopCoder SRM614 解説
TopCoder SRM614 解説
 
Stanとdlmによる状態空間モデル
Stanとdlmによる状態空間モデルStanとdlmによる状態空間モデル
Stanとdlmによる状態空間モデル
 
JOIss2020 発表資料
JOIss2020 発表資料JOIss2020 発表資料
JOIss2020 発表資料
 
PBL1-v1-009j.pptx
PBL1-v1-009j.pptxPBL1-v1-009j.pptx
PBL1-v1-009j.pptx
 
何もないところから数を作る
何もないところから数を作る何もないところから数を作る
何もないところから数を作る
 
情報検索の基礎(11章)
情報検索の基礎(11章)情報検索の基礎(11章)
情報検索の基礎(11章)
 
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
 
rで踊るパスタ
rで踊るパスタrで踊るパスタ
rで踊るパスタ
 
公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性
 
OutLookAR for EKF_SLAM_Model
OutLookAR for EKF_SLAM_ModelOutLookAR for EKF_SLAM_Model
OutLookAR for EKF_SLAM_Model
 
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
 
機械学習
機械学習機械学習
機械学習
 
Granger因果による 時系列データの因果推定(因果フェス2015)
Granger因果による時系列データの因果推定(因果フェス2015)Granger因果による時系列データの因果推定(因果フェス2015)
Granger因果による 時系列データの因果推定(因果フェス2015)
 

Dernier

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Dernier (7)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

プログラミング言語 Julia の紹介

  • 1. プログラミング言語 の紹介 2014/9/16 Kentaro Iizuka Github: iizukak
  • 2. • 一言で言えば、科学技術計算向けの高速なLL • 数値計算 ∪ 確率統計 ∪ 機械学習 ∪ 画像処理 ∪ 等々
  • 3. ぱっと見、普通なLL function randmatstat(t) n = 5 v = zeros(t) w = zeros(t) for i=1:t a = randn(n,n) b = randn(n,n) c = randn(n,n) d = randn(n,n) P = [a b c d] Q = [a b; c d] v[i] = trace((P.'*P)^4) w[i] = trace((Q.'*Q)^4) end return (std(v)/mean(v), std(w)/ mean(w)) end function mandel(z) c = z maxiter = 80 for n = 1:maxiter if abs(z) > 2 return n-­‐1 end z = z^2 + c end return maxiter end
  • 4. もちろん対話環境有 $ julia _ _ _ _(_)_ | A fresh approach to technical computing (_) | (_) (_) | Documentation: http://docs.julialang.org _ _ _| |_ __ _ | Type "help()" for help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 0.3.0 (2014-­‐08-­‐20 20:43 UTC) _/ |__'_|_|_|__'_| | Official http://julialang.org/ release |__/ | x86_64-­‐apple-­‐darwin13.3.0 julia> 1 + 2 3 julia> ans 3 http://docs.julialang.org/en/release-0.3/manual/getting-started/
  • 6. CPython, R よりは速い http://julialang.org/benchmarks/
  • 8. そ、そうかな…? • 確かにNumPyは速い • 線形代数関係の使い勝手がよい、と思う • ユーザー数多い • だが、NumPyのソースコードを読むのは難易度高
  • 10. NumPy is 半分 C • 神によってチューニングされた C • 使うのは簡単だが、改造/改良は難易度高 • NumPy に限らず、LLで書いて遅いところはCで書 きなおすのは定石
  • 11. Julia is だいたい Julia だいたいJulia どうしてもなところはC
  • 12. function randmatstat(t) n = 5 v = zeros(t) w = zeros(t) for i=1:t a = randn(n,n) b = randn(n,n) c = randn(n,n) d = randn(n,n) P = [a b c d] Q = [a b; c d] v[i] = trace((P.'*P)^4) w[i] = trace((Q.'*Q)^4) end return (std(v)/mean(v), std(w)/ mean(w)) end struct double_pair randmatstat(int t) { dsfmt_t dsfmt; dsfmt_init_gen_rand(&dsfmt, 1234); int n = 5; struct double_pair r; double *v = (double*)calloc(t,sizeof(double)); double *w = (double*)calloc(t,sizeof(double)); double *a C = (double*)malloc((n)*(n)*sizeof(double)); double *b = (double*)malloc((n)*(n)*sizeof(double)); double *c = (double*)malloc((n)*(n)*sizeof(double)); double *d = (double*)malloc((n)*(n)*sizeof(double)); double *P = (double*)malloc((n)*(4*n)*sizeof(double)); double *Q = (double*)malloc((2*n)*(2*n)*sizeof(double)); double *PtP1 = (double*)malloc((4*n)*(4*n)*sizeof(double)); double *PtP2 = (double*)malloc((4*n)*(4*n)*sizeof(double)); double *QtQ1 = (double*)malloc((2*n)*(2*n)*sizeof(double)); double *QtQ2 = (double*)malloc((2*n)*(2*n)*sizeof(double)); for (int i=0; i < t; i++) { randmtzig_fill_randn(&dsfmt, a, n*n); randmtzig_fill_randn(&dsfmt, b, n*n); randmtzig_fill_randn(&dsfmt, c, n*n); randmtzig_fill_randn(&dsfmt, d, n*n); memcpy(P+0*n*n, a, n*n*sizeof(double)); memcpy(P+1*n*n, b, n*n*sizeof(double)); memcpy(P+2*n*n, c, n*n*sizeof(double)); memcpy(P+3*n*n, d, n*n*sizeof(double)); for (int j=0; j < n; j++) { for (int k=0; k < n; k++) { Q[2*n*j+k] = a[k]; Q[2*n*j+n+k] = b[k]; Q[2*n*(n+j)+k] = c[k]; Q[2*n*(n+j)+n+k] = d[k]; } } cblas_dgemm(CblasColMajor, CblasTrans, CblasNoTrans, n, n, 4*n, 1.0, P, 4*n, P, 4*n, 0.0, PtP1, 4*n); cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, 4*n, 4*n, 4*n, 1.0, PtP1, 4*n, PtP1, 4*n, 0.0, PtP2, 4*n); cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, 4*n, 4*n, 4*n, 1.0, PtP2, 4*n, PtP2, 4*n, 0.0, PtP1, 4*n); for (int j=0; j < n; j++) { v[i] += PtP1[(n+1)*j]; } cblas_dgemm(CblasColMajor, CblasTrans, CblasNoTrans, 2*n, 2*n, 2*n, 1.0, Q, 2*n, Q, 2*n, 0.0, QtQ1, 2*n); cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, 2*n, 2*n, 2*n, 1.0, QtQ1, 2*n, QtQ1, 2*n, 0.0, QtQ2, 2*n); Julia
  • 13. Julia プログラマは Julia 本体のコードが読める
  • 14. 低レイヤ層マンにも優しい julia> f(x) = x * x! f (generic function with 1 method)! ! julia> f(2.0)! 4.0! ! julia> code_llvm(f, (Float64,))! ! define double @julia_f662(double) {! top:! %1 = fmul double %0, %0, !dbg !3553! ret double %1, !dbg !3553! }! ♥ 出力される LLVM コードの チェックも楽
  • 15. Julia では、ドメインエキスパートと 速度マニアが一緒に仕事ができる。 これは大きな達成である。 Why I’m Betting on Julia By Evan Miller http://www.evanmiller.org/why-im-betting-on-julia.html
  • 16. 絶賛開発中 • 0.1 : 2013/02 • 0.2 : 2013/11 • 0.3 : 2014/08 • JuliaCon 2014 : 2014/06
  • 19. More Features • 多重ディスパッチ • 同図像性(マクロがあります) • C の呼び出しも簡単(ええ、C も使えますよもちろん) • 使いやすい並列計算の仕組み • パッケージ管理ももちろんあります • MIT License
  • 20. • 科学技術計算向けの速いLL • OO な LL を書いたことがある人なら簡単 • Julia の大部分は Julia で書かれている • 科学好きプログラマにぴったり!
  • 21. おまけ • インストール • OS X なら dmg を落とすだけ! 最新版を使う • http://julialang.org/downloads/ • チュートリアル • http://julia.readthedocs.org/en/latest/manual/getting-started/ • ドキュメント • http://docs.julialang.org/en/latest/ • JuliaCon 2014 の発表動画 • https://www.youtube.com/user/JuliaLanguage