OSL: A Compiler and Runtime for Data Parallel Python
Yunsup Lee Bryan Catanzaro and Yong‐Jin Kwon
!"#$%&'()'*++,-)%.(/01%
•! 23*4%50%6789%–! :30%;'()'*++,-)%+(/01%0-<(='*)0>%430%;'()'*++0'%4(%5',40%><*1*?10%<(/0%
–!@,)3%;0'A('+*-<0%,>%;(>>,?10%
•! 23*4%50%#7B6789%–!@*'/%4(%/0?=)%C0'-01%<(/0%
•! 2011D%*%1(4%(A%;0(;10%=>0%E;',-4AF>%4(%/0?=)G%
–!H1(?*1%>I-<3'(-,J*4,(-%,>%3*'/%4(%;'()'*+%
–! 9K;1(,4,-)%430%H&"L>%+0+('I%3,0'*'<3I%0M<,0-41I%,>%3*'/%
–!!N!OO%,>%-(4%3,)31I%;'(/=<4,P0%
!"#$%&'()*+%,-./012'34%,5-5**4*%
,-.(-566'7(%#57(05(4%
•! ,+2).7%'8%)'()*+%9-./012'34%
–!:.7;2%)534%2.%<.--+%5=.02%2+948%.-%/41*5-52'.78%
–!>5224-'48%'71*0/4/%
•! ?4%<572%2.%=-'7(%,+2).7;8%9-./012'3'2+%2.%@,A%9-.(-566'7(%
–!B**.<%5-='2-5-+%,+2).7%1./4%2.%=4%'724(-524/%<'2)%)'()%94-C.-65714%80=842%.C%,+2).7%1./4%
–!D.69'*4%2)'8%80=842%.C%,+2).7%1./4%2.%@,A%
–!A84%,+2).7%58%57%460*52.-%C.-%/4=0(('7(%
!"#$%&'(&)**+,($-'./0$
!"#$%&'(&#)*+*)#)*'
,'-./0')1#)&2(%&2'
3!.'
-./0'4)*&)52'
-./0'678'9%:+(5)*'
;+"9<=>?'
!"#$%&'-%=)'
@%*:>5'
+"#$%&'
0&&%#>#)='
+"#$%&'
!"#$%&'#%'-./0'
-%=)'A)&)*>#%*'
-./0'B(&=(&A2'
;+"9<=>?'
-C/D'
/080'
!"#$%&'&(()($*'+,+-+.)/$
•! !"#$%&'(0&''&12$3(-)'/2$&'45,)6-/7$–! "+,+(&'$-8$9,&*:$–! &''&1;$)<*(&+6)=$86$->)$6)<-$/(+=)$
–! 3(-)'/;$&$(+/-$8?$•! 3(-)'0&''&12$)(),)6-2$@=+,A2$@*8/+-+86A2$&'45,)6-/7$
•! B-$>&/$&CC)//$-8$->)$*))'/D$)(),)6-/$
–! &'45,)6-/$;$&$(+/-$8?$&61$-1*)$
•! %)"*#+,%#(0(&E)(/2$&''&12$')=8*2$&'45,)6-/7$–! "+,+(&'$-8$9')=5C):$
–! (&E)(/2$&''&1;$)<*(&+6)=$86$->)$6)<-$/(+=)$–! F)=5C-+86$8*)'&-8'$
•! ')=8*0)(),)6-&2$)(),)6-E7$
•! G8,,5-&-+.)2$&//8C+&-+.) $$
–! &'45,)6-/$;$&$(+/-$8?$&61$-1*)$
!"#$%&'$()*+,-.$
!"#"$%&'!"#$%&(")*"
+"#"$%&'!"#$%'("!*"
,-."!"#$%&'-/-$-01*2"
,-."!"#$%''-/-$-01*2"
)"
!"
+"
)"
!"
+"
!"#$%&(
!"#$%'(
!"#$%&(
!"#$%'(
3/1-45"#"6!"#$%&("!"#$%'7"
%489$-015"#"6:7"
+"#")#$*+,"')("3/1-45("%489$-015*"
,-."!"#$%&'%44%;("-/-$-01("6/-081<7("6=7("%489$-015*2"
,-."!"#$%''%44%;("-/-$-01("6/-081<7("6=7("%489$-015*2"
!"#$%"&'()&*+,!"#$%"&
!"
#$%&'("
!"#$%&
#$%&'(")"#$*&+$,!"#$%-"!."
*$/"!"#$%,$'$0$1(2-"$'$0$1(3.4"
!"
5" 6" 6" 5" 7"'23$'%"
#$%&'(%"
2#8&0$1(%")"9:;"
#$%&'(%")"+2(#$*&+$,'23$'%-"!-"!"#$%-"2#8&0$1(%."
*$/"!"#$%,$'$0$1(2-"$'$0$1(3-"2#8&0$1(%.4"
!"#$%&
!"#$%&'($
!"#$%%&%!"#$%'()*#%+,-#%./*0+-"*%'-1,+%2/*%"*%+,(%345%'()$*+,-./$012$$&%678%#/99"2+#%-*+(292"0(:/2)$%-*.(2(*0(%
$+)$.$3$02$4(564,$0$$(78(2$4(564,$.$
!"#$%'()$975(4-.44.:/$(7(*(,5/$;<(+=<5/$>+'5<?/$;:/$@?/$.4=6*(,5812$
$A.7$B$($('(*+%$+)$C$D$;2$A.7$B$'-*-A.7/$)22);<;=>?<@?1$
$+)$;$D$,(-1,+EF2$A.7$B$'-*-A.7/$)22);<;A>?<@?1$
$+)$C$D$@2$A.7$B$'-*-A.7/$)22);<;?<@=>?1$$+)$@$D$B-:+,EF2$A.7$B$'-*-A.7/$)22);<;?<@A>?1$
$4(564,$A.7$
!"#$%
!"#$C*+2;%%&%!"#$C*+2;%'()*#%(@(0/+(%+,-#%"*%+,(%345D%-.%;"/%$()E(%+,-#%"/+%+,-#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&%%-#%E)$-:%4;+,"*%0":(%+,)+%B"/$:%92":/0(%+,(%#)'(%2(#/$+%FG/+%#$"BH%
'()$G(4,(7-H+@(7812$$4(564,$85(,I+7-H+@(78/$;975(4?/$;?1$
!"#"$%&'&()*++,-%".-/')01-2&')3&$&"1%4)
!"#$%&
'()*%+,&
'(-(+./#0%&
1%2,().3&
45"%#).&
1%2,6+%&
7+#89%),&
'(":9)%&
;()5"#2&
.6//+%..9()&
!),%+*%)9)$&'(),(6+&
7%)%+#-9<%8&
=9$%).(-*%+&
>+9%),%8&=)%+$?&
'(":9)#@()&
'(":9)%A&;(+"#-9<%&
'(),(6+.&
B$& '$#& '$:&
!"#$%&#'()*+%+,-%-&.(
!"
#"
$!"
$#"
%!"
%#"
&!"
&#"
'!"
'#"
()!!"*+%",$-"./0123" 41256"7$!-!",&!"./0123"
!"#$%&'(
)$#*+#,"'(
4849:" *;<" =>9?@A8>B"
$"
$!"
$!!"
$!!!"
$!!!!"
$!!!!!"
;C4D8E" 8F:",&!"./0123" 7",)"./0123" 7<G9",&!"./0123"!"#$%&'(
)$#*+#,"'(
•!";C4D8EH"$"./01"E1I651J"
•!"8F:H"&!"./01"41256"7$!-!"
•!"7"K"LMI016N2H")"./01"O60.15/P6"
•!"7<G9H"&!"./01"41256"7$!-!"
•!"QPM1012RPS"7/JL60T2/P2H""
•!"$!!!U"V62M10"MI6P"210T65"LWMI/P"
•!"$#U"25/X10"MI6P"I6PN"7<G9"
•!"=06J1X/0Y"/Z10I16NH"
•!"7/JLT56R/P["G6M6"J/Z1J1PM"
•!"\7/P2M6PM["]^M"2TSPT_.6PM"
•!"7<G9"7/JLT56R/P"M6Y12"\#"21.`"
TV"X1"JT22".6.I1"
•!";6065515"2.656]T5TMW"T2"S//N"
•!"8]210Z1"&`a#U"
•!"J6U"$`)U"V0/J"L6065515T2J"
•!"/MI10"2L11N^L"V0/J"60.I`"