SlideShare a Scribd company logo
1 of 33
Download to read offline
LLVM Talk
自己紹介
• 先山賢一
– 新卒3年目
• 好きなプログラミング言語
– C++、Rust、Haskell
• 並列コンピューティングとか好き
– SIMD、GPU
今日話すこと
普段はプロセッサのお話してる。
(新人研修とか)
たまにはソフトの話もしてみたい
今日話すこと
じゃあコンパイラの話をしよう!
今日話すこと
その前に。
実は私、最近悩みがあるんです
同じ悩みを持つ人に、共有したい
皆さん、
こんな方は周りにいませんか?
こんな方
• 普段の仕事はSQLとかshellscript。
• 趣味でアセンブリ等の低レイヤを嗜む。
– Intelの命令セットを眺めるのが好き。
• LLVMに興味がある。
– きつねさん本を一通り読んだ。
• よし、俺もコンパイラ自作する!
しかし週末には、
!?
<⌒/ヽ-、___
/<_/____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
目
が
覚
め
た
ら
月
曜
日
に
な
っ
て
い
る
!
どうしてこうなった?
• 土日にC++を開発するパワーがない
– LLVMはC++
– 普段の仕事で疲労している
– プライベートは楽しくプログラムしたい
– ちょっとの改修もC++はコストがでかい
– でもコンパイラは自作してみたい...
• LLVMでもPythonならクールに書ける!!
そもそもLLVMって?
Low Level Virtual Machine
コンパイラ共通基盤
そもそも
コンパイラってなんだっけ?
コンパイラとは?
• ソースコード解析して実行ファイル作成
ソースコード 実行ファイル
コンパイラのお仕事
代表的なコンパイラ
• GCC
– C/C++/Obj-C
• GHC
– Haskell
• Javac
– Java
LLVM
• LLVM IRという中間表現を生成
• IRを最適化して実行ファイルを出力
C++
Obj-C
Haskell
LLVM IR
x86
ARM
PowerPC
LLVMのお仕事
何が嬉しいの?
• おれおれ言語が簡単にできる
– LLVM IRへのトランスレータを書くだけ
• よい感じで最適化してくれる
– ベクトル化とか
• JITもできて動的コード生成
– 非常に高速
広く利用されている
これがLLVMです!
このロゴはApple製
使ってみたい
+ llvmlite
やりたいこと
• Pythonの関数を作って
⇒ AST(抽象構文木)を作って
⇒ 型推論して
⇒ LLVM IRに変換して
⇒ JITで実行
• ね、簡単でしょ?
def add(x, y):
return x + y
Function
add
Arguments
x y
body
Return
x y
+
AST
Python
func
LLVM IR
define i32
@add(i32 %.1, i32 %.2) {
.4:
%res = add i32 %.1, %.2
ret i32 %res
}
やってみた(デモ)
こんな感じで実装
@llvm_func(int, int)
def sample(x, y):
a = x
b = y
a = 100
b = 100
return a + b
def main():
ret = compiler.exe(sample, 111, 111)
print("result: " + str(ret))
こんな感じで実装
@llvm_func(int, int)
def sample(x, y):
a = x
b = y
a = 100
b = 100
return a + b
def main():
ret = compiler.exe(sample, 111, 111)
print("result: " + str(ret))
型がわかるように
アノテーション付けた
関数名を渡して
実行する
素だとこんなIRだが、、、
define i32 @sample(i32 %.1, i32 %.2) {
.4:
%.5 = alloca i32
store i32 %.1, i32* %.5
%.7 = alloca i32
store i32 %.2, i32* %.7
store i32 100, i32* %.5
store i32 100, i32* %.7
%.11 = load i32* %.5
%.12 = load i32* %.7
%res = add i32 %.11, %.12
ret i32 %res
}
いい感じで最適化♪
define i32 @sample(i32 %.1, i32 %.2) #0 {
.4:
ret i32 200
}
さっきの例は
定数を返すだけ。
まとめ
• LLVM
– コンパイラ共通基盤
– ソースコード⇒LLVM IR⇒実行ファイル
• Pythonならトランスレータ簡単
– llvmliteすげー
– ast.NodeVisitorすばらしい

More Related Content

What's hot

Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース悠滋 山本
 
Biglt endered-2021-12-11
Biglt endered-2021-12-11Biglt endered-2021-12-11
Biglt endered-2021-12-11ssuserc8477f
 
Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクトPhjosh(仮)プロジェクト
Phjosh(仮)プロジェクトMoriyoshi Koizumi
 
