Upgrade to Pro — share decks privately, control downloads, hide ads and more …

超並列高速実行処理系 Hastega (ヘイスガ) ~ Lonestar ElixirConf 凱旋帰国

超並列高速実行処理系 Hastega (ヘイスガ) ~ Lonestar ElixirConf 凱旋帰国

Erlang & Elixir Fest 2019
山崎 進

Qiitaで連載され,論文も複数本数発表され,さらには Lonestar ElixirConf でセンセーショナルな世界デビューを果たした超並列高速実行処理系 Hastega (ヘイスガ) の凱旋帰国講演です!

しかもおそらく本イベントのある6月までには,ファーストリリースバージョンを公開できるか,秒読みに入るのではないかと予測しています。

Hastega は,可読性に優れる Enum.map とパイプライン演算子を組み合わせた有限長のリスト処理を,SIMD命令やマルチコア,GPUを駆動するネイティブコードに変換して高速実行する処理系です。プロトタイプ実装では,純粋なElixirコードの4〜8倍にも及ぶ実行速度向上を達成しています。

本発表では,瞬時にわかる Hastega プログラミングのやり方を紹介し,動作原理や内部構造を紹介し,将来展望を示します。厨二病の血が騒ぐ発表に仕上げていきたいと思います。

Susumu Yamazaki (ZACKY)

June 01, 2019
Tweet

More Decks by Susumu Yamazaki (ZACKY)

Other Decks in Programming

