Elixir/Phoenix/Nervesの最新動向と Hastega 改め Pelemay を 中核とする今後の研究開発方針

Elixir/Phoenix/Nervesの最新動向と Hastega 改め Pelemay を 中核とする今後の研究開発方針

第5回WSA研究会発表資料

83722380372c00bd75ac920f2089f6aa?s=128

Susumu Yamazaki (ZACKY)

September 28, 2019
Tweet

Transcript

  1. &MJYJS1IPFOJY/FSWFTͷ࠷৽ಈ޲ͱ )BTUFHBվΊ1FMFNBZΛ த֩ͱ͢Δࠓޙͷݚڀ։ൃํ਑ ๺۝भࢢཱେֶɹࢁ࡚ਐ 1 ˜4VTVNV:BNB[BLJ

  2. ຊൃද֩৺෦෼ ߏ૝ਤ ͸$0/'*%&/5*"-Ͱ͢ ֩৺෦෼ʹ͍ͭͯ͸ࢿྉΛެ։͢Δ༧ఆͳ͠Ͱ͢
 ֩৺෦෼ͷࣸਅɾ4/4֦ࢄ౳΋͝ԕྀ͍ͩ͘͞ લ࠲෦෼ʹ͍ͭͯ͸ɼࣸਅɾ4/4֦ࢄ0,Ͱ͢ 2 ˜4VTVNV:BNB[BLJ

  3. ࣗݾ঺հ w ࢁ࡚ਐ ΍·͖͟͢͢Ή  w ๺۝भࢢཱେֶࠃࡍ؀ڥ޻ֶ෦।ڭत w φοδࣾձ࣮૷ݚڀηϯλʔηϯλʔ௕ w

    ֶੜɾब৬ࢧԉ୲౰ w 1FSTPOBM7JTJPO$P$SFBUPS w ,,4)J'5 w &MJYJSਪ͠GVLVPLBFY1FMFNBZ w ٕज़૬ஊɼڞಉݚڀґཔɼਐ࿏૬ஊɼ
 ద৬਍அͳͲɼਵ࣌ड෇·͢   ˜4VTVNV:BNB[BLJ
  4. 1 Elixir、マイナー言語だけど、地味に生活を支えてます &MJYJSͷ࠾༻ࣄྫ 4 ˜4VTVNV:BNB[BLJ

  5. &MJYJS ΤϦΫαʔ 
 1FMFNBZ ϖϨϝΠ 
 ͕ٻΊΒΕΔഎܠͱ͸ʁ 5 ˜4VTVNV:BNB[BLJ

  6. ৘ใྔരൃ ೥ʹσʔλͷ૯ྔ͕θλόΠτ ೥ʹθλόΠτʹୡ͢ΔݟࠐΈ 6 ˜4VTVNV:BNB[BLJ

  7. ৘ใྔരൃ ೥ʹຖ݄ΤΫαόΠτ૿Ճ ೥ʹຖ݄ΤΫαόΠτ૿ՃݟࠐΈ ৘ใͷ૿Ճྔ͕Ճ଎ 7 ˜4VTVNV:BNB[BLJ

  8. (Ͱ௨৴଎౓͸޲্͢Δ w (CQTΛ௒͑Δ௨৴ /55υίϞެࣜ  w (CQTΛ௒͑Δ௨৴Λୡ੒࣮ͨ͠ݧ݁Ռ͋Γ ӳޠ 8JLJQFEJB 

    w (ΑΓߴ͍प೾਺Λ༻͍Δ͜ͱ͔Βɼج஍ہ͔Βͷ࠷େ ڑ཭͕୹͍
 ˠج஍ہΛߴີ౓ʹઃஔ͠ͳ͍ͱ͍͚ͳ͍ w NTఔ౓ͷϨΠςϯγ ӳޠ8JLJQFEJB 8 ˜4VTVNV:BNB[BLJ
  9. ܭࢉೳྗ͕௥͍͔ͭͳ͍ )FOOFTZ1BUUFSTPO
 ೥ʹ$16ΫϩοΫप೾਺͸಄ଧͪʹ 9 ˜4VTVNV:BNB[BLJ

  10. ͳͥΫϩοΫप೾਺Λ৳͹ͤͳ͍͔ʁ w ΫϩοΫप೾਺ͷ૿େ͸ফඅిྗͱൃ೤ྔͷ૿େΛট͘ w ిݯڙڅྔͱ೤఻ಋ཰͓Αͼྫྷ٫ೳྗ͕௥͍͔ͭͳ͍ w ʙ()[ఔ౓ͰৗԹͰ҆ఆಈ࡞͢ΔݶքΛܴ͍͑ͯΔ w ڝٕ༻ΦʔόʔΫϩοΫͰ͸ӷମ஠ૉ౳ʹਁ͚Δ౳ʹ ΑΓ()[Ҏ্Ͱಈ࡞͍ͤͯ͞Δ

    w ௨ৗͷ1$΍αʔόʔͰ͸ৗԹՔಇͰ͖Δ͜ͱ͕ཁ݅ 10 ˜4VTVNV:BNB[BLJ
  11. ͔ΘΓʹίΞ਺͕૿Ճ w ೥Ҏ߱ͷϓϩηοαͷਐԽ w ºΫϩοΫप೾਺ w ˓ίΞ਺   ˜4VTVNV:BNB[BLJ

    *OUFM$PSF
 &YUSFNF9  $MPDL ()[ PG$PSFT  *OUFM$PSFJ
 9&  $MPDL ()[ PG$PSFT 
  12. (16 w࠷৽(16͸
 ()[Ҏ্ͷ
 ΫϩοΫप೾਺
  Ҏ্ͷ4*.%ίΞ

  13. ,JMPDPSF w .*.%ํࣜίΞ DPSFT  w ϝϞϦϞδϡʔϧ NFNPSZ NPEVMFT 

    w ONϓϩηεϧʔϧ QSPDFTTSVMF  w ࠷େ()[ 7  NBYJNVN  w 7࣌()[N8
 Q+໋ྩ MPXFOFSHZ  w *OUFMJ΍/7*%*"(16ͱൺ΂ɼ 7࣌εϧʔϓοτഒҎ্ɼ
 ΤωϧΪʔޮ཰ഒҎ্   ˜4VTVNV:BNB[BLJ B. Bohnenstiehl et al., "KiloCore: A 32-nm 1000-Processor Computational Array," in IEEE Journal of Solid-State Circuits, vol. 52, no. 4, pp. 891-902, April 2017.
  14. 5IF$FSFCSBT8BGFS4DBMF&OHJOF 84& w ΢ΣϋʔαΠζͷνοϓ w ஹݸͷτϥϯδελ਺ w ล͕NN w (#ͷΦϯνοϓϝϞϦ

    POUJQNFNPSJFT  w ສίΞ DPSFT  w ফඅిྗL8   ˜4VTVNV:BNB[BLJ © 2019 Cerebras systems.
  15. ࠓޙͷ൒ಋମτϨϯυ w ϝϞϦͷߴ଎Խ͕ϓϩηοαͷߴ଎Խʹ௥͍͍͍ͭͯͳ͍ w ίΞ਺͸ࠓޙ΋૿େ͠ଓ͚Δ w ൒ಋମϓϩηεඍࡉԽ͸ݶքΛܴ͑ͭͭ͋Δ w ଞͷ֤छूੵٕज़ʹΑΓճ࿏ن໛͸౰෼૿େͷ༨஍͕͋Δ w

    ճ࿏௕͕ࠓ·ͰҎ্ʹ௕͘ͳΔ w ࠓ·ͰҎ্ʹϝϞϦΞΫηεͱޫ଎͕཯଎ʹͳΔ w ڞ༗ϝϞϦিಥɼϑΥϯɾϊΠϚϯɾϘτϧωοΫ w ճ࿏શମͰΫϩοΫΛಉظͤ͞Δ͜ͱ͕ෆՄೳʹ w ڞ༗ܕΞʔΩςΫνϟΑΓ΋෼ࢄܕΞʔΩςΫνϟ༏Ґ 15 ˜4VTVNV:BNB[BLJ
  16. ৘ใྔ૿େʴ௨৴଎౓޲্
 ˠٻΊΒΕΔܭࢉྔ૿େ ΫϩοΫप೾਺৳ͼ೰ΈʴίΞ਺૿େ
 ˠܭࢉྔΛ૿΍͢ʹ͸ฒྻॲཧ͕ඞཁ 16 ˜4VTVNV:BNB[BLJ

  17. Ͱ΋ฒྻॲཧΛॻ͘ͷ͸
 ͚ͬ͜͏໘౗Ͱ͢ΑͶʁ 17 ˜4VTVNV:BNB[BLJ

  18. &MJYJS 'MPX
 1FMFNBZ 18 ˜4VTVNV:BNB[BLJ

  19. 4IBSFE%BUB $PSF #1 $PSF2 3.14 ैདྷͷݴޠͷ໰୊఺ w ෳ਺ͷίΞͰσʔλΛڞ༗͠ ͍ͯΔͱԾఆ͢Δ 

     ˜4VTVNV:BNB[BLJ
  20. 4IBSFE%BUB $PSF #1 $PSF2 3.14 →1.5 ഁյతߋ৽͕ϘτϧωοΫ w ͋ΔίΞ͕ڞ༗σʔλΛ
 ഁյతߋ৽ͨ͠৔߹

    w ଞͷίΞʹ௨஌ͯ͠
 ॲཧΛࢭΊΔඞཁ͕͋Δ w ଎౓௿Լʹͭͳ͕Δ w ίΞ਺͕૿͑Ε͹૿͑Δ΄Ͳ
 ਂࠁͳӨڹΛ΋ͨΒ͢   ˜4VTVNV:BNB[BLJ 6QEBUF /PUJGZ 4UPQ1SPDFTTJOH
  21. 4IBSFE%BUB $PSF #1 $PSF2 3.14 &MJYJS͸શ͕ͯΠϛϡʔλϒϧͰ͋Δ w &MJYJSͰ͸σʔλͷഁյతߋ৽ ͕ൃੜ͢Δ͜ͱ͸ͳ͍ w

    ଞͷίΞͷॲཧΛࢭΊͳͯ͘ ྑ͍ w ίΞ਺͕૿͑ͯ΋ॲཧೳྗΛ ҡ࣋Ͱ͖Δ ‎ฒྻੑʹ༏ΕΔ   ˜4VTVNV:BNB[BLJ %PO`U
 6QEBUF %PO`UOFFEUP
 TUPQQSPDFTTJOH
  22. ˜4VTVNV:BNB[BLJ w ӈͷίʔυྫ w ͔Β  ·ͰͷϦετʹ w ֤ཁૉʹGPPΛద༻ Y

     w ֤ཁૉʹCBSΛద༻   w ͨ݁͠ՌΛಘΔ w ഁյతߋ৽ͳ͠Ͱ
 σʔλΛ্͔Βॱʹม׵͍ͯ͘͠
 ʮσʔλม׵ʯύϥμΠϜ w ຊ࣭ඒͳͷͰʮષʯ 1..1_000_000 |> Enum.map(&M.foo(&1))
 |> Enum.map(&M.bar(&1))
 
 defmodule M do def foo( n ), do: n * 2 def bar( n ), do: n + 1 end &MJYJS;FOελΠϧ 22
  23. ˜4VTVNV:BNB[BLJ 23 w ࠷৽ͷ$16(16͸
 ϚϧνίΞΛ௒͑ͯ
 ϝχʔίΞ w ͜ͷίʔυ͸
 ֤ཁૉؒʹґଘؔ܎͕ͳ͘
 ࠷େ

     ฒྻͰ
 ࣮ߦՄೳ ؆୯ʹฒྻԽՄೳʂ 1..1_000_000 |> Enum.map(&M.foo(&1))
 |> Enum.map(&M.bar(&1))
 
 defmodule M do def foo( n ), do: n * 2 def bar( n ), do: n + 1 end
  24. 'MPX w&MJYJSͷ࡞ऀ+PTÉ7BMJN͕ ೥ʹ࡞ͬͨ
 ฒྻॲཧϥΠϒϥϦ wएׯͷهड़Λ଍͚ͩ͢Ͱ
 ϚϧνίΞ$16Λ׆༻ wෳࡶͳॲཧΛฒྻԽ͢Δ৔߹ʹ ޮՌΛൃش
 ୯७ͳॲཧͰ͸ޮՌ͕ग़ͳ͍ 

    wཁૉͷॱ൪͕ೖΕସΘΔ͜ͱ͕ ͋Δ఺ʹ஫ҙ ୯Ұ$16Ͱॲཧ def func do
 1..1_000_000
 |> Enum.map(&foo(&1))
 |> Enum.map(&bar(&1))
 end ฒྻॲཧ def func do
 1..1_000_000
 |> Flow.from_enumerable
 |> Flow.map(&foo(&1))
 |> Flow.map(&bar(&1))
 |> Enum.to_list
 end
  25. 1FMFNBZ wࢁ࡚ͱٱߐ͕೥͔Β։ൃ͠͸͡ Ίͨฒྻॲཧܥ wएׯͷهड़Λ଍͚ͩ͢Ͱ$16ͷ4*.% ໋ྩΛ׆༻ wݱࡏ͸਺஋࢛ଇԋࢉͷΈαϙʔτɼ
 কདྷ͸&MJYJSશݴޠ࢓༷Λαϙʔτ༧ఆ wϚϧνίΞΛαϙʔτ͍ͯ͠ͳ͍ݱࡏ ͸ɼ·ͩ'MPXͱͷ࢖͍෼͚͕ඞཁ wݱ࣌఺Ͱ͸'MPXͱซ༻͢Δͱ஗͘ͳΔ

    wকདྷ͸$16(16Λϑϧ׆༻༧ఆ ୯Ұ$16Ͱॲཧ def func do
 1..1_000_000
 |> Enum.map(&foo(&1))
 |> Enum.map(&bar(&1))
 end ฒྻॲཧ defpelemay do
 def func do
 1..1_000_000
 |> Enum.map(&foo(&1))
 |> Enum.map(&bar(&1))
 end
 end
  26. σϞϯετϨʔγϣϯ
 ౰೔͸1FMFNBZΛ࣮ߦͤͯ͞Έ·ͨ͠ 26 ˜4VTVNV:BNB[BLJ

  27. ݱ࣌఺Ͱͷ׆༻ͷํ޲ੑ w 'MPXΛ࢖ͬͯฒྻεΫϨΠϐϯά w 'MPXͱ0QFO$7Λ࢖ͬͯฒྻը૾ॲཧ w 1FMFNBZΛ࢖ͬͯฒྻࢉज़ܭࢉ w &MJYJSͷߦྻܭࢉϥΠϒϥϦ΍σΟʔϓϥʔχϯάϥΠϒϥ Ϧ΁ͷ1FMFNBZͷద༻ΛਐΊ͍ͯ·͢

    w 1FMFNBZ͸·ͩ·ͩػೳ͕଍Γͳ͍Ͱ͕͢ɼݚڀ։ൃΛ ਫ਼ྗతʹਐΊ͍ͯ·͢ʂ 27 ˜4VTVNV:BNB[BLJ
  28. ͓·͚/FSWFTʹ͍ͭͯ w &MJYJS$POG
 %BZ.PSOJOH,FZOPUF+VTUJO4DIOFDL
 IUUQTZPVUVCFG31@E7UPOP w /FSWFTͷຊ࣭ͷͭ͸ΠϛϡʔλϒϧϑΝΠϧγεςϜ w ಈతʹมߋ͢Δσʔλ͸શͯσʔλϕʔεʹू໿ w

    NBUTVNPUPSZl௒ݸମܕσʔληϯλʔ04Λ໨ࢦͨ͠બ୒ੑΛ ࣋ͭίϯςφ࣮ߦج൫zʹͯɼ
 /FSWFT΍ͦΕʹྨ͢ΔΠϛϡʔλϒϧϑΝΠϧγεςϜΛධՁ ͯ͠ΈΔͱྑ͍͔ͱࢥ͍·͢ 28 ˜4VTVNV:BNB[BLJ
  29. ֩৺෦෼ʹ͍ͭͯ͸͝ΊΜͳ͍͞ ݱ࣌఺Ͱ͸ࢿྉඇެ։Ͱ͢ N @@ N 29 ˜4VTVNV:BNB[BLJ