+ All Categories
Home > Documents > or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

Date post: 30-Dec-2015
Category:
Upload: mavis-cooper
View: 215 times
Download: 1 times
Share this document with a friend
Popular Tags:
28
Transcript
Page 1: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.
Page 2: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

orReducing Interpreter Overhead

Jay FoadDyalog

The Compiler Project

Page 3: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

• Reduce interpreter overhead• Enable high level optimisations

Goals

Page 4: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

loop←{⍵=0:0 ⋄ ∇⍵-1}

mean←{(+⌿⍵)÷≢⍵}

Motivating examples

Page 5: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

Extra parentheses

mean←{(((+)⌿(⍵))÷(≢(⍵)))}

Interpreter overhead

Page 6: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

Blank lines and comments

mean←{ ⍝ Calculate the mean (+⌿⍵)÷≢⍵}

Interpreter overhead

Page 7: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

Local names

mean←{ sum←+⌿⍵ num←≢⍵ sum÷num}

Interpreter overhead

Page 8: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

A B C1 2 31 + 3⊃ ⌽ 3+ / 3⊃ ⍣ ≡

Parsing APL

Page 9: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

Compiling: parse tree

⍵+ ⌿

÷sum num

Page 10: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

0002: 00002004 rel Larg0003: 000069C4 cpy PFUNCTION, rawlst[3] // +⌿0004: 00000545 cpy slot[0], Rarg0005: 00000003 eval0006: 00000444 mov Rarg, slot[0]0007: 00002465 mov slot[1], Rslt0008: 00001F03 eval 0x1F // ≢0009: 00002424 mov Larg, slot[1]000A: 00006044 mov Rarg, Rslt000B: 00000503 eval 0x05 // ÷000C: 00000002 ret

Compiling: bytecode

Page 11: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

Speed of compiled code

ExpressionBefore (ns)

After

(ns)

Factor

mean 1 2 3 4 1966 825 2.38

root 10 1155 772 1.49

easter 2013 13420 9384 1.43

Page 12: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

Global names

compidn←{ base←days 1970 1 1 stamp←⍬⍴2↓⎕FRDCI ⍺ ⍵ base+stamp÷×/1 3/24 60}

Limitations

Page 13: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

Execute ⍎ and system functions

time←{ t←⎕AI r←⍎⍵ ⎕←⎕AI-t r}

Limitations

Page 14: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

Namespace references

run←{ ⍵.f ⍵.x}

Limitations

Page 15: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

Selective assignment

stars←{ t←⍵ ((' '=∊t)/∊t)←'*' t}

Limitations

Page 16: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

easter←{ ⍝ Easter Sunday in year ⍵. G←1+19|⍵ ⍝ year "golden number" in 19-year Metonic cycle. C←1+⌊⍵÷100 ⍝ Century: for example 1984 → 20th century.

X←¯12+⌊C×3÷4 ⍝ number of years in which leap year omitted. Z←¯5+⌊(5+8×C)÷25 ⍝ synchronises Easter with moon's orbit.

S←(⌊(5×⍵)÷4)-X+10 ⍝ find Sunday. E←30|(11×G)+20+Z-X ⍝ Epact. F←E+(E=24)∨(E=25)^G>11 ⍝ (when full moon occurs).

N←(30×F>23)+44-F ⍝ find full moon. N←N+7-7|S+N ⍝ advance to Sunday.

M←3+N>31 ⍝ month: March or April. D←N-31×N>31 ⍝ day within month. ↑10000 100 1+.×⍵ M D ⍝ yyyymmdd.}

Gallery

Page 17: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

packU←{⎕IO←0 ⍝ Unique packer. cmp←{ u←∪,⍵ (⍴⍵)u(u⍳,⍵) } exp←{ (0⊃⍵)⍴(1⊃⍵)[2⊃⍵] } ⍺←1 ⋄ ⍺:cmp ⍵ ⋄ exp ⍵}

Gallery: local dfns

Page 18: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

• Disabled off by default• Enable auto-compilation: 400⌶2• Compile specified functions: 2(400⌶)'foo' 2(400⌶)⎕NL 3

User interface

Page 19: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

⍝ Surface area of k-sphere.ksphere←{ n←⍺+1 pi←(○1)*n÷2 n×(⍵*⍺)×pi÷!n÷2}

High level optimisations

Page 20: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

f←{ 1+≢⍵}

High level optimisations

simple scalarnumericintegerpositive

Page 21: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

f←{ +/∧\' '=⍵ }

g←{ +/∧\⍵=' ' }

High level optimisations

Page 22: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

• In Version 14.0• Disabled by default

When can I get it?

Page 23: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

• Think in a pure functional way• Use dfns• Show us your code!

What can I do now?

Page 24: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

That’s all, folks!

Page 25: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

)load dfns.dws ≢⎕NL 3197 +/≢∘⎕CR¨↓⎕NL 34562 iscompiled←1∘(400⌶) compile←2∘(400⌶) +/iscompiled ⎕NL 30 compile time ⎕NL 300.00 +/iscompiled ⎕NL 371

Speed of compilation

Page 26: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

∇ r←mean y;sum;num sum←+/y num←≢y r←sum÷num∇

Functional tradfns

Page 27: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

Precise error locations

Can’t suspend in compiled code

Debugging compiled code

Page 28: or Reducing Interpreter Overhead Jay Foad Dyalog The Compiler Project.

f←{ :Function foo foo 1+⍵}

Declarations


Recommended