SlideShare a Scribd company logo
1 of 71
Download to read offline
きつねさんでもわかる
LLVM読書会 第2回
7/5
tkuro11
13年7月6日土曜日
自己紹介
• 最近(悪い意味で)世間をにぎわす  
某半導体会社社員。
• 実はエンジニアじゃない
• おてやわらかに。。。
tkuro11
13年7月6日土曜日
祝単行本化
13年7月6日土曜日
きつねさんでもわかるLLVMの訂正一覧
貢献してます!
13年7月6日土曜日
1ゲトー⊂(゚Д゚⊂͡`つ≡≡≡ズザーーーーーッ
きつねさんでもわかるLLVMの訂正一覧
貢献してます!
13年7月6日土曜日
さて......
13年7月6日土曜日
フロントエンドとは
バッグ
エンドA
フロント
エンド
C
バッグ
エンドB
フロント
エンド
Ruby
A向け
コード
B向け
コード
Cソース
rubyソース
言語依存
中間表現
ターゲット依存
13年7月6日土曜日
フロントエンドとは
• 普通はソースコードから中間表現まで担当
• LLVMの場合 、バックエンドがLLVM-IR
をいじり回すのでIRコード生成が中間表現
• 字句解析、構文解析、意味解析、コード生成
13年7月6日土曜日
フロントエンドとは
• 普通はソースコードから中間表現まで担当
• LLVMの場合 、バックエンドがLLVM-IR
をいじり回すのでIRコード生成が中間表現
• 字句解析、構文解析、意味解析、コード生成
LLVMっぽくなるのはここから
13年7月6日土曜日
DummyCCompiler
• Cのサブセット
• 全て int 型、他の型無
• グローバル変数無
• 変数の宣言時初期化無
• 変数のカンマ区切りの宣言無
• includeとかdefine無
• ビット演算無
• 単項演算無
• 配列のサポート無
https://github.com/Kmotiko/DummyCCompiler.git
13年7月6日土曜日
DummyCどんなん?
i n t t e s t ( i n t j ) {
  i n t i ;
  i = j * 1 0 ;
  r e t u r n i ;
}
i n t m a i n ( ) {
  i n t i ;
  i = 1 0 ;
  t e s t ( i ) ;
  r e t u r n 0 ;
}
わー貧弱
13年7月6日土曜日
DummyCどんなん?
i n t t e s t ( i n t j ) {
  i n t i ;
  i = j * 1 0 ;
  r e t u r n i ;
}
i n t m a i n ( ) {
  i n t i ;
  i = 1 0 ;
  t e s t ( i ) ;
  r e t u r n 0 ;
}
わー貧弱
13年7月6日土曜日
フロントエンドの流れ
字句解析
Lexer
構文解析
Parser
意味解析
Semantic
Analysis
最適化
Optimizer
コード生成
Code
Generation
ソース
コード
13年7月6日土曜日
234
字句解析
• 入力ソースコード → トークンの列
• まずは入れ物を用意
• Tokenクラス
• TokenStreamクラス
i
n t
u
=
2
3 int ruby =4 ;r
yb
13年7月6日土曜日
Tokenクラス
• 保持すべきもの
• 種類
• 文字列
• 数値
• 出現行数
列挙型のtypeで判別。継承にしてないのは
コードふくれるから?
13年7月6日土曜日
TokenStreamクラス
• Token追加
• Token取得
• カレント巻き戻し
• カレント位置変更
• カレントの種類get
• カレントの文字列get
• カレントの数値get
• Token出力(util)
13年7月6日土曜日
TokenStreamクラス
bool applyTokenIndex(int index)
{CurIndex=index;return true;}
微っっ妙・・・
bool getNextToken ();
さらに微妙・・・ (ぶ、bool??????????)
13年7月6日土曜日
字句解析 実装
• 方針としては
• ifstreamで一行ずつread
• 一文字ずつ読み込みトークン切り出し
• Tokenインスタンス生成 -> TokenStreamに
• 最後まで行ったらTokenStreamをreturn
13年7月6日土曜日
字句解析 実装
• いきなりですがバグってます。
• コメントごときで死亡
•まあそれ以外は普通
• しかし++とかしすぎ(あちこちに状態変化)
13年7月6日土曜日
構文解析
• Tokenから文法に従って AST (Abstract
Syntax Tree)に。
• つまりはグループ化して後続段で使いやすく
234int ruby =
234ruby
=
int int
13年7月6日土曜日
文法の定義
非終端記号
終端記号
13年7月6日土曜日
パーサの種類
• トップダウン(LL)
• ボトムアップ(LR)
こっから
スタート
CALL RET
CALL CALL
CALL
RET RET
RET
スタックに記号と状態を積んでいく
解析表に従い右(R)がマッチングしたらreduceする(ポンっと消えてトップに近づく)
E1 +2 E
13年7月6日土曜日
LR
13年7月6日土曜日
LR
13年7月6日土曜日
LR(k)
LR(1)
構文解析
LALR(1)
LL(k)
SLR
LR(0)
LL(1)
LL(0)
パーサの種類
13年7月6日土曜日
LLの弱点
無限
ループ
でござる
13年7月6日土曜日
isa<>とdyn_cast<>
• ちょっとC++な内容
• C++の(つかいにくーい)RTTIの代わりに
• isa<クラス>(instance)
• dyn_cast<to class>(from class)
• ベースclass -> 派生クラス変換(チェック
つき)
13年7月6日土曜日
AST
• 基底クラスを作る (BaseAST)
• とみせかけて、なぜか列挙値によるID
フィールドつき(isaあるのに・・・)
13年7月6日土曜日
各ASTについて
• リテラル
• VariableAST, NumberAST
• 二項演算子
• asignment_expression, additive_expression, multiplicative_expression
= + *
13年7月6日土曜日
各ASTについて
• 変数宣言とジャンプ命令(return)
• VariableDeclAST, JumpStmtAST
• 関数とモジュール
• FunctionAST, TranslationUnitAS
• プロトタイプ宣言
• PrototypeAST
veryトップ
13年7月6日土曜日
VariableDeclAST注意点
関数の引数は同じローカル変数でも初期値があるため区
別したかったらしい。
普通の変数もゼロ初期化にすりゃ良いのに
13年7月6日土曜日
構文解析クラスの実装
• 戦略としては
• ファイル名→ LexicalAnalysis() →TokenStream
• 非終端記号ごとにfunctionを用意する
• いわゆる再起下降パーサ
• [コードを読む]
13年7月6日土曜日
例 assign & primary expr
13年7月6日土曜日
意味解析
• intしか無いので非常に簡単
• 実際、関数再定義の確認と、プロトタイプ
とのパラメータの数しか見ていない。
• パースと同時に解析を行う
13年7月6日土曜日
コード生成
• ASTまでOK
• ようやく...........!!!
13年7月6日土曜日
コード生成
• ASTまでOK
• ようやく...........!!!
LLVMたーいむ!!!
13年7月6日土曜日
コード生成
Module作成
Function作成 >> Moduleへ
BasicBlock作成 >> Functionへ
Instruction生成 >> BasicBlock
繰り返し
最後に出力
13年7月6日土曜日
コード生成
• 本来ならGlobalVariableも挿入するが
DummyCには Global変数がない(!そうで
した)
• 該当するクラスを生成して作る
• IRBuilderというお手軽便利クラスがある
13年7月6日土曜日
IRBuilder
• llvm::IRBuilder(LLVMContext &C, MDNode
*FPMathTag=0)
• コンテキストはllvm::getGlobalContextで
• テンプレート引数はいろいろ。よーわからん
13年7月6日土曜日
generateTranslationUnit
• Moduleの作成
• プロトタイプと関数定義生成メソッドを呼び
出す
• プロトタイプと関数定義はASTのトップに
vector<>として入っている
• [コード]
13年7月6日土曜日
generatePrototype
• prototypeASTから Function生成 -> Module
• ボディは生成しない
• Functionに必要となる型情報は llvm::Typeの
関数から生成
• [コード]
13年7月6日土曜日
generateFunctionDefinition
• generatePrototypeが作ったFunctionに命令を
入れるBasicBlockを追加
• BasicBlockはBasicBlock::Create()で生成
• その後、IRBuilderクラスのSetInsertPoint()で
命令の挿入位置(カーソルみたいな物)を指定
• [コード]
13年7月6日土曜日
generateFunctionStatement
• 関数本体を生成
• FunctionStmtASTを り、変数定義、
Statement定義を行う
• 実際に生成を行うのはこの下請けの
generateVariableDeclarationと
generateStatementになる
13年7月6日土曜日
generateVariableDeclaration
• BasicBlockに変数宣言を追加
• Alloca命令の生成 : IRBuilderの CreateAlloca
でイケる
• (VariableASTの説明であった引数の初期)値の
書き込みはCreateStoreで。
• [コード]
13年7月6日土曜日
generateStatement
• BaseASTの種類に応じてstatement生成
• 下請け関数に飛ばすだけ。
• isa<>のわかりやすい使用例
• ターンテーブル
• [コード]
13年7月6日土曜日
generateBinaryExpression
• 二項演算子コードの下請け
• 左辺/右辺値のコード生成を再起
• 代入または四則演算
• ここにまたバグが!(0.9.2では直ってます)
• [コード]
13年7月6日土曜日
generateCallExpression
• 関数呼び出し命令を生成
• IRBuilder::CreateCall
• 引数はvector<Value*>で与える
• nameは返り値の名前になる
• [コード]
13年7月6日土曜日
generateJmpStatement
• return命令を生成
• IRBuilder::CreateRet
• [コード]
だんだんなげやりに・・・・
13年7月6日土曜日
generateVariable
• 変数参照を実装 . Load命令を生成する
• IRBuilder::CreateLoad
• [コード]
だんだんやりなげに・・・・
13年7月6日土曜日
だんだんやりなげに・・・・
generateNumber
• 定数Valueを生成
• llvm::ConstantInt::get
• [コード]
13年7月6日土曜日
だんだんやりなげに・・・・
generateNumber
• 定数Valueを生成
• llvm::ConstantInt::get
• [コード]
13年7月6日土曜日
おつかれ様でした
• ありがとうございましたありがとうございました
13年7月6日土曜日
まだだ、まだ終わらんよ!!!
13年7月6日土曜日
main関数について
• ドライバ部分が必要 ** gccみたいな
• 短いので全部mainに書いちゃえ、という思想
らしい
13年7月6日土曜日
OptionParser
• お手製getopt()/boost::program_options
• なんでも自作好きだなー
• 例によって結構強引
• [コード]
13年7月6日土曜日
初期化とか
• InitializeNativeTarget();
だったデータレイアウトはこれか!
• sys::PrintStackTraceOnErrorSignal()名前通り
• PrettyStackTraceProgram これも名前通り
• EnableDebugBuffering = true;
バッファのつじつまを合わせる?
13年7月6日土曜日
出力の仕方
• パスマネージャに
llvm::createPrintModulePass を登録→
pm.run()するだけ。
• ファイルオブジェクトは raw_fd_ostreamを使
う(これはエラー出力もパックしている)
• 結構簡単。
13年7月6日土曜日
初最適化(Passの指定)
• さっきもやったけど基本的に パスマネー
ジャに pm.add() するだけ。
• mem2reg をやってみる(足すだけ)
• [コード]
13年7月6日土曜日
組み込み関数(printnum)
• どうせなので標準出力に出したい
• 方針は Clangで吐いた目的コードを出して
• Parserクラスにprintnum参照を追加
• リンクしてしまう
• 結構な力技
13年7月6日土曜日
JIT
• Just In Time
• llvm::ExcuteEngineを利用(JIT専用ではない)
• 実際にはサブクラスのllvm::Interpreter, llvm::JIT,
llvm::MCJITのいずれかを利用
• MCはMachineCode 。in-memoryでよりアー
キテクチャに近いコードのため、変換が速い
13年7月6日土曜日
ExecuteEngine
• llvm::EngineBuilder::EngineBuilder(Mod)
• そのあとcreate()メソッドを使用する
• createが返した ExecutionEngine*が実行環境
の実体
• インクルードファイルで指定するか、または
ExecusionEngine::setEngineKind()
• MCの場合は setUseMCJITでも行ける
13年7月6日土曜日
JIT組み込み
• doCodeGenで作ったModuleを
ExecutionEngineに食わせる
• ExecutionEngine::getPointerToFunctionにて
実行アドレスを取得。関数呼び出しでOK
13年7月6日土曜日
Metadata
• Metadataには {MetadataString, MetadataNode}
• MetadataString → llvm::MDString
• MetadataNode → llvm::MDNode
• MDBuilderを利用する
13年7月6日土曜日
Metadata
• MDBuilderの生成メソッド
MDString *createString(StringRef Str)
MDNode *createFPMath(float Accuracy)
MDNode *createRange(const APInt &Lo, const APInt &Hi)
MDNode *createAnonymousTBAARoot()
MDNode *createTBAARoot(StringRef Name)
MDNode *createTBAANode(StringRef Name, MDNode *Parent, bool isConstant = false)
MDNode *createTBAAStructNode(ArrayRef<TBAAStructField> Fields)
MDNode *createBranchWeights(uint32_t TrueWeight, uint32_t FalseWeight)
MDNode *createBranchWeights(ArrayRef<uint32_t> Weights)
13年7月6日土曜日
MDBuilderの使い方
• 生成したMDBuilderインスタンスを使って
MDB->createFPMath(0.5);
• のように使う
• まあそのまま
13年7月6日土曜日
Metadataの反映
• 方法1:llvm::Instruction::setMetadataにて
InstructionインスタンスにMetadataをひも付
け。 Stringか ID値にて登録できる
• 方法2:IRBuilder経由で演算にひも付け
13年7月6日土曜日
Metadata
• Metadataには {MetadataString, MetadataNode}
• MetadataString → llvm::MDString
• MetadataNode → llvm::MDNode
13年7月6日土曜日
CommandLine
• ごめんなさいココロが・・・・ココロが折れ
てしまいました。
13年7月6日土曜日
13年7月6日土曜日
まとめ
• フロントエンドの作成を説明
• 字句解析/構文解析/意味解析
• コード生成/JIT
• 長かった。。。
• もっとツール使えバカ
13年7月6日土曜日
ありがとうございました
ほんとうにおつかれさまでした
13年7月6日土曜日

More Related Content

What's hot

最適化計算の概要まとめ
最適化計算の概要まとめ最適化計算の概要まとめ
最適化計算の概要まとめYuichiro MInato
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Ken Morishita
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろHiroshi Yamashita
 
機械学習システム開発案件の事例紹介
機械学習システム開発案件の事例紹介機械学習システム開発案件の事例紹介
機械学習システム開発案件の事例紹介BrainPad Inc.
 
第10回 配信講義 計算科学技術特論A(2021)
第10回 配信講義 計算科学技術特論A(2021)第10回 配信講義 計算科学技術特論A(2021)
第10回 配信講義 計算科学技術特論A(2021)RCCSRENKEI
 
【Zansa】第17回 ブートストラップ法入門
【Zansa】第17回 ブートストラップ法入門【Zansa】第17回 ブートストラップ法入門
【Zansa】第17回 ブートストラップ法入門Zansa
 
第9回 KAIM 金沢人工知能勉強会 進化的計算と最適化 / Evolutionary computation and optimization(移行済)
第9回 KAIM 金沢人工知能勉強会 進化的計算と最適化 / Evolutionary computation and optimization(移行済)第9回 KAIM 金沢人工知能勉強会 進化的計算と最適化 / Evolutionary computation and optimization(移行済)
第9回 KAIM 金沢人工知能勉強会 進化的計算と最適化 / Evolutionary computation and optimization(移行済)tomitomi3 tomitomi3
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdfKazuaki Ishizaki
 
あなたの心にBridgeSampling
あなたの心にBridgeSamplingあなたの心にBridgeSampling
あなたの心にBridgeSamplingdaiki hojo
 
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践LINE Corporation
 
PsychoPy Builder:モジュールの組み込みと視線計測
PsychoPy Builder:モジュールの組み込みと視線計測PsychoPy Builder:モジュールの組み込みと視線計測
PsychoPy Builder:モジュールの組み込みと視線計測HiroyukiSogo
 
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat ModelsDeep Learning JP
 
3つの「型」で図解する手法
3つの「型」で図解する手法3つの「型」で図解する手法
3つの「型」で図解する手法Hidetoshi Ikeda
 
VimExcelのご紹介
VimExcelのご紹介VimExcelのご紹介
VimExcelのご紹介Xls Vim
 
Rustで3D graphics programming
Rustで3D graphics programmingRustで3D graphics programming
Rustで3D graphics programmingKiyotomoHiroyasu
 
私は如何にして心配するのを止めてPyTorchを愛するようになったか
私は如何にして心配するのを止めてPyTorchを愛するようになったか私は如何にして心配するのを止めてPyTorchを愛するようになったか
私は如何にして心配するのを止めてPyTorchを愛するようになったかYuta Kashino
 

What's hot (20)

最適化計算の概要まとめ
最適化計算の概要まとめ最適化計算の概要まとめ
最適化計算の概要まとめ
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
π計算
π計算π計算
π計算
 
PRML4.3.3
PRML4.3.3PRML4.3.3
PRML4.3.3
 
機械学習システム開発案件の事例紹介
機械学習システム開発案件の事例紹介機械学習システム開発案件の事例紹介
機械学習システム開発案件の事例紹介
 
第10回 配信講義 計算科学技術特論A(2021)
第10回 配信講義 計算科学技術特論A(2021)第10回 配信講義 計算科学技術特論A(2021)
第10回 配信講義 計算科学技術特論A(2021)
 
【Zansa】第17回 ブートストラップ法入門
【Zansa】第17回 ブートストラップ法入門【Zansa】第17回 ブートストラップ法入門
【Zansa】第17回 ブートストラップ法入門
 
第9回 KAIM 金沢人工知能勉強会 進化的計算と最適化 / Evolutionary computation and optimization(移行済)
第9回 KAIM 金沢人工知能勉強会 進化的計算と最適化 / Evolutionary computation and optimization(移行済)第9回 KAIM 金沢人工知能勉強会 進化的計算と最適化 / Evolutionary computation and optimization(移行済)
第9回 KAIM 金沢人工知能勉強会 進化的計算と最適化 / Evolutionary computation and optimization(移行済)
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
 
あなたの心にBridgeSampling
あなたの心にBridgeSamplingあなたの心にBridgeSampling
あなたの心にBridgeSampling
 
CUDAメモ
CUDAメモCUDAメモ
CUDAメモ
 
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
 
CuPy解説
CuPy解説CuPy解説
CuPy解説
 
PsychoPy Builder:モジュールの組み込みと視線計測
PsychoPy Builder:モジュールの組み込みと視線計測PsychoPy Builder:モジュールの組み込みと視線計測
PsychoPy Builder:モジュールの組み込みと視線計測
 
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
 
3つの「型」で図解する手法
3つの「型」で図解する手法3つの「型」で図解する手法
3つの「型」で図解する手法
 
VimExcelのご紹介
VimExcelのご紹介VimExcelのご紹介
VimExcelのご紹介
 
Rustで3D graphics programming
Rustで3D graphics programmingRustで3D graphics programming
Rustで3D graphics programming
 
私は如何にして心配するのを止めてPyTorchを愛するようになったか
私は如何にして心配するのを止めてPyTorchを愛するようになったか私は如何にして心配するのを止めてPyTorchを愛するようになったか
私は如何にして心配するのを止めてPyTorchを愛するようになったか
 

Viewers also liked

【OSCエンタープライズ2015】議事録ドリブンって聞いたことある?SIGNで解決!悩める会議の攻略メソッド
【OSCエンタープライズ2015】議事録ドリブンって聞いたことある?SIGNで解決!悩める会議の攻略メソッド【OSCエンタープライズ2015】議事録ドリブンって聞いたことある?SIGNで解決!悩める会議の攻略メソッド
【OSCエンタープライズ2015】議事録ドリブンって聞いたことある?SIGNで解決!悩める会議の攻略メソッドKyoko Ochiai
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
Chainer meetup20151014
Chainer meetup20151014Chainer meetup20151014
Chainer meetup20151014Jiro Nishitoba
 
Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)Jun-ya Norimatsu
 
A Chainer MeetUp Talk
A Chainer MeetUp TalkA Chainer MeetUp Talk
A Chainer MeetUp TalkYusuke Oda
 
Chainer meetup
Chainer meetupChainer meetup
Chainer meetupkikusu
 
Towards Chainer v1.5
Towards Chainer v1.5Towards Chainer v1.5
Towards Chainer v1.5Seiya Tokui
 
Lighting talk chainer hands on
Lighting talk chainer hands onLighting talk chainer hands on
Lighting talk chainer hands onOgushi Masaya
 
Chainer meetup lt
Chainer meetup ltChainer meetup lt
Chainer meetup ltAce12358
 
Chainer Contribution Guide
Chainer Contribution GuideChainer Contribution Guide
Chainer Contribution GuideKenta Oono
 
PFN Spring Internship Final Report: Autonomous Drive by Deep RL
PFN Spring Internship Final Report: Autonomous Drive by Deep RLPFN Spring Internship Final Report: Autonomous Drive by Deep RL
PFN Spring Internship Final Report: Autonomous Drive by Deep RLNaoto Yoshida
 
ディープラーニングにおける学習の高速化の重要性とその手法
ディープラーニングにおける学習の高速化の重要性とその手法ディープラーニングにおける学習の高速化の重要性とその手法
ディープラーニングにおける学習の高速化の重要性とその手法Yuko Fujiyama
 
Capitalicoでのchainer 1.1 → 1.5 バージョンアップ事例
Capitalicoでのchainer 1.1 → 1.5 バージョンアップ事例Capitalicoでのchainer 1.1 → 1.5 バージョンアップ事例
Capitalicoでのchainer 1.1 → 1.5 バージョンアップ事例Jun-ya Norimatsu
 
ボケるRNNを学習したい (Chainer meetup 01)
ボケるRNNを学習したい (Chainer meetup 01)ボケるRNNを学習したい (Chainer meetup 01)
ボケるRNNを学習したい (Chainer meetup 01)Motoki Sato
 
Chainer Development Plan 2015/12
Chainer Development Plan 2015/12Chainer Development Plan 2015/12
Chainer Development Plan 2015/12Seiya Tokui
 
Chainer入門と最近の機能
Chainer入門と最近の機能Chainer入門と最近の機能
Chainer入門と最近の機能Yuya Unno
 
Introduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainerIntroduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainerRyo Shimizu
 

Viewers also liked (20)

【OSCエンタープライズ2015】議事録ドリブンって聞いたことある?SIGNで解決!悩める会議の攻略メソッド
【OSCエンタープライズ2015】議事録ドリブンって聞いたことある?SIGNで解決!悩める会議の攻略メソッド【OSCエンタープライズ2015】議事録ドリブンって聞いたことある?SIGNで解決!悩める会議の攻略メソッド
【OSCエンタープライズ2015】議事録ドリブンって聞いたことある?SIGNで解決!悩める会議の攻略メソッド
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
llvm入門
llvm入門llvm入門
llvm入門
 
Chainer meetup20151014
Chainer meetup20151014Chainer meetup20151014
Chainer meetup20151014
 
Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)
 
A Chainer MeetUp Talk
A Chainer MeetUp TalkA Chainer MeetUp Talk
A Chainer MeetUp Talk
 
Chainer meetup
Chainer meetupChainer meetup
Chainer meetup
 
LT@Chainer Meetup
LT@Chainer MeetupLT@Chainer Meetup
LT@Chainer Meetup
 
Towards Chainer v1.5
Towards Chainer v1.5Towards Chainer v1.5
Towards Chainer v1.5
 
Lighting talk chainer hands on
Lighting talk chainer hands onLighting talk chainer hands on
Lighting talk chainer hands on
 
Chainer meetup lt
Chainer meetup ltChainer meetup lt
Chainer meetup lt
 
Chainer Contribution Guide
Chainer Contribution GuideChainer Contribution Guide
Chainer Contribution Guide
 
PFN Spring Internship Final Report: Autonomous Drive by Deep RL
PFN Spring Internship Final Report: Autonomous Drive by Deep RLPFN Spring Internship Final Report: Autonomous Drive by Deep RL
PFN Spring Internship Final Report: Autonomous Drive by Deep RL
 
ディープラーニングにおける学習の高速化の重要性とその手法
ディープラーニングにおける学習の高速化の重要性とその手法ディープラーニングにおける学習の高速化の重要性とその手法
ディープラーニングにおける学習の高速化の重要性とその手法
 
Capitalicoでのchainer 1.1 → 1.5 バージョンアップ事例
Capitalicoでのchainer 1.1 → 1.5 バージョンアップ事例Capitalicoでのchainer 1.1 → 1.5 バージョンアップ事例
Capitalicoでのchainer 1.1 → 1.5 バージョンアップ事例
 
ボケるRNNを学習したい (Chainer meetup 01)
ボケるRNNを学習したい (Chainer meetup 01)ボケるRNNを学習したい (Chainer meetup 01)
ボケるRNNを学習したい (Chainer meetup 01)
 
Chainer Development Plan 2015/12
Chainer Development Plan 2015/12Chainer Development Plan 2015/12
Chainer Development Plan 2015/12
 
Chainer入門と最近の機能
Chainer入門と最近の機能Chainer入門と最近の機能
Chainer入門と最近の機能
 
Introduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainerIntroduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainer
 

Similar to きつねさんでもわかるLLVM読書会amagasaki.rb第5章

10分で分かるr言語入門ver2.5
10分で分かるr言語入門ver2.510分で分かるr言語入門ver2.5
10分で分かるr言語入門ver2.5Nobuaki Oshiro
 
2013合同新歓LT
2013合同新歓LT2013合同新歓LT
2013合同新歓LTuecmma
 
Rustのタスクモデルについて
RustのタスクモデルについてRustのタスクモデルについて
Rustのタスクモデルについてzigen
 
Should we write such like plugin or not?
Should we write such like plugin or not?Should we write such like plugin or not?
Should we write such like plugin or not?SATOSHI TAGOMORI
 
プログラミング作法
プログラミング作法プログラミング作法
プログラミング作法Kota Uchida
 
Perl6で遊ぼう
Perl6で遊ぼうPerl6で遊ぼう
Perl6で遊ぼうVienosNotes
 
大(中)規模Java script開発について
大(中)規模Java script開発について大(中)規模Java script開発について
大(中)規模Java script開発についてYuki Tanaka
 

Similar to きつねさんでもわかるLLVM読書会amagasaki.rb第5章 (10)

Scala conf2013
Scala conf2013Scala conf2013
Scala conf2013
 
10分で分かるr言語入門ver2.5
10分で分かるr言語入門ver2.510分で分かるr言語入門ver2.5
10分で分かるr言語入門ver2.5
 
Slimの紹介
Slimの紹介Slimの紹介
Slimの紹介
 
2013合同新歓LT
2013合同新歓LT2013合同新歓LT
2013合同新歓LT
 
Ruby
RubyRuby
Ruby
 
Rustのタスクモデルについて
RustのタスクモデルについてRustのタスクモデルについて
Rustのタスクモデルについて
 
Should we write such like plugin or not?
Should we write such like plugin or not?Should we write such like plugin or not?
Should we write such like plugin or not?
 
プログラミング作法
プログラミング作法プログラミング作法
プログラミング作法
 
Perl6で遊ぼう
Perl6で遊ぼうPerl6で遊ぼう
Perl6で遊ぼう
 
大(中)規模Java script開発について
大(中)規模Java script開発について大(中)規模Java script開発について
大(中)規模Java script開発について
 

きつねさんでもわかるLLVM読書会amagasaki.rb第5章