Transcript

  1. ࣗݾ঺հ w 5XJUUFS'BDFCPPL(JU)VC(.BJM
 ͢΂ͯ[BDLZ w ๺۝भࢢཱେֶࠃࡍ؀ڥ޻ֶ෦।ڭत w &MJYJSਪ͠GVLVPLBFY)BTUFHB w φοδࣾձ࣮૷ݚڀηϯλʔηϯλʔ௕

    w ֶੜɾब৬ࢧԉ୲౰ w 1FSTPOBM7JTJPO$P$SFBUPS w ,,4)J'5 w ٕज़૬ஊɼڞಉݚڀґཔɼਐ࿏૬ஊɼ
 ద৬਍அͳͲɼਵ࣌ड෇·͢   ˜4VTVNV:BNB[BLJ
  2. )BTUFHB ϔΠεΨ w ΢ΣϒΞϓϦέʔγϣϯͰ༻͍Δ
 ը૾ॲཧɾػցֶश౳Λ w &MJYJSͰ؆ܿʹهड़ͯ͠ w αʔόʔɼ΢ΣϒΫϥΠΞϯτɼ
 Τοδ্ͷ$16(16ʹෛՙ෼ࢄ


    ͤ͞ͳ͕Βߴ଎ʹฒྻ࣮ߦͤ͞Δ
 ͜ͱΛ໨ࢦ͢ॲཧܥ w ໊শ͸''༝དྷ
 ஥ؒΛߴ଎Խͤ͞Δຐ๏  w ৄࡉ͸ޙड़   ˜4VTVNV:BNB[BLJ
  3. Hastega: Challenge for GPGPU on Elixir Susumu Yamazaki (ZACKY) Associate

    Professor at Univ. of Kitakyushu Adviser at fukuoka.ex
  4. Hastega • It’s a magic!! • the highest evolved magic

    to accelerate our party in Final Fantasy!
 (Stronger than Haste) • It will be the highest evolved technology to accelerate our machines in the Elixir ecosystem! It’s inspired by Flow
  5. 4-8x faster than Elixir using Flow! and also faster than

    P-map
 (Parallel map) ↑ Slower ↓ Faster Flow
  6. Why is Enum.map Zen? ˜4UFQIBOF%"MV • Zen is the essential

    beauty • The essential of programming is data transformation • Enum.map describes only data transformation list = 1..1_000_000 |> Enum.to_list list 
 |> Enum.map(&foo(&1))
 |> Enum.map(&bar(&1))
  7. 1..1_000_000 
 |> Enum.map(&foo(&1))
 |> Enum.map(&bar(&1)) • We propose to

    call it the Elixir Zen style to write in Enum.map • It is a good programming custom • Because it’s more readable and maintainable The Elixir Zen style
  8. In Elixir on Erlang VM, the Elixir Zen style is

    20 percents slower than recursive call list = 1..1_000_000 |> Enum.to_list list 
 |> Enum.map(&foo(&1))
 |> Enum.map(&bar(&1)) list
 |> func()
 
 def func( [] ), do: [] def func( [ head | tail ] ) do
 [ head |> foo |> bar 
 | func(tail) ]
 end 6msec ↑ Slower ↓ Faster Performance Evaluation
  9. • make the Elixir Zen styled code faster • by

    casting the spell of it on Samurai to be berserk • that is, to be transformed into the fastest native code, 
 using all computing resources, • not only multi-core CPUs (with SIMD instructions)
 but also GPUs Hastaga will… We feel it Wabi-Sabi
  10. I’m sorry, but the 1st practical use version of Hastega

    will be released before Summer, 2019 m(_ _)m
  11. ͔ΘΓʹίΞ਺͕૿Ճ w ೥Ҏ߱ͷϓϩηοαͷਐԽ w ºΫϩοΫप೾਺ w ˓ίΞ਺   ˜4VTVNV:BNB[BLJ

    *OUFM$PSF
 &YUSFNF9  ΫϩοΫ ()[ ίΞ਺  *OUFM$PSFJ
 9&  ΫϩοΫ ()[ ίΞ਺ 
  12. )BTUFHBͷݪཧ   ˜4VTVNV:BNB[BLJ @@ c&OVNNBQ .GPP  
 c&OVNNBQ

    .CBS  
 
 EFGNPEVMF.EP EFGGPP O EPO  EFGCBS O EPO  FOE &MJYJS;FO4UZMF
 &OVNNBQελΠϧ @@LFSOFMWPJEDBMD  @@HMPCBMMPOH JOQVU  @@HMPCBMMPOH PVUQVU \ TJ[F@UJHFU@HMPCBM@JE   MPOHUFNQJOQVU<J> UFNQGPP UFNQ  UFNQCBS UFNQ  PVUQVU<J>UFNQ ^ 0QFO$-
 Χʔωϧ෦ w ࠨͷίʔυ͸  ฒྻͷՄೳੑ͕͋Δ w ࠨͷίʔυ͔Βӈͷίʔυ΁ػցతʹม׵Ͱ͖Δ w ࠷৽(16ͷ Ҏ্ͷ4*.%ίΞͰฒྻ࣮ߦՄೳ
  13. )BTUFHBͷίʔυྫ   ˜4VTVNV:BNB[BLJ EFGNPEVMF)EP SFRVJSF)BTUFHB JNQPSU)BTUFHB EFGIBTUFHBEP EFGGVOD MJTU

    EP MJTU c&OVNNBQ   
 c&OVNNBQ    FOE IBTUFHBTUVC FOE FOE w SFRVJSF)BTUFHBͰ)BTUFHBΛಡࠐΈ w JNQPSU)BTUFHBͰϞδϡʔϧ໊Λ෇ه
 ͤͣʹEFGIBTUFHB΍IBTUFHBTUVC͕
 ར༻Ͱ͖Δ w EFGIBTUFHBEPʜFOEͰʜͷίʔυΛ
 ॲཧܥʹಡࠐΉ w IBTUFHBTUVCͰίʔυੜ੒Λߦ͏
  14. /FSWFT w &MJYJSΛ*P5૊ࠐΈγεςϜʹ ಋೖ͢ΔιϦϡʔγϣϯ w -POFTUBS&MJYJS$POGͰ͸ &MJYJS1IPFOJYͱର౳ͳଘࡏͱ͠ ͯ঺հ͞Ε͍ͯͨ w ,FZOPUFຊ


    1SFTFOUBUJPOຊ
 5SBJOJOHຊ
 -5ຊ w ৄ͘͠͸ߴ੉ઌੜͷൃදΛָ͠Έ ʹ͍ͯͩ͘͠͞ʂ   ˜4VTVNV:BNB[BLJ IUUQTZPVUVCF*U*WOEU['.
  15. -VODIJTPEF w ೔໨ͷϥϯνλΠϜʹ
 ߨԋऀઐ༻ͷ෦԰Ͱٞ࿦ͨ͠
 ༷ࢠΛऩ࿥ w &MJYJS1IPFOJY/FSWFTͷ
 ະདྷʹ͍ͭͯޠΓ߹͏ w )BTUFHBʹ͍ͭͯ΋Ұੜݒ໋

    ͠Ό΂Γ·ͨ͠ w ࠓɼฉ͍ͯ΋ɼ൒෼͘Β͍͠ ͔ฉ͖औΕͳ͍ɻɻɻ   ˜4VTVNV:BNB[BLJ IUUQTQPEDBTUTNBSUMPHJDJPTQFDJBMMPOFTUBSFMJYJS
  16. &MJYJSOFYU5IF3JWFS w ٕज़ίϛϡχςΟͷਐาͷྺ࢙Λ
 େՏͷྲྀΕʹͨͱ͑Δ w ্ྲྀ͔ΒԼྲྀʹྲྀΕΔʹͭΕͯ
 ίϛϡχςΟͷ͋Γํ͕ม࣭͢Δ w ίϛϡχςΟʹͲ͏ؔΘΔ΂͖͔ w

    ίϛϡχςΟ΁ฦ͢ɼߩݙ͢Δ w ʮ7PUF౤ථͤΑʯ w ʮ௨աّྱʯతηογϣϯ w ࠷΋ݟΔ΂͖ϓϨθϯςʔγϣϯ   ˜4VTVNV:BNB[BLJ IUUQTZPVUVCF,8S81H*
  17. &SMBOH&DPTZTUFN'PVOEBUJPO w &MJYJSͷ࡞ऀ+PTÉ7BMJNͷ
 ,FZOPUFຊ໨ ຊ໨΋ݟͯͶ  w &MJYJSOFYU͔ΒͷྲྀΕΛड͚
 &MJYJSͷ฼ମͰ͋Δ&SMBOHͱ
 Ͳ͏͍͏ؔ܎ੑΛ΋͔ͭʁ


    ʹ͍ͭͯ+PTÉ͔ΒޠΒΕͨ w &SMBOH&DPTZTUFN'PVOEBUJPO ʹՃೖͯ͠ʮ7PUF౤ථʯͯ͠
 ΄͍͠ͱݺͼ͔͚ͨ w &SMBOH΁ͷϦεϖΫτΛ෷͍ɼ
 &MJYJS͔Β୅දΛग़ͦ͏ͱ͍͏ಈ͖   ˜4VTVNV:BNB[BLJ IUUQTZPVUVCFR$"2V51P.
  18. &MJYJS$POG64 ݄೔ʙ೔ w )BTUFHBͷൃදΛ͠·͢ʂ w ৽ͨʹݚڀ։ൃͨ͠৽ٕज़Λ ൃද͠·͢ʂ w ϓϩάϥϜ͸੝Γͩ͘͞Μ w

    ΈΜͳͰߦ͜͏Αʂ w ੈքͷைྲྀΛײ͡Α͏ʂ   ˜4VTVNV:BNB[BLJ IUUQTFMJYJSDPOGDPNTQFBLFST
  19. ݚڀʹ͝ڠྗ͍ͩ͘͞ʂ w ͞ΒͳΔίʔυ࠷దԽͷݚڀʹඞཁͳ࣮ߦ࣌৘ใΛऩू͢ΔͨΊͷϓϩϑΝΠϥ Λ೥౓தʹ։ൃ͢Δ༧ఆͰ͢ w ऩू͢Δ৘ใͷྫ
 $16ͷछྨϝϞϦɾΩϟογϡϝϞϦ༰ྔϦεταΠζɾཁૉͷܕ
 ϓϩηε਺ΠςϨʔγϣϯதίʔυྔ&MJYJS;FOελΠϧίʔυͷׂ߹ͳͲ w Ͱ͖Ε͹࣮ӡ༻ʹ͍ۙ৘ใΛऩू͍ͨ͠ͱߟ͍͑ͯ·͢

    w ࢲୡͷνʔϜ͚ͩͰσʔλΛಠ઎͢ΔΘ͚Ͱ͸ͳ͘ɼ౷ܭॲཧ্ͨ͠Ͱɼ
 اۀ໊ɾݸਓ໊౳Λ໌͔ͣ͞ʹɼݚڀऀ޲͚ʹσʔλఏڙ͍ͨ͠ͱߟ͍͑ͯ·͢ w ͝ڠྗ͍͚ͨͩΔاۀɾݸਓͷํ͸ɼ͝࿈བྷ͍ͩ͘͞ʂ
 ࢁ࡚ਐ[BDLZ!LJUBLZVVBDKQ 63 ˜4VTVNV:BNB[BLJ