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

近未来的並列 LL

近未来的並列 LL

Forecast on the near future programming paradigm, issues, and challenges in parallel processing.
Movie: http://vimeo.com/29903448

At LL Tiger, Jul, 2010.

Motohiro Takayama

January 28, 2012
Tweet

More Decks by Motohiro Takayama

Other Decks in Programming

Transcript

  1. ۙະདྷతฒྻ LL
    @mootoh

    View Slide

  2. @mootoh
    ߴࢁ ੐େ
    ฒྺ 5೥
    ࠷ۙ͸ ݚڀऀ : ΤϯδχΞ = 7:3
    http://deadbeaf.org
    ݸਓͷҙݟɺݟղͰ͢

    View Slide

  3. Molatomium CELL REGZA

    View Slide

  4. ฒΧϯ

    View Slide

  5. http://bit.ly/namikan

    View Slide

  6. ͸͡Ίʹ mootoh
    ฒྻϓϩάϥϛϯάͷೖ໳ˍ͓͞Β͍తͳ࿩ wraith13
    ϩʔϨΠϠʔͰͷฒྻॲཧͷઃܭ goyoki
    STM hayamiz
    ฒྻ HPU ݴޠ MUDA syoyo
    ϚϧνίΞ࣌୅ͷ Lock-free ೖ໳ yamasa
    Haskell पΓ shelarcy
    ͦͷଞ ???

    View Slide

  7. ໨తͩͬͨ΋ͷ
    •ݚڀऀ͚ͩ͡Όͳͯ͘
    •;ͭ͏ͷΤϯδχΞ΋ฒྻॲཧΛ
    ͦͯ͠ LL tiger
    100ਓ!

    View Slide

  8. ۙະདྷతฒྻ LL

    View Slide

  9. ͦ΋ͦ΋
    ͳͥฒྻͳͷ͔

    View Slide

  10. λμ൧
    ऴྃͷ
    ͓஌Βͤ
    CC by-nc-sa : http://www.flickr.com/photos/carrapatoso/3467673411/
    ʘ(^o^)ʗ
    ʘ(^o^)ʗ
    ʘ(^o^)ʗ
    ʘ(^o^)ʗ
    ʘ(^o^)ʗ
    ʘ(^o^)ʗ
    ʘ(^o^)ʗ

    View Slide

  11. “The Free Lunch is Over”, by Herb Sutter
    http://www.gotw.ca/publications/concurrency-ddj.htm
    λμ൧
    ऴྃͷ
    ͓஌Βͤ

    View Slide

  12. Ͳ͏͍͏͜ͱ͔
    •͜Ε·Ͱ
    • ৽͍͠ CPU ങͬͯ͘Ε͹উखʹ଎͘ͳͬͨ
    •͜Ε͔Β (ϚϧνίΞ࣌୅)
    • ͦͷ··͡Ό଎͘ͳΒͳ͍ ʘ(^o^)ʗ
    • ฒྻʹॻ͔͘͠ͳ͍

    View Slide

  13. http://edry.jp/a/2009/02/21_210347.xhtml

    View Slide

  14. ͦ΋ͦ΋଎͘͢Δ
    ඞཁ͕͋Δͷ?

    View Slide

  15. ͜͜Ͱ
    ೿खͳσϞ
    CC by-nc : http://www.flickr.com/photos/b-tal/407402521/

    View Slide

  16. ௿ϨΠςϯγʔ
    ιϑτ΢ΣΞ

    View Slide

  17. ଴ͪ࣌ؒ
    •ྫ: Eclipse.app Λىಈ͢Δ࣌ؒ
    • on iMac Core 2 Duo 3GHz 4GB RAM
    • ॳճ: 33s, 2ճ໨Ҏ߱: 7s
    (628,702ਓ * 33s * 365೔) / (60 * 60 * 24 * 30)
    => 2,921 ਓ݄/೥

    View Slide

  18. ଴ͪ࣌ؒΛݮΒ͢
    •21ੈل: ͕࣌ؒ࠷΋وॏͳࢿݯ
    •଴ͨͤͳ͍
    • ࠃຽ૯޾෱ྔ (GNH) ͕޲্
    •ϞόΠϧͰ͸ΑΓॏཁ

    View Slide

  19. എܠ·ͱΊ
    •ϓϩηοαͷ޲্: प೾਺ →ίΞ਺
    •ฒྻʹॻ͔͘͠ͳ͍
    •଎͞ → ਓྨͷ GNH ޲্

    View Slide

  20. ۙະདྷ LL

    View Slide

  21. ۙະདྷ Timeline
    2010 2015 2020

    View Slide

  22. ݱঢ়ೝࣝ

    View Slide

  23. 2010 2015 2020
    ͍·͜͜

    View Slide

  24. ؾʹ͢Δ͜ͱ
    •ฒྻʹಈ͔͘
    •≠ ฒߦ
    •Native thread Ͱ૸Δ͔
    •ͲΜͳϞσϧɺύϥμΠϜΛ࣮૷͍ͯ͠Δ͔

    View Slide

  25. •Native thread
    • 5.6 ͔Β ithread
    • thread ͝ͱʹ VM
    • default Ͱ shared nothing
    •6.0 ͔Β STMͳͲͨ͘͞Μ
    •ϥΠϒϥϦ
    • POE, AnyEvent, Coro, ...

    View Slide

  26. •Native & green thread (࣮૷ʹΑΔ)
    • ruby1.8: green
    • ruby1.9: native, GIL ͋Γ
    • JRuby, MacRuby: native, GIL ͳ͠ \o/
    •ϥΠϒϥϦ
    • Revactor, EventMachine, NeverBlock, ...

    View Slide

  27. •Thread
    • CPython: GVL ͋Γ
    • Jython, IronPython : ͳ͛͞
    • Jython: system 216% cpu 12.285 total

    View Slide

  28. •no threads, fork it

    View Slide

  29. Haskell
    •࠷ऴฌث ൴ঁ Haskell
    •ͳΜ͔͍Ζ͍Ζ͍͋ͬͯ͢͝
    •Parallel Haskell
    •Concurrent Haskell
    •STM
    •Native thread?

    View Slide

  30. •Actor Ϟσϧͷϝοηʔδύογϯά
    •Native thread
    • beam.smp 193.2%
    •Ϛγϯͷத/֎͕ಁաత

    View Slide

  31. •͍͍ͱ͜ͲΓ
    •JVM ϕʔε
    •Native thread
    •Actor Ϟσϧͷϝοηʔδύογϯά

    View Slide

  32. •goroutine
    •Native thread
    • runtime.GOMAXPROCS(NCPU)
    •Channel
    •ϝοηʔδύογϯά

    View Slide

  33. Javascript
    •HTML5 Ͱ WebWorkers ͕ !
    •ϝοηʔδύογϯά
    •Native thread ͬΆ͍?
    • WebKit ͷιʔεʹΑΔͱ
    •ࣝऀʹฉ͘

    View Slide

  34. ݱঢ়·ͱΊ
    Perl Ruby Python PHP Haskell Erlang Scala go Javascript
    Native
    thread
    ˕ ˚ ˚ × ̋? ˕ ˕ ˕ ̋?
    Model,
    Paradigm
    Thread,
    STM
    Thread,
    Fiber
    Thread Process
    STM
    ͍͢͝Կ͔
    Message
    Passing
    Thread,
    Message
    Passing
    Message
    Passing
    Message
    Passing
    ಛهࣄ߲
    shared-
    nothing
    by
    default
    ݚڀ೤৺
    ϚϧνίΞ
    Ͱ΋
    Ϋϥελ
    Ͱ΋
    ͍͍ͱ͜
    ͲΓ
    goroutine
    Web
    Workers

    View Slide

  35. 2010-2015

    View Slide

  36. Timeline
    2010 2015 2020
    ͜ͷ΁Μ

    View Slide

  37. ిྗ͕΍͹͍

    View Slide

  38. JVM ϕʔεॲཧܥͷ࣌୅
    •Native thread, ϚϧνεϨουͷੑೳ
    •ϙʔλϒϧ
    •ྫ:
    • JRuby, Jython, Scala, Clojure, ...

    View Slide

  39. Ͱ΋଴ͬͯ
    http://www.flickr.com/photos/johnkay/3331613033/

    View Slide

  40. Ͱ΋଴ͬͯ
    •ϚϧνεϨουϓϩάϥϛϯά͸ࢮ͵
    • σουϩοΫ, Ϩʔε, ࠶ݱੑͷͳ͍όά, ...
    •ఱ࠽ʹͱͬͯ͑͞೉͍͠
    •εϨου͸ϓϦϛςΟϒ͗͢Δ
    • ΞηϯϒϦͰॻ͘Α͏ͳ΋ͷ

    View Slide

  41. ந৅͕ඞཁ
    •ඇಉظ I/O
    •λεΫΩϡʔ
    •σʔλϑϩʔ
    •ϝοηʔδύογϯά
    • Πϕϯτۦಈ

    View Slide

  42. ඇಉظ I/O
    •C10k ໰୊
    •Event
    • AnyEvent (Perl)
    • EventMachine (Ruby)

    View Slide

  43. λεΫΩϡʔ
    •ฒྻʹ࣮ߦ͍ͨ͠λεΫΛ
    ͲΜͲΜΩϡʔʹͭͬ͜Ή
    • :) ෼͔Γ΍͍͢
    • :( ґଘؔ܎͕͋Δͱ...?
    •ྫ:
    • Grand Central Dispatch → Mac
    • Java 7 → JVM ϕʔεͷॲཧܥ
    • OpenCL
    http://en.wikipedia.org/wiki/File:Gcd_icon20090608.jpg
    http://www.khronos.org/opencl/
    http://images.apple.com/macosx/technology/docs/
    GrandCentral_TB_brief_20090903.pdf

    View Slide

  44. σʔλϑϩʔ
    • ґଘؔ܎Λͭͳ͙
    • ඞཁͳσʔλ͕ͦΖͬͨΒɺࣗಈతʹ࣍ͷॲཧʹਐΉ
    • Out of Order
    • Future ύλʔϯ
    • ౤͛ͬͺͳ͠δϟʔϚϯ
    • ผεϨουʹܭࢉͤ͞ͱ͍ͯɺࣗ෼͸ͦͷ··࣮ߦΛܧଓ
    • ผεϨου͕ऴΘͬͨΒ௨஌Λ΋Β͏
    : value resolved
    : value not resolved yet
    : executable Atom
    : pending Atom

    View Slide

  45. Molatomium

    View Slide

  46. Runtime
    Atom
    Mol
    ϙʔλϏϦςΟ
    ฒྻ DSL ௚ྻ C

    View Slide

  47. Mol
    • એݴతɺσʔλϑϩʔ
    • ͍͍ͪͪಉظॻ͔ͳ͍
    • Atom (௚ྻίʔυ) Λ஗Ԇฒྻ࣮ߦɺϝϞԽ
    • C Έ͍ͨͳ
    Haskell Έ͍ͨͳ
    ฒྻ DSL
    main() {
    frame(frame_no, input) {
    local loop;
    local edge[-1..9] outside(0);
    local pocs[-1..9] outside(0);
    local ccr [-1..9] outside(0);
    loop = loop_count();
    edge[i] := edge_atom(input, i);
    ccr [i] := ccr_atom(edge[i-1], edge[i], edge[i+1], i);
    pocs[i] := i % 2 == 0
    ? pocs_even_atom(ccr [i-1], ccr[i], ccr [i+1], loop, i)
    : pocs_odd_atom (pocs[i-1], ccr[i], pocs[i+1], loop, i);
    return &pocs;
    }
    sync for (i in [0..30])
    put_frame_atom(frame(i, get_frame_atom()));
    }

    View Slide

  48. Runtime
    •֤ίΞʹ VM ͕͍Δ
    •͕͜͜ΩϞ Runtime
    Atom Waiting
    Atom
    Shared
    Memory
    Global
    Lock
    Runtime
    Context
    waiting for runtime lock
    arguments,
    return value
    update runtime context
    Mol Atom Wait
    ଓ͖͸࿦จͰ

    View Slide

  49. 2010-2015 ·ͱΊ
    •ϚϧνίΞظ
    • JVM ϕʔεͷॲཧܥ͕ྲྀߦΓͦ͏
    •ੜͰεϨου࢖͏ͷ͸ແཧήʔ
    • ந৅Λ࢖͓͏ (ඇಉظ I/O, λεΫΩϡʔɺσʔλ
    ϑϩʔɺϝοηʔδύογϯά)

    View Slide

  50. 2015-2020

    View Slide

  51. Timeline
    2010 2015 2020
    ͜ͷ΁Μ

    View Slide

  52. ϝχʔίΞظ

    View Slide

  53. Ϛϧν | ϝχʔ
    8
    Ϛϧν ϝχʔ

    View Slide

  54. FAQ
    •ͦΜͳͨ͘͞Μ͋ͬͯԿʹ࢖͏ͷ?
    P = f V^2
    1MHz ͕ 1000 ίΞ → 1GHz ฒͷੑೳ͕!
    ిݯ೉ຽ໰୊Λղܾ
    http://www.speedia.co.jp/~namisato/2008_05.html

    View Slide

  55. Memory
    Wall
    CC-by : http://www.flickr.com/photos/afagen/4145629623/
    ϝϞϦ͕΍͹͍

    View Slide

  56. Memory Wall
    •༰ྔ͕૿͑ͳ͍
    •ిؾΛ৯͏
    •ଳҬ͕଍Γͳ͍
    • 100ίΞΛ௒͑Δͱμϝ͛
    • by “Can Manycores Support the Memory Requirements of Scientific Applications?” /
    A4MMC 2010

    View Slide

  57. Memory Wall
    •ڞ༗ϝϞϦ → ෼ࢄϝϞϦ
    •ྫ: Intel SCC
    • ڞ༗ϝϞϦ஗͍
    • ϝοηʔδύογϯά ͷ HW ͕͋Δ
    http://techresearch.intel.com/articles/Tera-Scale/1826.htm

    View Slide

  58. ϝοηʔδύογϯά
    •Actor Ϟσϧ
    • Erlang, Scala, go, Javascript (HTML5, WebWorkers)
    • ଞͷ LL Ͱ΋ϥΠϒϥϦ͕͋Δ
    CC-by : http://www.flickr.com/photos/punkscrapper/4276443469/

    View Slide

  59. ͍͖ͳΓ...?
    •͍͖ͳΓͷύϥμΠϜγϑτ͸
    ͖͍͔ͭ΋
    •ॲཧܥ͸ϝοηʔδύογϯάɺ
    Ϣʔβ͸׳ΕͨύϥμΠϜ
    • εϨουɺΠϕϯτɺλεΫΩϡʔ

    View Slide

  60. ޾ͤͳະདྷ
    http://dragon-quest.jp/five/monster/11kingusuraimu.html
    ͨ͘͞ΜͷίΞ

    ͻͱͭͷίΞʹݟ͑Δ
    ฒྻԽͯ͠ͳ͍ίʔυ͕଎͘!

    View Slide

  61. 2015-2020 ·ͱΊ
    •ϝχʔίΞظ
    •ϝϞϦ͕΍͹͍ → ෼ࢄϝϞϦʹ
    •ϝοηʔδύογϯά͕ओྲྀʹͳΓ͛

    View Slide

  62. 2020 ->

    View Slide

  63. Timeline
    2010 2015 2020
    ͜ͷ͋ͱ

    View Slide

  64. ਖ਼௚ະདྷ͗ͯ͢૝૾͔ͭͳ͍
    http://www.fastcursor.com/computers/quantum-computer-photo-gallery.asp
    ྔࢠίϯϐϡʔλ
    http://karlnordstrom.ca/ideas/?p=6

    View Slide

  65. ͜͜·Ͱͷ
    ·ͱΊ

    View Slide

  66. ۙະདྷ Timeline
    2010 2015 2020
    ϚϧνίΞ ϝχʔίΞ ྔࢠίϯϐϡʔλ
    JVM ϕʔε
    Α͛Μͷॻ
    λεΫΩϡʔ
    εϨου
    Πϕϯτ Message passing

    View Slide

  67. ະདྷͷฒྻ LL
    Λໝ૝

    View Slide

  68. ཧ૝ͷฒྻ LL
    P
    •ͲΜͳߏ੒Ͱ΋ OK (Portable)
    • ϚϧνίΞɺϝχʔίΞɺϔςϩ
    •ίΞ਺ʹԠͯ͡εέʔϧ͢Δ (Performance)
    •ϥΫ (Productivity)
    • ฒྻΛҙࣝͤͣॻ͍ͯ OK

    View Slide

  69. ݱ࣮తʹ
    ͳΖ͏

    View Slide

  70. ݱ࣮తͳฒྻ LL
    •ͲΜͳߏ੒Ͱ΋ OK (Portable)
    • ϚϧνίΞɺϝχʔίΞɺϔςϩ
    •ίΞ਺ʹԠͯ͡εέʔϧ͢Δ (Performance)
    •ϥΫ (Productivity)
    • ฒྻΛҙࣝͤͣॻ͍ͯ OK

    View Slide

  71. LL ͬͯ?
    •ϓϩάϥϚͷෛ୲͕ Light
    •ݱ࣮ɺݱ৔త
    • ඞཁʹഭΒΕͯͭ͘ΒΕΔ΋ͷ
    • ΞϓϦ࣍ୈɺ DSL

    View Slide

  72. ํ޲ੑ: ฒྻ DSL
    •௚ྻίʔυΛͭͳ͙ฒྻ LL
    • ௚ྻίʔυ: C, Ruby, Perl, PHP, ...
    • Communicating Sequential Process
    •LL ޲͖ͷฒྻੑ
    • ཻ౓͓͓͖Ί
    •Glue ͱͯ͠ͷ LL, ϝλ LL

    View Slide

  73. ࢖͍΍ͬͯ͢͞?
    •ਓ͕ཧղͰ͖Δ͜ͱ
    • ෳࡶͳϞσϧ͸࢖ΘΕͳ͍
    • ݟ͑ͳ͍΋ͷΛ૝૾͢Δͷ͸Ή͍ͣ (ଳҬͳͲ)
    •ਓ͸ෳ਺ͷ͜ͱΛಉ࣌ʹߟ͑ΒΕͳ͍
    • ϚϧνλεΫ͸ੜ࢈ੑΛ 40% Լ͛Δ
    (by Harvard Business Review
    http://blogs.hbr.org/bregman/2010/05/how-and-why-to-stop-multitaski.html
    )

    View Slide

  74. ະղܾ໰୊
    •ہॴੑ
    •ଳҬ
    •λεΫͱσʔλసૹͷΦʔόʔϥοϓ
    •λεΫͷཻ౓ௐ੔
    •ϔςϩ
    http://dragon-quest.jp/five/

    View Slide

  75. ࠓ͕νϟϯε
    •ΞʔΩςΫνϟܹมͷ·ͬ࠷த
    •σϑΝΫτΛͱΕΔ͔΋
    •͍ͭʹ C ͕...

    View Slide

  76. ੍໿
    •ຊ౰ͷ੍໿͸Կ͔
    • ෺ཧతͳ΋ͷ (νοϓ໘ੵɺফඅిྗ)
    •͕͠ΒΈͱ͔࣮૷্ͷ੍໿͸ਓ޻త

    View Slide

  77. Re-Discover
    •ੲɺݟ੾ΓΛ͚ٕͭͨज़͕ࠓͦ͜࢖͑ͨΓ͢Δ
    •ྫ:
    • GC
    • Javascript
    • ϝοηʔδύογϯά
    • σʔλϑϩʔ

    View Slide

  78. ͜͜·Ͱ·ͱΊ
    •ݱ࣮తۙະདྷฒྻ LL
    • ੜ࢈ੑͱੑೳ͸ཉ͍͠
    •͍·͕νϟϯε
    •ΞϓϦ࣍ୈ

    View Slide

  79. Application

    View Slide

  80. Application
    •ΞϓϦ͕ݴޠɺϞσϧΛυϥΠϒ͢Δ
    •ݴޠɺϞσϧ͕ϋʔυ΢ΣΞΛυϥΠϒ͢Δ

    View Slide

  81. ͲΜͳ?

    View Slide

  82. 1. ͕͔͔࣌ؒΓ͗ͯ͢
    ͖͋ΒΊ͍ͯͨ͜ͱ
    http://lucille.sourceforge.net/gallery/0_1_3/index.html
    ྫ: Ray Tracing

    View Slide

  83. εϐʔυ͕࣭ʹస׵͢Δ
    •଎͘ͳΔ͚ͩͰੈք͕มΘΔ͜ͱ͕͋Δ
    •ྫ:
    • खज़γϛϡϨʔγϣϯ
    • ձ࿩ೝࣝ
    • Ұ೔͔͔͍ͬͯͨॲཧ͕ϦΞϧλΠϜʹ

    View Slide

  84. 2. ͭ͘Δܥ
    http://blogs.itmedia.co.jp/yasusasaki/2010/07/ipad-ab70.html
    “͋ͳͨ͸ফඅऀʹͳͬͯ͸͍͚ͳ͍ɻ
    ੜ࢈͢ΔऀʹͳΓͳ͍͞ɻ”

    View Slide

  85. 2. ͭ͘Δܥ
    •try-error ͷαΠΫϧ͕
    ܶతʹ୹ॖ͞ΕΔͱ...?
    •ྫ
    • Pixelmator
    • ಈըฤू

    View Slide

  86. 3. ߹Θٕͤ
    http://www.flickr.com/photos/overig/4639331740/
    ܭࢉྔυΧ৯͍ΞϓϦΛϚογϡΞοϓ
    http://commons.wikimedia.org/wiki/File:Box2d-screenshot.png
    http://www.flickr.com/photos/nh567/1406671607/

    View Slide

  87. 4. ֦ுܥ
    •ϓϥάΠϯɺϘοτɺ֦ுͱ͍ΘΕΔ΋ͷ
    •ฒྻͰಈ͘΋ͷ͕ର৅
    • AIɺ೴Έͦ
    • ϩϘοτ

    View Slide

  88. ͦͷଞ
    •3࣍ݩө૾Λฤू
    •2࣍ݩ → 3࣍ݩ

    View Slide

  89. Ҏ্·ͱΊ

    View Slide

  90. ۙະདྷฒྻ LL
    •ฒྻϓϩάϥϛϯάͰշదͳੈքΛͭ͘Ζ͏
    •ฒྻ LL
    • ੜ࢈ੑͱੑೳΛཱ྆΍ʂ
    •ࠓ͙͢Ͱ͖Δ͜ͱ
    • ϝοηʔδύογϯάʹ׳Εͱ͘ͱΑ͛͞
    •ΞϓϦέʔγϣϯ
    • ଎͘ͳͬͨΒੈք͕มΘΔ΋ͷͬͯ?

    View Slide

  91. View Slide