SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
Brainfuck interpreter




  新竹碼農 2013/03/07
   NCTU CS xatier
實驗目標
●   觀察不同的優化影響
●   逐步改善 brainfuck virtual machine 實作
git
●   全專案使用 git 管理
●   不同 branch 代表不同優化階段
●   Open sourced on github
    –   https://github.com/xatier/brainfuck-tools
    –   https://github.com/xatier/brainfuck-bench
Brainfuck compiler
●   The Brainf*ck Compiler Suite (by Clifford Wolf)
    –   http://www.clifford.at/bfcpu/bfcomp.html
●   components
    –   bfa   The assembler
    –   bfc   The compiler
    –   bfrun Runtime
●   compile / assemble / run
    –   ./bfc < hanoi.bfc > hanoi.bfa
    –   ./bfa < hanoi.bfa > hanoi.bf
    –   ./bfrun hanoi.bf
欣賞一下美麗的 towers of hanoi
Mandelbrot set
basic
●   最簡單的 interpreter
●   根據語言定義逐步翻譯、解釋 brainfuck 程式
●   Keep it Simple, Stupid (?)
●   Mandelbrot test → 3min … Orz
loop
●   透過分析 brainfuck 程式的 loop
●   改以遞迴方式執行 '[ xxx ]' 這樣的 pattern
●   Mandelbrot test → 30 sec
compact
●   +++ 、 ------ 、 <<<<< 、 >>>>
●   重複的操作可以被壓縮
●   ++*ptr
    –   *ptr += ptr->value
●   30sec → 10sec
ZERO
●   [-]
●   while (*ptr)
      --*ptr;
●   等價於 *ptr = 0;
Another
●   不只 >>>> 和 ++++ 等 pattern 可以作
    compact
●   其實 >>><<<><>>>> 或是 +++----+-+++ 這樣的
    冗於 pattern 也可以壓縮
●   於 code-gen 生出來的 brainfuck code 中較
    常出現
●   bfc
●   效果?
benchmark
       12000




       10000




        8000


                                                              mandelbrot.b
        6000                                                  hanoi.bf
time




                                                              loops.bf
                                                              bench.bf

        4000




        2000




          0
               basic   loop         compact   zero   master

                                git branch
log10(t*10)
6




5




4


                                               mandelbrot.b
                                               hanoi.bf
3                                              loops.bf
                                               bench.bf



2




1




0
    basic   loop     compact   zero   master
Basic 太慢了我們略過 XD
35




30




25




20                                       mandelbrot.b
                                         hanoi.bf
                                         loops.bf
                                         bench.bf
15




10




 5




 0
     loop      compact   zero   master
仔細比較後面三筆測資
16



14



12



10

                                        hanoi.bf
 8                                      loops.bf
                                        bench.bf


 6



 4



 2



 0
     loop     compact   zero   master
剛剛的結果
與其他實作相比
14




12




10




 8

                                                                                                                                                    mandelbrot.b

 6




 4




 2




 0
     ./bf/bf-git/int   ./int/bff/bff   ./int/vff/vff6   ./jit/jit/jit   ./jit/fast-bf/bf-vm-opt   ./jit/fast-bf/bf-jit   ./jit/fast-bf/bf-jit-opt
結論
●   若找出真正拖累效能的瓶頸,其表現改善有機會是
    指數等級的變化!
●   對於各種優化,不同測試樣本的特性,可能得到的
    效果不盡然都是進步的
    –   有機會開了某個優化後反而變得比較慢
●   手寫代碼 VS code-gen 生成代碼
    –   手寫代碼優化 ( 可能 ) 效果有限
●   藉由研究優化分析 code-gen 結果,可以改善
    compiler 實作,幫助生成更好的 brainfuck 代碼

Contenu connexe

En vedette

En vedette (11)

Learn you a Brainfuck for great good!
Learn you a Brainfuck for great good!Learn you a Brainfuck for great good!
Learn you a Brainfuck for great good!
 
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみたMTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
 
brainfuckであそぼう #lldiver LT資料
brainfuckであそぼう #lldiver LT資料brainfuckであそぼう #lldiver LT資料
brainfuckであそぼう #lldiver LT資料
 
Functional Pearl + Brainfuck
Functional Pearl + BrainfuckFunctional Pearl + Brainfuck
Functional Pearl + Brainfuck
 
Rubyで作る奇妙なプログラミング言語
Rubyで作る奇妙なプログラミング言語Rubyで作る奇妙なプログラミング言語
Rubyで作る奇妙なプログラミング言語
 
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
 
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
 
BFmeta
BFmetaBFmeta
BFmeta
 
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
 
ライフゲームでプログラミング
ライフゲームでプログラミングライフゲームでプログラミング
ライフゲームでプログラミング
 
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
 

Similaire à Brainfuck interpreter 分析新竹碼農0307 (6)

Intro to svn
Intro to svnIntro to svn
Intro to svn
 
GIT實務操作與理論
GIT實務操作與理論GIT實務操作與理論
GIT實務操作與理論
 
