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

Elixir におけるC言語コード生成・最適化の試み

Elixir におけるC言語コード生成・最適化の試み

我々は Pelemay Super-Parallelism と称する関数型言語ElixirからC言語へのコード生成・最適化を行う処理系を研究開発している
これは,ElixirにはElixirのコードをASTに変換する機構が備わることを利用し,並列化可能なコードを検出してC言語コードを生成し,Auto Vectorization を利用してSIMD並列化を行う処理系である
2019年10月に公開したバージョン0.0.4では,あらかじめテンプレートとして定義されたC言語コードにコードを埋め込む方式のコード生成を実装し,元のElixirコードと比べて約2倍の高速化が図れた
2019年11月現在研究開発中のバージョン0.1.0系列では,コード生成の方式を大幅に見直し,柔軟なコード生成を図れるようにする予定である
本発表では,その中で最も特徴的な型検査の最適化方法について提案する
これは,動的型言語であるElixirの型の特性と,NIFという Elixir とネイティブコードの間のFFIを利用して,型検査と型推論を並行して実行することで,型検査の最適化を図る方式である
今後,実装と性能評価を行う

Susumu Yamazaki (ZACKY)

January 11, 2020
Tweet

More Decks by Susumu Yamazaki (ZACKY)

Other Decks in Research