WordCamp Nagoya 2010 初心者向けLT PHPが分からなくてもテーマいじりは怖くないっ!!初心者向けフリーテーマ"Mypace Cust...
WordCamp Nagoya 2010 初心者向けLT PHPが分からなくてもテーマいじりは怖くないっ!!初心者向けフリーテーマ"Mypace Cust...WordCamp Nagoya 2010 初心者向けLT PHPが分からなくてもテーマいじりは怖くないっ!!初心者向けフリーテーマ"Mypace Cust...
WordCamp Nagoya 2010 初心者向けLT PHPが分からなくてもテーマいじりは怖くないっ!!初心者向けフリーテーマ"Mypace Cust...Kei Nomura
 
第二回 クラウドサーバー管理者若葉の会
第二回 クラウドサーバー管理者若葉の会第二回 クラウドサーバー管理者若葉の会
第二回 クラウドサーバー管理者若葉の会masayoshi shiraishi
 
Netcommonsアドオンモジュールセミナー第7回
Netcommonsアドオンモジュールセミナー第7回Netcommonsアドオンモジュールセミナー第7回
Netcommonsアドオンモジュールセミナー第7回Mitsuru Mutaguchi
 
セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」
セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」
セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」Sora Arakawa
 

What's hot (9)

Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース
 
スライド4
スライド4スライド4
スライド4
 
Biglt endered-2021-12-11
Biglt endered-2021-12-11Biglt endered-2021-12-11
Biglt endered-2021-12-11
 
Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクトPhjosh(仮)プロジェクト
Phjosh(仮)プロジェクト
 
WordCamp Nagoya 2010 初心者向けLT PHPが分からなくてもテーマいじりは怖くないっ!!初心者向けフリーテーマ"Mypace Cust...
WordCamp Nagoya 2010 初心者向けLT PHPが分からなくてもテーマいじりは怖くないっ!!初心者向けフリーテーマ"Mypace Cust...WordCamp Nagoya 2010 初心者向けLT PHPが分からなくてもテーマいじりは怖くないっ!!初心者向けフリーテーマ"Mypace Cust...
WordCamp Nagoya 2010 初心者向けLT PHPが分からなくてもテーマいじりは怖くないっ!!初心者向けフリーテーマ"Mypace Cust...
 
Parascript
ParascriptParascript
Parascript
 
第二回 クラウドサーバー管理者若葉の会
第二回 クラウドサーバー管理者若葉の会第二回 クラウドサーバー管理者若葉の会
第二回 クラウドサーバー管理者若葉の会
 
Netcommonsアドオンモジュールセミナー第7回
Netcommonsアドオンモジュールセミナー第7回Netcommonsアドオンモジュールセミナー第7回
Netcommonsアドオンモジュールセミナー第7回
 
セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」
セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」
セッション「新版 HSP基礎講座」+「Arakawa Templateで作るこだわりウェブサイト」
 

Viewers also liked

Java?ruby? そろそろgoで行ってみませんか?
Java?ruby? そろそろgoで行ってみませんか? Java?ruby? そろそろgoで行ってみませんか?
Java?ruby? そろそろgoで行ってみませんか? Kenichi Hoshi
 
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiKen'ichi Sakiyama
 
[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ
[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ
[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれYasuhiro Murata
 
本を管理するためのオレオレベストプラクティス
本を管理するためのオレオレベストプラクティス本を管理するためのオレオレベストプラクティス
本を管理するためのオレオレベストプラクティスSadayuki Matsuno
 
デジタルファブリケーションノススメ
デジタルファブリケーションノススメデジタルファブリケーションノススメ
デジタルファブリケーションノススメ力世 山本
 

Viewers also liked (9)

Java?ruby? そろそろgoで行ってみませんか?
Java?ruby? そろそろgoで行ってみませんか? Java?ruby? そろそろgoで行ってみませんか?
Java?ruby? そろそろgoで行ってみませんか?
 
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
 
Ai入門 in prolog
Ai入門 in prologAi入門 in prolog
Ai入門 in prolog
 
[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ
[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ
[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ
 
LT 手作りGit
LT 手作りGitLT 手作りGit
LT 手作りGit
 
本を管理するためのオレオレベストプラクティス
本を管理するためのオレオレベストプラクティス本を管理するためのオレオレベストプラクティス
本を管理するためのオレオレベストプラクティス
 
BIが可愛い
BIが可愛いBIが可愛い
BIが可愛い
 
デジタルファブリケーションノススメ
デジタルファブリケーションノススメデジタルファブリケーションノススメ
デジタルファブリケーションノススメ
 
go-apt-cacher/mirror
go-apt-cacher/mirrorgo-apt-cacher/mirror
go-apt-cacher/mirror
 

Recently uploaded

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Recently uploaded (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

Llvm Talk 社内LT大会資料