C++工程实践
C++工程实践C++工程实践
C++工程实践
 
用Raspberry PI學Linux驅動程式
用Raspberry PI學Linux驅動程式用Raspberry PI學Linux驅動程式
用Raspberry PI學Linux驅動程式
 
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
 
COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽
 

Plus de Xatierlike Lee (8)

Topic 02 a - [misc 2] how to solve problems (xatier)
Topic 02 a  -  [misc 2] how to solve problems (xatier)Topic 02 a  -  [misc 2] how to solve problems (xatier)
Topic 02 a - [misc 2] how to solve problems (xatier)
 
2013 社團迎新課程長簡報
2013 社團迎新課程長簡報2013 社團迎新課程長簡報
2013 社團迎新課程長簡報
 
[NCTU] [CCCA] vim rocks
[NCTU] [CCCA] vim rocks[NCTU] [CCCA] vim rocks
[NCTU] [CCCA] vim rocks
 
[NCTU] [CCCA] Network Security II
[NCTU] [CCCA] Network Security II[NCTU] [CCCA] Network Security II
[NCTU] [CCCA] Network Security II
 
[NCTU] [CCCA] Network Security I
[NCTU] [CCCA] Network Security I[NCTU] [CCCA] Network Security I
[NCTU] [CCCA] Network Security I
 
Violent python
Violent pythonViolent python
Violent python
 
Kick my mouse away
Kick my mouse awayKick my mouse away
Kick my mouse away
 
Tcfsh bootcamp day2
 Tcfsh bootcamp day2 Tcfsh bootcamp day2
Tcfsh bootcamp day2
 

Brainfuck interpreter 分析新竹碼農0307

  • 1. Brainfuck interpreter 新竹碼農 2013/03/07 NCTU CS xatier
  • 2. 實驗目標 ● 觀察不同的優化影響 ● 逐步改善 brainfuck virtual machine 實作
  • 3. git ● 全專案使用 git 管理 ● 不同 branch 代表不同優化階段 ● Open sourced on github – https://github.com/xatier/brainfuck-tools – https://github.com/xatier/brainfuck-bench
  • 4. Brainfuck compiler ● The Brainf*ck Compiler Suite (by Clifford Wolf) – http://www.clifford.at/bfcpu/bfcomp.html ● components – bfa The assembler – bfc The compiler – bfrun Runtime ● compile / assemble / run – ./bfc < hanoi.bfc > hanoi.bfa – ./bfa < hanoi.bfa > hanoi.bf – ./bfrun hanoi.bf
  • 7. basic ● 最簡單的 interpreter ● 根據語言定義逐步翻譯、解釋 brainfuck 程式 ● Keep it Simple, Stupid (?) ● Mandelbrot test → 3min … Orz
  • 8. loop ● 透過分析 brainfuck 程式的 loop ● 改以遞迴方式執行 '[ xxx ]' 這樣的 pattern ● Mandelbrot test → 30 sec
  • 9. compact ● +++ 、 ------ 、 <<<<< 、 >>>> ● 重複的操作可以被壓縮 ● ++*ptr – *ptr += ptr->value ● 30sec → 10sec
  • 10. ZERO ● [-] ● while (*ptr) --*ptr; ● 等價於 *ptr = 0;
  • 11. Another ● 不只 >>>> 和 ++++ 等 pattern 可以作 compact ● 其實 >>><<<><>>>> 或是 +++----+-+++ 這樣的 冗於 pattern 也可以壓縮 ● 於 code-gen 生出來的 brainfuck code 中較 常出現 ● bfc ● 效果?
  • 12. benchmark 12000 10000 8000 mandelbrot.b 6000 hanoi.bf time loops.bf bench.bf 4000 2000 0 basic loop compact zero master git branch
  • 13. log10(t*10) 6 5 4 mandelbrot.b hanoi.bf 3 loops.bf bench.bf 2 1 0 basic loop compact zero master
  • 14. Basic 太慢了我們略過 XD 35 30 25 20 mandelbrot.b hanoi.bf loops.bf bench.bf 15 10 5 0 loop compact zero master
  • 15. 仔細比較後面三筆測資 16 14 12 10 hanoi.bf 8 loops.bf bench.bf 6 4 2 0 loop compact zero master
  • 17. 與其他實作相比 14 12 10 8 mandelbrot.b 6 4 2 0 ./bf/bf-git/int ./int/bff/bff ./int/vff/vff6 ./jit/jit/jit ./jit/fast-bf/bf-vm-opt ./jit/fast-bf/bf-jit ./jit/fast-bf/bf-jit-opt
  • 18. 結論 ● 若找出真正拖累效能的瓶頸,其表現改善有機會是 指數等級的變化! ● 對於各種優化,不同測試樣本的特性,可能得到的 效果不盡然都是進步的 – 有機會開了某個優化後反而變得比較慢 ● 手寫代碼 VS code-gen 生成代碼 – 手寫代碼優化 ( 可能 ) 效果有限 ● 藉由研究優化分析 code-gen 結果,可以改善 compiler 實作,幫助生成更好的 brainfuck 代碼