Transcript

  1. &MJYJSʹ͓͚Δ$ݴޠίʔυੜ੒ɾ࠷దԽͷࢼΈ ๺۝भࢢཱେֶࢁ࡚ਐɹٱߐ༤ت  զʑ͸1FMFNBZ4VQFS1BSBMMFMJTNͱশ͢Δؔ਺ܕݴޠ&MJYJS͔Β$ݴޠ΁ͷίʔυੜ੒ɾ࠷దԽΛ ߦ͏ॲཧܥΛݚڀ։ൃ͍ͯ͠Δ
 ͜Ε͸ɼ&MJYJSʹ͸&MJYJSͷίʔυΛ"45ʹม׵͢Δػߏ͕උΘΔ͜ͱΛར༻͠ɼฒྻԽՄೳͳίʔυ Λݕग़ͯ͠$ݴޠίʔυΛੜ੒͠ɼ"VUP7FDUPSJ[BUJPOΛར༻ͯ͠4*.%ฒྻԽΛߦ͏ॲཧܥͰ͋Δ  ೥݄ʹެ։ͨ͠όʔδϣϯͰ͸ɼ͋Β͔͡ΊςϯϓϨʔτͱͯ͠ఆٛ͞Εͨ$ݴޠίʔ υʹίʔυΛຒΊࠐΉํࣜͷίʔυੜ੒Λ࣮૷͠ɼݩͷ&MJYJSίʔυͱൺ΂ͯ໿ഒͷߴ଎Խ͕ਤΕͨ

     ೥݄ݱࡏݚڀ։ൃதͷόʔδϣϯܥྻͰ͸ɼίʔυੜ੒ͷํࣜΛେ෯ʹݟ௚͠ɼॊೈ ͳίʔυੜ੒ΛਤΕΔΑ͏ʹ͢Δ༧ఆͰ͋Δ  ຊൃදͰ͸ɼͦͷதͰ࠷΋ಛ௃తͳܕݕࠪͷ࠷దԽํ๏ʹ͍ͭͯఏҊ͢Δ
 ͜Ε͸ɼಈతܕݴޠͰ͋Δ&MJYJSͷܕͷಛੑͱɼ/*'ͱ͍͏&MJYJSͱωΠςΟϒίʔυͷؒͷ''*Λར ༻ͯ͠ɼܕݕࠪͱܕਪ࿦Λฒߦ࣮ͯ͠ߦ͢Δ͜ͱͰɼܕݕࠪͷ࠷దԽΛਤΔํࣜͰ͋Δ
 ࠓޙɼ࣮૷ͱੑೳධՁΛߦ͏ 1 ˜4VTVNV:BNB[BLJ
  2. (Ͱ௨৴଎౓͸޲্͢Δ w (CQTΛ௒͑Δ௨৴ /55υίϞެࣜ  w (CQTΛ௒͑Δ௨৴Λୡ੒࣮ͨ͠ݧ݁Ռ͋Γ ӳޠ 8JLJQFEJB 

    w (ΑΓߴ͍प೾਺Λ༻͍Δ͜ͱ͔Βɼج஍ہ͔Βͷ࠷େ ڑ཭͕୹͍
 ˠج஍ہΛߴີ౓ʹઃஔ͠ͳ͍ͱ͍͚ͳ͍ w NTఔ౓ͷϨΠςϯγ ӳޠ8JLJQFEJB 5 ˜4VTVNV:BNB[BLJ
  3. ͔ΘΓʹίΞ਺͕૿Ճ w ೥Ҏ߱ͷ
 ϓϩηοαͷਐԽ w ºΫϩοΫप೾਺ w ˓ίΞ਺  ˜4VTVNV:BNB[BLJ

    *OUFM$PSF
 &YUSFNF9  $MPDL ()[ PG$PSFT  *OUFM$PSFJ
 9&  $MPDL ()[ PG$PSFT 
  4. ,JMPDPSF w.*.%ํࣜίΞ w ϝϞϦϞδϡʔϧ w ONϓϩηεϧʔϧ w ࠷େ()[ 7 

    w 7࣌()[N8
 Q+໋ྩ 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.
  5. 4IBSFE%BUB $PSF #1 $PSF2 3.14 →1.5 ഁյతߋ৽͕ϘτϧωοΫ w ͋ΔίΞ͕ڞ༗σʔλΛ
 ഁյతߋ৽ͨ͠৔߹

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

    ଞͷίΞͷॲཧΛࢭΊͳͯ͘ ྑ͍ w ίΞ਺͕૿͑ͯ΋ॲཧೳྗΛ ҡ࣋Ͱ͖Δ ‎ฒྻੑʹ༏ΕΔ  ˜4VTVNV:BNB[BLJ %PO`U
 6QEBUF %PO`UOFFEUP
 TUPQQSPDFTTJOH
  7. Elixir and Phoenix are the most promising solution for the

    Data Explosion problem Fedrecheski, G., Costa, L. C. P. and Zuffo, M. K.: Elixir programming language evaluation for IoT, 2016 IEEE International Symposium on Consumer Electronics (ISCE), pp. 105–106 (online), DOI: 10.1109/ISCE.2016.7797392 (2016). Java is defeated by highly frequent requests more than 1,200 Requests/sec Elixir endures highly frequent requests
 less than 1,800 Requests/sec Server: a quad-core computer with 6GB RAM Client: an eight-core computer with 12GB RAM ↑Slower ↓Faster
  8. &MJYJSͷಛ௃ w +PTÉ7BMJN͕։ൃ w 3VCZʹࣅͨจ๏Λ࣋ͪɼ3VCZPO3BJMTʹࣅͨ΢ΣϒϑϨʔϜϫʔΫ1IPFOJYΛ࣋ͭ w &SMBOHʹ༝དྷ͢Δฒྻॲཧੑೳͱ଱ো֐ੑ w -*41෩ͷϝλϓϩάϥϛϯά w

    ໋໊ͷ༝དྷ w ෆ࿝ෆࢮͷༀ ºϑΝΠφϧϑΝϯλδʔ ⚪+PTÉᐌ͘ʮΑ͍֮͑ͯ͘ͳ͍͕ɼ&SMBOHͱಉ͡&Ͱ࢝·Δޠײͷྑ͍ݴ༿͔ͩͬͨΒʯ &SMBOHͷ଱ো֐ੑ͕ɼෆ࿝ෆࢮͷΠϝʔδʹͭͳ͕͔ͬͨΒʁ 17 ˜4VTVNV:BNB[BLJ
  9. ˜4VTVNV:BNB[BLJ w ӈͷίʔυྫ w ͔Β  ·ͰͷϦετʹ w ֤ཁૉʹGPPΛద༻ Y

     w ֤ཁૉʹCBSΛద༻   w ͨ݁͠ՌΛಘΔ 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ελΠϧ 18
  10. ˜4VTVNV:BNB[BLJ 19 w ࠷৽ͷ$16(16͸ϚϧνίΞΛ௒ ͑ͯϝχʔίΞ w ͜ͷίʔυ͸֤ཁૉؒʹґଘؔ܎͕ ͳ͘࠷େ  ฒྻͰ࣮ߦՄೳ

    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
  11. 1FMFNBZ4VQFS1BSBMMFMJTN wࢁ࡚ͱٱߐ͕೥͔Β։ൃ͠͸͡Ίͨ
 ฒྻॲཧܥ چ໊শ)BTUFHB  wएׯͷهड़ EFGQFMFNBZ Λ଍͚ͩ͢Ͱ$ݴޠ ͷωΠςΟϒίʔυΛੜ੒
 "VUP7FDUPSJ[BUJPOͰ$16ͷ4*.%໋ྩੜ੒

    wݱࡏ͸&OVNNBQͱ਺஋࢛ଇԋࢉΛαϙʔτ
 কདྷ͸&MJYJSશݴޠ࢓༷Λαϙʔτ༧ఆ wকདྷ͸$16(16Λϑϧ׆༻༧ఆ w࿦จ౤ߘ೥݄࣌఺Ͱόʔδϣϯ
 όοΫΤϯυίϯύΠϥ$MBOH wݱࡏ͸೥݄ެ։ͷόʔδϣϯ
 όοΫΤϯυίϯύΠϥ$MBOH ($$  ˜4VTVNV:BNB[BLJ ୯Ұ$16Ͱॲཧ def func(list) do
 list
 |> Enum.map(&foo(&1))
 |> Enum.map(&bar(&1))
 end ฒྻॲཧ EFGQFMFNBZEP
 EFGGVOD MJTU EP
 MJTU
 c&OVNNBQ GPP  
 c&OVNNBQ CBS  
 FOE
 FOE
  12. όʔδϣϯͷॲཧͷྲྀΕ w ݱࡏͷ࠷৽൛Ͱ͋Δόʔδϣϯ΋ಉ༷  &MJYJSʹඋΘ͍ͬͯΔϝλϓϩάϥϛϯάػߏʹΑΓEFGQFMFNBZEPʜFOEͷ۠ؒ Λೝࣝ͠ɼ1FMFNBZίϯύΠϥʹॲཧΛ౉͢  ۠ؒ಺ͷؔ਺ͱɼͦͷதʹهड़͞Ε͍ͯΔ&OVNNBQΛؚΉهड़ɼ&OVNNBQͷத ͷಗ໊ؔ਺Λೝࣝ͢Δ 

    /*'ͷελϒίʔυΛੜ੒͢Δ  ςϯϓϨʔτΛݩʹωΠςΟϒίʔυΛੜ੒͢Δ
 ͜ͷςϯϓϨʔτͰ͸"VUP7FDUPSJ[BUJPOͱ෼ذ༧ଌʹؔ͢ΔώϯτΛؚΉ$ݴޠ ίʔυʹͳ͍ͬͯΔ  $ݴޠίʔυΛ$MBOH όʔδϣϯͰ͸($$ʹ΋ରԠ ʹ౉ͯ͠ίϯύΠϧ͢Δ 21 ˜4VTVNV:BNB[BLJ
  13. ༧ߘఏग़ޙʹ໌Β͔ʹͳͬͨࣄ࣮ w &MJYJS͕༻͍Δ&SMBOHΛίϯύΠϧ͢Δ$ίϯύΠϥʹΑͬͯɼ&OVN
 ϕϯνϚʔΫͷੑೳ͕େ͖͘ҟͳΔ w "QQMF$MBOH $MBOH $MBOH HDD HDDͰൺֱ

    w J.BD1SP"QQMF$MBOHɼHDD HDDͷํ͕$MBOHΑΓ ʙഒఔ౓଎͘ɼ$MBOHΑΓʙഒఔ౓଎͍ w 3Z[FOHDD HDDͷํ͕$MBOHΑΓʙഒఔ౓଎͘ɼ $MBOHΑΓഒఔ౓଎͍ w ݪҼʹ͍ͭͯ͸ɼݱࡏڀ໌த 25 ˜4VTVNV:BNB[BLJ
  14. ࠶ੑೳධՁͷํ਑ w &OVNͱ1FMFNBZͰ$ίϯύΠϥΛἧ͑ͯੑೳධՁ͢΂͖Ͱ͋Δ w $MBOH ($$ͱ΋ʹ೥݄ݱࡏͷ࠷৽TUBCMF൛ΛΧελϜϏϧυ͢Δ w $MBOHMMWNPSH w ($$HDD@@SFMFBTF

    w &MJYJS͕༻͍Δ&SMBOHΛ͍͔ͭ͘ͷ$ίϯύΠϥͰϏϧυ͢Δ w &SMBOH w ࠷దԽΦϓγϣϯΛ0GBTUͰἧ͑Δ w 1FMFNBZόʔδϣϯΛ༻͍ͯɼ&SMBOHͷϏϧυʹ༻͍ͨ$ίϯύΠϥΛ؀ڥม਺ $$Ͱ໌ࣔతʹࢦఆ࣮ͯ͠ߦ͢Δ 26 ˜4VTVNV:BNB[BLJ
  15. όʔδϣϯͷॲཧͷྲྀΕ  &MJYJSʹඋΘ͍ͬͯΔϝλϓϩάϥϛϯάػߏʹΑΓEFGQFMFNBZEPʜ FOEͷ۠ؒΛೝࣝ͠ɼ1FMFNBZίϯύΠϥʹॲཧΛ౉͢  ۠ؒ಺ͷؔ਺ͱɼͦͷதʹهड़͞Ε͍ͯΔ&OVNNBQΛؚΉهड़ɼ &OVNNBQͷதͷಗ໊ؔ਺Λೝࣝ͢Δ  /*'ͷελϒίʔυΛੜ੒͢Δ
 ͦͷࡍɼܕΤϥʔճ෮ͷͨΊͷίʔυΛੜ੒͢Δ

     ;&".*3Λੜ੒͠ɼͦΕʹج͍ͮͯωΠςΟϒίʔυΛੜ੒͢Δ
 ͦͷࡍɼܕݕࠪΛ࠷దԽ͠ɼ"VUP7FDUPSJ[BUJPOͱ෼ذ༧ଌʹؔ͢Δ ώϯτΛؚΉίʔυΛੜ੒͢Δ  $ݴޠίʔυΛ$MBOH΋͘͠͸($$ʹ౉ͯ͠ίϯύΠϧ͢Δ 31 ˜4VTVNV:BNB[BLJ
  16. όʔδϣϯͷॲཧͷྲྀΕ  &MJYJSʹඋΘ͍ͬͯΔϝλϓϩάϥϛϯάػߏʹΑΓEFGQFMFNBZEPʜ FOEͷ۠ؒΛೝࣝ͠ɼ1FMFNBZίϯύΠϥʹॲཧΛ౉͢  ۠ؒ಺ͷؔ਺ͱɼͦͷதʹهड़͞Ε͍ͯΔ&OVNNBQΛؚΉهड़ɼ &OVNNBQͷதͷಗ໊ؔ਺Λೝࣝ͢Δ  /*'ͷελϒίʔυΛੜ੒͢Δ
 ͦͷࡍɼܕΤϥʔճ෮ͷͨΊͷίʔυΛੜ੒͢Δ

     ;&".*3Λੜ੒͠ɼͦΕʹج͍ͮͯωΠςΟϒίʔυΛੜ੒͢Δ
 ͦͷࡍɼܕݕࠪΛ࠷దԽ͠ɼ"VUP7FDUPSJ[BUJPOͱ෼ذ༧ଌʹؔ͢Δώϯ τΛؚΉίʔυΛੜ੒͢Δ  $ݴޠίʔυΛ$MBOH΋͘͠͸($$ʹ౉ͯ͠ίϯύΠϧ͢Δ 32 ˜4VTVNV:BNB[BLJ
  17. ܕݕࠪͷ࠷దԽͷΞΠσΞ  w &MJYJSͷม਺͸ɼ಺෦తʹ͸&3-@/*'@5&3.ܕͷม਺ͱ ͯ͠ɼ࣮ࡍͷܕͷ৘ใͱͱ΋ʹهԱ͞Ε͍ͯΔ w FOJG@JT@ ؔ਺Ͱ&3-@/*'@5&3.ͷม਺ͷܕݕࠪΛߦ͑Δ w FOJG@HFU@

    ؔ਺Λ༻͍ͯ&3-@/*'@5&3.͔Β$ݴޠͷ஋ ΛಘΒΕΔ͕ɼͦͷࡍʹܕݕࠪΛಉ࣌ʹߦ͑Δ w FOJG@NBLF@ ؔ਺Λ༻͍ͯɼ$ݴޠͷ஋͔Β &3-@/*'@5&3.ܕͷม਺Λੜ੒͢Δ 33 ˜4VTVNV:BNB[BLJ
  18. ܕݕࠪͷ࠷దԽͷΞΠσΞ  w ਺Ͱ͸ͳ͍ܕͷม਺ΛಘΔ৔߹͸ɼFOJG@JT@ Λলུͯ͠ ࠷ॳ͔ΒFOJG@HFU@ Λߦ͏͜ͱͰɼܕݕࠪͷճ਺ΛݮΒ ͤΔ w ਺ͷܕͷ৔߹ʹ͸ɼ΋ͦ͠ͷ਺ͷ஋͕Ϗοτͷූ߸

    ෇ɾූ߸ͳ͠ͷ੔਺ͷൣғΛ͑ͨ͜੔਺஋Ͱ͋Δͱ͖ʹ ͸ɼFOJG@JT@OVNCFSͰਅΛฦ͢΋ͷͷɼFOJG@HFU@ Ͱ੔ ਺΍ුಈখ਺఺਺ʹม׵Ͱ͖ͳ͍ͷͰɼ͜ͷ৔߹͸/*'Ͱ ͸ѻ͑ͳ͍ͷͰɼద੾ʹॲཧ͢Δඞཁ͕͋Δ 34 ˜4VTVNV:BNB[BLJ
  19. ܕݕࠪͷ࠷దԽͷΞΠσΞ  w ϦετͰɼશͯͷཁૉͷܕ͕ಉҰͷܕ ୯Ұཁૉܕ Ͱ͋Δ ͱ͖ʹ͸ཁૉͷܕݕࠪΛলུ͢Δ࠷దԽΛద༻Ͱ͖Δ w ϦετͰɼ΄ͱΜͲͷཁૉͷܕ͕ಉҰͷܕͰ࣌ʑҟͳΔܕ ͕ࠞ͡Δ

    Ұ෦ෳ߹ཁૉܕͰ͋Δ ͱ͖ʹ͸ɼϏοτϕΫλ Λ༻͍Δ͜ͱͰཁૉͷܕݕࠪΛ࠷దԽͰ͖Δ w &MJYJSͷϦετΛ$ݴޠͷ഑ྻʹม׵ͯ͠ѻ͏ͱ͖ɼলϝϞ Ϧ΍4*.%໋ྩ׆༻ͷ؍఺͔Β͸ɼ੔਺஋ͷൣғΛݟۃΊ ͯɼͰ͖Δ͚ͩϏοτ෯ͷখ͍͞஋Ͱදͨ͠ํ͕ྑ͍ 35 ˜4VTVNV:BNB[BLJ
  20. ࠷దԽ͞ΕͨܕݕࠪͷΞϧΰϦζϜͷ֓ཁ  w ΋͠୯ҰཁૉܕͰ͋ͬͨ৔߹ʹ͸ɼҎޙɼ͜ͷϦετͷཁૉʹؔ͢Δܕݕࠪ͸লུͰ͖Δ w ͞Βʹཁૉͷܕ͕਺ͩͬͨ FOJG@JT@OVNCFSͰਅͰ͋Δ ৔߹ɼුಈখ਺఺਺ܕͰ͋Ε ͹ɼFOJG@HFU@EPVCMFΛ༻͍ͯEPVCMFܕͷ഑ྻʹม׵͢Δ w

    ͦ͏Ͱͳ͍৔߹͸੔਺ܕͰ͋Δͱߟ͑Δɻ੔਺஋ͷൣғ͕ɼJOUܕɼVOTJHOFEJOUܕɼ MPOHܕɼVOTJHOFEMPOHܕɼ&SM/JG*OUܕ ූ߸෇Ϗοτ੔਺ܕ ɼ&SM/JG6*OUܕ ූ߸ͳ͠Ϗοτ੔਺ܕ ͷॱͰܕݕࠪΛͯ͠஋͕ऩ·ΔͷͰ͋Ε͹ɼͦΕͧΕͷܕ ͷ഑ྻʹม׵Ͱ͖Δ w ੔਺஋ͷൣғ͕ऩ·Βͳ͍৔߹ʹ͸ɼ/*'Ͱѻ͏͜ͱ͕Ͱ͖ͳ͍ͷͰɼܕΤϥʔͱ͢ Δɻ͜ͷޙɼ&MJYJSଆͰΤϥʔճ෮͢ΔͨΊͷίʔυΛ࣮ߦ͢Δ w ཁૉͷܕ͕ϦετͰ͋Δ৔߹ʹ͸ɼଟ࣍ݩ഑ྻʹม׵͢Δ w ཁૉͷܕ͕ͦΕҎ֎ͷ৔߹͸ɼ౰ͯ͸·ΔܕΛه࿥্ͨ͠Ͱɼ&3-@/*'@5&3.ͷ·· ه࿥͢ΔɻҎޙ͸͜ͷه࿥ͨ͠ܕͰ͋Δ΋ͷͱͯ͠ɼඞཁʹԠͯ͡஋ΛऔΓग़͢ 37 ˜4VTVNV:BNB[BLJ
  21. &MJYJSʹ͓͚Δ$ݴޠίʔυੜ੒ɾ࠷దԽͷࢼΈ ๺۝भࢢཱେֶࢁ࡚ਐɹٱߐ༤ت  զʑ͸1FMFNBZ4VQFS1BSBMMFMJTNͱশ͢Δؔ਺ܕݴޠ&MJYJS͔Β$ݴޠ΁ͷίʔυੜ੒ɾ࠷దԽΛ ߦ͏ॲཧܥΛݚڀ։ൃ͍ͯ͠Δ
 ͜Ε͸ɼ&MJYJSʹ͸&MJYJSͷίʔυΛ"45ʹม׵͢Δػߏ͕උΘΔ͜ͱΛར༻͠ɼฒྻԽՄೳͳίʔυ Λݕग़ͯ͠$ݴޠίʔυΛੜ੒͠ɼ"VUP7FDUPSJ[BUJPOΛར༻ͯ͠4*.%ฒྻԽΛߦ͏ॲཧܥͰ͋Δ  ೥݄ʹެ։ͨ͠όʔδϣϯͰ͸ɼ͋Β͔͡ΊςϯϓϨʔτͱͯ͠ఆٛ͞Εͨ$ݴޠίʔ υʹίʔυΛຒΊࠐΉํࣜͷίʔυੜ੒Λ࣮૷͠ɼݩͷ&MJYJSίʔυͱൺ΂ͯ໿ഒͷߴ଎Խ͕ਤΕͨ

     ೥݄ݱࡏݚڀ։ൃதͷόʔδϣϯܥྻͰ͸ɼίʔυੜ੒ͷํࣜΛେ෯ʹݟ௚͠ɼॊೈ ͳίʔυੜ੒ΛਤΕΔΑ͏ʹ͢Δ༧ఆͰ͋Δ  ຊൃදͰ͸ɼͦͷதͰ࠷΋ಛ௃తͳܕݕࠪͷ࠷దԽํ๏ʹ͍ͭͯఏҊ͢Δ
 ͜Ε͸ɼಈతܕݴޠͰ͋Δ&MJYJSͷܕͷಛੑͱɼ/*'ͱ͍͏&MJYJSͱωΠςΟϒίʔυͷؒͷ''*Λར ༻ͯ͠ɼܕݕࠪͱܕਪ࿦Λฒߦ࣮ͯ͠ߦ͢Δ͜ͱͰɼܕݕࠪͷ࠷దԽΛਤΔํࣜͰ͋Δ
 ࠓޙɼ࣮૷ͱੑೳධՁΛߦ͏ 41 ˜4VTVNV:BNB[BLJ