開發紀錄(B)
 

目標 

加入多種pattern來改善Brainf*ck JIT compiler的執行效能
目前採用的最佳化技巧 : 將連續且重複的指令合併,減少instruction數量
  • 多個 > 或 <
  • ex : inc PTR -> add PTR, N  (N為>連續數量)
  • 多個 + 或 -
  • ex : inc byte [PTR] -> add byte [PTR], N  (N為+連續數量)
  • [-]
  • and byte [PTR], 0
  • [>+<-]
 

Brainf*ck

由八種符號所構成的 Turing complete程式語言
Brainkf*ck一開始會有一個array並且初始化為0,並有一個pointer指向該array起始位置
 

Performance 

  • origin
progs/awib.b             GOOD        86.7ms
progs/mandelbrot.b       GOOD        3263.8ms
progs/hanoi.b            GOOD        8556.4ms
  •  
  • pattern 1 : 連續 ">" or "<"
progs/awib.b             GOOD    74.9ms
progs/mandelbrot.b       GOOD    1208.5ms
progs/hanoi.b            GOOD    7608.2ms
 
  • pattern 2 : 連續 "+" or "-"
progs/awib.b             GOOD    48.0ms
progs/mandelbrot.b       GOOD    3240.9ms
progs/hanoi.b            GOOD    4124.6ms
 
驗證
  • 我另外寫了一個程式來計算套用pattern 1和pattern 2所減少的instruction數
  • awib.b 
  • 符合pattern 1次數 : 975 未經優化所需instruction數 : 2870
  • 符合pattern 2次數 : 2912 未經優化所需instruction數 : 15658
  • ->使用pattern 2所減少的instruction數大於pattern 1,因此執行時間上的確是pattern 2較短
  •  
  • mandelbrot.b
  • 符合pattern 1次數 : 1373 未經優化所需instruction數 : 8401
  • 符合pattern 2次數 : 29 未經優化所需instruction數 : 252
  • ->pattern 2優化instruction量很少,因此在執行時間上origin和pattern 2是差不多的
  •  
  • hanoi.b
  • 符合pattern 1次數 : 4730 未經優化所需instruction數 : 33429
  • 符合pattern 2次數 : 321 未經優化所需instruction數 : 7229
  • ->為一弔詭的是hanoi.b的pattern 1,明明減少的instruction數極多但在執行時間上卻沒有相對應的減少