Mercurial > hg > Papers > 2018 > parusu-master
view mindmap.mm @ 102:c48b78793176
Fix
author | Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Feb 2018 11:48:44 +0900 |
parents | ecb7f8c66302 |
children | 202041abe27b |
line wrap: on
line source
<map version="1.0.1"> <!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net --> <node CREATED="1512458853968" ID="ID_16361895" MODIFIED="1512460306570" TEXT="Gears os の並列処理"> <node CREATED="1512459013907" ID="ID_1199179481" MODIFIED="1517730926921" POSITION="right" TEXT="研究目的"> <node CREATED="1517730929684" ID="ID_268702329" MODIFIED="1517730938255" TEXT="OSの話"> <node CREATED="1517730938619" ID="ID_618406193" MODIFIED="1517731034114" TEXT="OS の信頼性を保証するのは難しい"> <node CREATED="1517730959574" ID="ID_1233591714" MODIFIED="1517730987509" TEXT="時代とともに進歩するハードウェア、サービスに応じて OS 自体が拡張される必要がある"/> <node CREATED="1517731034114" ID="ID_158801483" MODIFIED="1517731042835" TEXT="OS は非決定的な実装を持つ"> <node CREATED="1517731043151" ID="ID_545030377" MODIFIED="1517731073595" TEXT="信頼性を保証するには従来のテスト、デバッグでは不十分(これは並列処理でも言えるか)"/> <node CREATED="1517731077671" ID="ID_769632606" MODIFIED="1517731084132" TEXT="テストしきれない部分が残ってしまう"/> </node> <node CREATED="1517731089014" ID="ID_127450618" MODIFIED="1517731097079" TEXT="証明を用いる方法"/> <node CREATED="1517731097328" ID="ID_335916317" MODIFIED="1517731156205" TEXT="モデル検査"> <node CREATED="1517811634998" ID="ID_146024589" MODIFIED="1517811641044" TEXT="全ての状態を網羅する"/> <node CREATED="1517811641617" ID="ID_1046833501" MODIFIED="1517811665982" TEXT="状態が巨大になる傾向になるため、抽象的なデータ構造を検査する"/> </node> </node> <node CREATED="1517811294432" ID="ID_1832476758" MODIFIED="1517811314902" TEXT="Haskell, Python 等の OS のプログラムを coq とかで証明する"/> <node CREATED="1517811420313" ID="ID_737470099" MODIFIED="1517811434147" TEXT="うちは、 Gears のコードを agdaで証明"/> <node CREATED="1517811442994" ID="ID_466287053" MODIFIED="1517811449316" TEXT="SPIN でモデルチェックする"> <node CREATED="1517811474316" ID="ID_1021466035" MODIFIED="1517811515707" TEXT="promela"/> <node CREATED="1517811520770" ID="ID_1007640310" MODIFIED="1517811530121" TEXT="promela のコードを C に変換してモデルチェックする"/> </node> <node CREATED="1517811455844" ID="ID_996432990" MODIFIED="1517811472893" TEXT="CbC のコードを メタレベルで CbC のコードでモデルチェック"/> </node> <node CREATED="1492596132358" ID="ID_251539353" MODIFIED="1492596147777" TEXT="並列処理のプログラミングは信頼性の確保が難しい"> <node CREATED="1494759599699" ID="ID_1103318080" MODIFIED="1494759613270" TEXT="複雑さ"> <node CREATED="1494759614698" ID="ID_1336227916" MODIFIED="1494759622158" TEXT="パイプライン"/> <node CREATED="1494759623311" ID="ID_1116224711" MODIFIED="1494759630326" TEXT="データ並列化"/> <node CREATED="1494759632951" ID="ID_1512675661" MODIFIED="1494759636950" TEXT="通信"/> <node CREATED="1494759637815" ID="ID_608727346" MODIFIED="1494759640366" TEXT="同期"/> </node> </node> <node CREATED="1494759255320" ID="ID_377562133" MODIFIED="1494759280615" TEXT="並列処理のチューニングは難しい"> <node CREATED="1494759285616" ID="ID_464656512" MODIFIED="1494759414735" TEXT="アムダール則"/> <node CREATED="1494759380205" ID="ID_1115166650" MODIFIED="1494759426126" TEXT="テクノロジーマッピング"> <node CREATED="1494759430984" ID="ID_1519188342" MODIFIED="1494759439637" TEXT="GPGPU"/> <node CREATED="1494759440348" ID="ID_503355580" MODIFIED="1494759450686" TEXT="PCクラスタ"/> <node CREATED="1494759451887" ID="ID_1628193029" MODIFIED="1494759462694" TEXT="専用アーキテクチャ"/> </node> <node CREATED="1494759427167" ID="ID_530241215" MODIFIED="1494759516653" TEXT="Compiler directive"/> <node CREATED="1494759525506" ID="ID_611151551" MODIFIED="1494759533173" TEXT="MPI"/> <node CREATED="1494759537686" ID="ID_1866159972" MODIFIED="1494759545309" TEXT="CUDA"/> <node CREATED="1494759553412" ID="ID_1491842568" MODIFIED="1494759572271" TEXT="記述が煩雑"> <node CREATED="1494759572272" ID="ID_1036605218" MODIFIED="1494759589670" TEXT="すぐ時代遅れになる"/> </node> </node> <node CREATED="1494759664659" ID="ID_811317689" MODIFIED="1494759695118" TEXT="メタ計算を使った並列処理"> <node CREATED="1494759698395" ID="ID_282379188" MODIFIED="1494759735830" TEXT="チューニングをメタ計算部分で行う"/> <node CREATED="1494759737495" ID="ID_1418869704" MODIFIED="1494759884854" TEXT="信頼性の確保もメタ計算部分で行う"/> <node CREATED="1494759887127" ID="ID_402629690" MODIFIED="1494759912397" TEXT="アルゴリズムとチューニングを分離する"/> <node CREATED="1494759913724" ID="ID_786401208" MODIFIED="1494759940445" TEXT="メタ計算をサポートする言語CbCを扱う"/> <node CREATED="1494759941595" ID="ID_1342174865" MODIFIED="1494759974637" TEXT="コードとデータそれぞれにメタな部分がある"/> </node> <node CREATED="1492596119497" ID="ID_1681814830" MODIFIED="1492596130777" TEXT="Code Gear, Data Gear を使った並列処理"> <node CREATED="1492596155094" ID="ID_1650537256" MODIFIED="1492596171670" TEXT="Code Gear は Input された Data Gear 以外は触らない"/> <node CREATED="1492596173008" ID="ID_1062219126" MODIFIED="1492596201999" TEXT="Code Gear は実行内容を Output Data Gear に書き出す"/> <node CREATED="1492596205879" ID="ID_1257115080" MODIFIED="1492599432670" TEXT="Code Gear 間は継続処理でCode Gear を移動する"> <node CREATED="1492596261229" ID="ID_1766491596" MODIFIED="1492596271454" TEXT="基本的には末尾呼び出ししかつかえない"> <node CREATED="1492596233321" ID="ID_1043570655" MODIFIED="1492596258019" TEXT="functional な プログラミングスタイルを更に制約化する"/> </node> </node> <node CREATED="1492599312541" ID="ID_736319416" MODIFIED="1492599323077" TEXT="Input と Output の関係から並列処理を行う"/> </node> <node CREATED="1492596298268" ID="ID_137287743" MODIFIED="1492596303427" TEXT="信頼性の確保"> <node CREATED="1492596303787" ID="ID_1118780576" MODIFIED="1492596308410" TEXT="モデルチェッキング"> <node CREATED="1517732559423" ID="ID_1204189563" MODIFIED="1517732563873" TEXT="すべての状態を列挙する"> <node CREATED="1517732567388" ID="ID_152517777" MODIFIED="1517732605532" TEXT="巨大な状態になりやすいので"/> </node> <node CREATED="1492605188884" ID="ID_1336932146" MODIFIED="1492605199086" TEXT="single linked queue"/> <node CREATED="1492605200092" ID="ID_53892540" MODIFIED="1492605203422" TEXT="RB tree"/> </node> <node CREATED="1492596309380" ID="ID_1272495779" MODIFIED="1492596311353" TEXT="型チェック"/> <node CREATED="1492596313379" ID="ID_1955122588" MODIFIED="1492605181247" TEXT="検証"> <node CREATED="1492605181848" ID="ID_1919079450" MODIFIED="1492605187311" TEXT="並列処理の検証とか"/> </node> <node CREATED="1492605456922" ID="ID_182000760" MODIFIED="1492605460226" TEXT="どう嬉しいのか?"> <node CREATED="1492605492510" ID="ID_63268465" MODIFIED="1492605507032" TEXT="途中で止まらない"/> <node CREATED="1492605507626" ID="ID_283430344" MODIFIED="1492605517815" TEXT="整合性がちゃんと取れる"/> </node> </node> <node CREATED="1494761099227" ID="ID_1907135787" MODIFIED="1494761136298" TEXT="normal level"> <node CREATED="1494761138937" ID="ID_1784438052" MODIFIED="1494761158522" TEXT="継続で接続されたCode Gear"/> <node CREATED="1494761161057" ID="ID_527415358" MODIFIED="1494761184082" TEXT="input Data Gear と Output Data Gear"/> <node CREATED="1494761186594" ID="ID_417603619" MODIFIED="1494761217011" TEXT="Input と Output以外は触らない "> <node CREATED="1494761227424" ID="ID_403417067" MODIFIED="1494761233523" TEXT="ポインタはない"/> </node> <node CREATED="1494761241932" ID="ID_733410380" MODIFIED="1494761268907" TEXT="tail call のみを使う関数型プログラミング"> <node CREATED="1494761276236" ID="ID_715646781" MODIFIED="1494761288123" TEXT="agda に変換できる"/> <node CREATED="1494761290188" ID="ID_182846393" MODIFIED="1494761309003" TEXT="agda を使ってプログラムの正しさを証明したい"/> <node CREATED="1494761315025" ID="ID_34287223" MODIFIED="1494761328627" TEXT="ポインタ演算はメタ計算側で行う"> <node CREATED="1494761335849" ID="ID_579494470" MODIFIED="1494761344619" TEXT="例えばメモリ管理など"/> </node> </node> </node> <node CREATED="1492596730763" ID="ID_1218431096" MODIFIED="1494760391681" TEXT="meta computation"> <node CREATED="1492596742680" ID="ID_1927258639" MODIFIED="1492596762237" TEXT="実際に行う計算のための計算"> <node CREATED="1492596844936" ID="ID_365246262" MODIFIED="1492596865626" TEXT="network 間でversion 違う場合の整合性"/> <node CREATED="1492596763501" ID="ID_282207258" MODIFIED="1492596844321" TEXT="並列処理の依存関係"/> <node CREATED="1492598757212" ID="ID_1026249711" MODIFIED="1492598772215" TEXT="モデルチェッキングや検証"/> <node CREATED="1492599527749" ID="ID_1337410507" MODIFIED="1492599535142" TEXT="CPU, GPU の実行の切り替え"/> </node> <node CREATED="1492599338803" ID="ID_1764055121" MODIFIED="1492599390563" TEXT="Code Gearの接続間で meta Code Gear を用意し, そこで行う"> <node CREATED="1494760274310" ID="ID_244630254" MODIFIED="1494760328829" TEXT="Code Gear を管理する表"/> <node CREATED="1494760331766" ID="ID_1097458727" MODIFIED="1494760349132" TEXT="Code Gear の間に入るstub"/> <node CREATED="1494760350914" ID="ID_142372369" MODIFIED="1494760379812" TEXT="Code Gear の遷移を管理する Meta Code Gear"/> </node> <node CREATED="1494760121179" FOLDED="true" ID="ID_1341921987" MODIFIED="1512656163057" TEXT="Data Gear と Code Gear を管理する Meta Data Gear がある"> <node CREATED="1494760172638" ID="ID_1595517450" MODIFIED="1494760211076" TEXT="スレッドストラクチャーに相当するContext"/> <node CREATED="1494760228117" ID="ID_80626219" MODIFIED="1494760264045" TEXT="Context の管理を行うスケジューラ"/> </node> <node CREATED="1494760693133" ID="ID_1073090241" MODIFIED="1494760700587" TEXT="Interface"> <node CREATED="1494760704308" ID="ID_1070207889" MODIFIED="1494760730908" TEXT="Code Gear と Data Gear の集合"/> <node CREATED="1494760732517" ID="ID_394512662" MODIFIED="1494760779996" TEXT="Interface Data Gear を通してアクセスする"/> <node CREATED="1494760782333" ID="ID_1257836270" MODIFIED="1494760815036" TEXT="関数呼び出しのコールフレームに相当する"/> </node> <node CREATED="1494760582042" ID="ID_1517130971" MODIFIED="1494760600981" TEXT="CbCコンパイラ"> <node CREATED="1494760600982" ID="ID_1918147567" MODIFIED="1494760610113" TEXT="no stack frame"/> <node CREATED="1494760653220" ID="ID_551663297" MODIFIED="1494760681164" TEXT="メタ部分とノーマル部分を同じCbCで記述する"/> <node CREATED="1494760872680" ID="ID_1205279647" MODIFIED="1494760881709" TEXT="Gear box"> <node CREATED="1494760881710" ID="ID_79379372" MODIFIED="1494760915348" TEXT="GearsOS 用のステートチャートの拡張"/> </node> </node> <node CREATED="1494760620196" ID="ID_115694418" MODIFIED="1494760636460" TEXT="context の生成"> <node CREATED="1494761483268" ID="ID_362523788" MODIFIED="1494761508555" TEXT="使用するCode Gearの表"/> <node CREATED="1494761510408" ID="ID_1497583145" MODIFIED="1494761544331" TEXT="使用するData Gear の表と型の情報"/> <node CREATED="1494761546064" ID="ID_237438517" MODIFIED="1494761561331" TEXT="例外処理"/> <node CREATED="1494761569916" ID="ID_896829350" MODIFIED="1494761589619" TEXT="Data Gear の依存関係"/> <node CREATED="1494761591131" ID="ID_1495278711" MODIFIED="1494761598858" TEXT="メモリ管理"/> </node> <node CREATED="1494760637161" ID="ID_1185823918" MODIFIED="1494760648404" TEXT="stub の生成"> <node CREATED="1494761358048" ID="ID_537403430" MODIFIED="1494761424619" TEXT="Interface の Data Gear から必要なData Gear を抜き出して CbC のコードを呼び出す"/> <node CREATED="1494761426136" ID="ID_1765829055" MODIFIED="1494761476027" TEXT="引数をData Gear に書き出して Meta Code Gear に移行する"/> </node> </node> </node> <node CREATED="1515489773550" ID="ID_182275024" MODIFIED="1515489776577" POSITION="right" TEXT="Gears OS"> <node CREATED="1515489795847" ID="ID_789491775" MODIFIED="1515489801928" TEXT="Code Gear, Data Gear"/> <node CREATED="1515489868685" ID="ID_1534618965" MODIFIED="1515489870518" TEXT="継続"/> <node CREATED="1512459138764" ID="ID_1903848084" MODIFIED="1512459176537" TEXT="CbC"> <node CREATED="1512459188214" ID="ID_59092144" MODIFIED="1515489899341" TEXT="code Gearを記述出来る言語"/> <node CREATED="1515489834796" ID="ID_945167143" MODIFIED="1515489836287" TEXT="goto"/> <node CREATED="1512459195550" ID="ID_759671304" MODIFIED="1512459207695" TEXT="meta computation"> <node CREATED="1512459207696" ID="ID_1753156845" MODIFIED="1512459215215" TEXT="stub"/> </node> <node CREATED="1512459217895" ID="ID_620166500" MODIFIED="1512459227058" TEXT="interface"/> </node> <node CREATED="1515489816813" ID="ID_1315035351" MODIFIED="1515489891580" TEXT="Gears での Data Gear"> <node CREATED="1515489943522" ID="ID_1142363267" MODIFIED="1515489958632" TEXT="union と struct を組合せで表現する"/> <node CREATED="1515489904234" ID="ID_756344413" MODIFIED="1515489907740" TEXT="interface"> <node CREATED="1515489908157" ID="ID_1799558180" MODIFIED="1515489931027" TEXT="データと振る舞いの集合である Data Gear"/> </node> </node> <node CREATED="1515489810423" ID="ID_1853930962" MODIFIED="1515489833006" TEXT="meta Gear"> <node CREATED="1515489845374" ID="ID_1496192306" MODIFIED="1515489862316" TEXT="Gears は meta Gear を通常の Gearの間に接続する"/> </node> </node> <node CREATED="1512459051002" ID="ID_1406407128" MODIFIED="1515488831956" POSITION="right" TEXT="並列処理の構成"> <node CREATED="1492598873929" ID="ID_341820755" MODIFIED="1492598875273" TEXT="Context"> <node CREATED="1515736011060" ID="ID_1535255002" MODIFIED="1515736016842" TEXT="代表的な Meta Data"/> <node CREATED="1492599273720" ID="ID_1145032049" MODIFIED="1492599302246" TEXT="CG のリスト"/> <node CREATED="1492599280124" ID="ID_1742110158" MODIFIED="1492599304862" TEXT="DG のリスト"/> <node CREATED="1492599284153" ID="ID_1876844818" MODIFIED="1492599312025" TEXT="DG の allocate"/> <node CREATED="1492599605705" ID="ID_887878285" MODIFIED="1492599610261" TEXT="その他いろいろ"/> <node CREATED="1492599614820" ID="ID_1536135754" MODIFIED="1492599619148" TEXT="Task も Context"/> <node CREATED="1515735879699" ID="ID_1522228763" MODIFIED="1515735890529" TEXT="Thread や process と同等"/> <node CREATED="1515735890953" ID="ID_1463747048" MODIFIED="1515735898232" TEXT="context を切り替えながら処理をしていく"/> <node CREATED="1515735901576" ID="ID_1462001635" MODIFIED="1515735952947" TEXT="Meta level から normal level への遷移も context を経由して行う"> <node CREATED="1515735953434" ID="ID_1792294525" MODIFIED="1515735990034" TEXT="normal level の input data は contextがすべてのDGのポインタを持っているので可能"/> <node CREATED="1515735990388" ID="ID_394841631" MODIFIED="1515736004025" TEXT="Output も 最終的には context に格納される"/> </node> </node> <node CREATED="1492598864406" ID="ID_1687880423" MODIFIED="1492598866691" TEXT="TaskManager"> <node CREATED="1492599734061" ID="ID_653944383" MODIFIED="1492599741953" TEXT="Task Create"/> <node CREATED="1492599742553" ID="ID_647849311" MODIFIED="1492599747095" TEXT="Workers Create"/> <node CREATED="1492600814806" ID="ID_1329759540" MODIFIED="1492600824176" TEXT="Send Task to workers"/> <node CREATED="1492600828953" ID="ID_1336439792" MODIFIED="1492600843776" TEXT="set wait List for task"> <node CREATED="1492600846389" ID="ID_368998292" MODIFIED="1492600897116" TEXT="task"/> </node> </node> <node CREATED="1492598867265" ID="ID_1489374859" MODIFIED="1492598868395" TEXT="Worker"> <node CREATED="1492598880377" ID="ID_1745477396" MODIFIED="1492598921303" TEXT="Worker 毎に 実行するTaskが入っている synchronized queueをもつ"/> <node CREATED="1492598923368" ID="ID_114619867" MODIFIED="1492598937775" TEXT="TaskManager から task が sendされる"/> <node CREATED="1492598940541" ID="ID_353413891" MODIFIED="1492598945485" TEXT="実際にTaskを処理する"/> <node CREATED="1492603356876" ID="ID_1796895384" MODIFIED="1492603398977" TEXT="Task を処理した後, そのTaskで出力されたODS をcommit(依存関係の解決)する"/> </node> <node CREATED="1492598869771" ID="ID_970395828" MODIFIED="1492598873441" TEXT="Task(Context)"> <node CREATED="1492599612932" ID="ID_617828246" MODIFIED="1492599636562" TEXT="Task は Context として生成される"/> <node CREATED="1492599638427" ID="ID_1375136309" MODIFIED="1492599653963" TEXT="接続される idg の一覧"/> <node CREATED="1492599654300" ID="ID_1194751010" MODIFIED="1492599661731" TEXT="出力用の odg の一覧"/> <node CREATED="1492599664019" ID="ID_1727716436" MODIFIED="1492599692418" TEXT="持っている idg のカウント"/> </node> <node CREATED="1512459642693" ID="ID_1515147666" MODIFIED="1512460079315" TEXT="Data Gear の meta Data"> <node CREATED="1512459955573" ID="ID_1268418191" MODIFIED="1512459963646" TEXT="依存関係解決用のqueue"/> </node> <node CREATED="1514281525554" ID="ID_1712637800" MODIFIED="1514281529860" TEXT="Synchornized Queue"> <node CREATED="1514281558026" ID="ID_465369737" MODIFIED="1514281584393" TEXT="Code Gear の疑似並列実を使ってモデル検査する"> <node CREATED="1514281585150" ID="ID_355165624" MODIFIED="1514281597370" TEXT="length を先に決めておく"/> </node> </node> <node CREATED="1512460350073" ID="ID_185870589" MODIFIED="1512460351791" TEXT="par goto"> <node CREATED="1512460353973" ID="ID_1212844908" MODIFIED="1512460356687" TEXT="par goto iterate"/> <node CREATED="1513922624345" ID="ID_13624334" MODIFIED="1513922630592" TEXT="並列実行用の構文"> <node CREATED="1513922630782" ID="ID_9443031" MODIFIED="1513923980580" TEXT="par goto を書くと, task の生成, dependency の設定, taskManager への spawn(実体はWorker に task を send) までやってくれる"/> <node CREATED="1513923983001" ID="ID_1400100723" MODIFIED="1513924003330" TEXT="task は context なので、context をいじる構文"> <node CREATED="1513924004391" ID="ID_87004753" MODIFIED="1513924034173" TEXT="meta 計算として記述する"/> <node CREATED="1513924013060" ID="ID_377338595" MODIFIED="1513926029012" TEXT="par goto は normal レベルで記述するはず"/> <node CREATED="1513924024580" ID="ID_736053385" MODIFIED="1513926011683" TEXT="perl の script で meta 計算を生成する"/> </node> </node> </node> <node CREATED="1515489156397" ID="ID_1246229506" MODIFIED="1515489191477" TEXT="Thread 間通信"> <node CREATED="1515489191801" ID="ID_1420841044" MODIFIED="1515489194164" TEXT="Semaphore"/> </node> <node CREATED="1515489496108" ID="ID_271409357" MODIFIED="1515489510090" TEXT="iterate"> <node CREATED="1515489510551" ID="ID_15556582" MODIFIED="1515489538967" TEXT="配列や, Listなどの要素一つ一つに処理を適用するもの"/> <node CREATED="1515489553012" ID="ID_431969583" MODIFIED="1515489602342" TEXT="一つ一つ要素への処理は並列で実行する"> <node CREATED="1515489604871" ID="ID_1570107481" MODIFIED="1515489658574" TEXT="iterate な task を copy して, 指定した長さ分 task を作って並列に実行する"/> <node CREATED="1515489662442" ID="ID_539429740" MODIFIED="1515489681211" TEXT="GPU へのマッピングでも使われる"> <node CREATED="1515489681764" ID="ID_1709717666" MODIFIED="1515489682620" TEXT="SIMD"/> </node> </node> </node> </node> <node CREATED="1512459624453" ID="ID_1863644916" MODIFIED="1512460342956" POSITION="right" TEXT="GPU 実行"> <node CREATED="1512459627489" ID="ID_1073024940" MODIFIED="1512459629873" TEXT="CUDA Worker"> <node CREATED="1512460181086" ID="ID_1891611974" MODIFIED="1512460205855" TEXT="Task を GPUで実行する"/> </node> <node CREATED="1512459630289" ID="ID_1421603107" MODIFIED="1512459633777" TEXT="CUDA Buffer"> <node CREATED="1512460155955" ID="ID_1415092848" MODIFIED="1512460177862" TEXT="Data Gear を GPU の Data構造にマッピングするためのもの"/> </node> <node CREATED="1512460105826" ID="ID_1054295790" MODIFIED="1512460153903" TEXT="Code Gear stub で GPU用のFunction を呼ぶ"/> <node CREATED="1515489729575" ID="ID_970060224" MODIFIED="1515489758336" TEXT="Code Gear への待ち合わせの際に, cpu へ一度結果を書き出すので遅い"/> </node> <node CREATED="1512460310214" ID="ID_1936995951" MODIFIED="1512460317608" POSITION="right" TEXT="Gears OS の記述"> <node CREATED="1512460345799" ID="ID_149182714" MODIFIED="1512460349488" TEXT="Interface"> <node CREATED="1513922531324" ID="ID_936309019" MODIFIED="1513922564821" TEXT="Code Gear と Data Gear の集をもっているDataGear"/> <node CREATED="1513922541220" ID="ID_1917556930" MODIFIED="1513922590538" TEXT="interface とは別に実装を持っており, Code Gear は その実装のmethodになる"> <node CREATED="1513922594130" ID="ID_229338484" MODIFIED="1513922620704" TEXT="つまり impl 毎に違う挙動を書く事ができる"/> </node> </node> <node CREATED="1512460367213" ID="ID_567384353" MODIFIED="1512460368327" TEXT="stub"/> <node CREATED="1512460370758" ID="ID_945629592" MODIFIED="1512460383581" TEXT="perl script な 変換"/> </node> <node CREATED="1512459041016" ID="ID_1841381888" MODIFIED="1514018014615" POSITION="right" TEXT="Gears OS の評価"> <node CREATED="1512459346672" ID="ID_1546513678" MODIFIED="1512459938589" TEXT="例題"> <node CREATED="1512459348722" ID="ID_953736294" MODIFIED="1512459568879" TEXT="bitonic sort"/> <node CREATED="1512459907943" ID="ID_1559767155" MODIFIED="1512459911920" TEXT="twice"/> </node> <node CREATED="1512459939767" ID="ID_1100574778" MODIFIED="1512459952847" TEXT="GPUでの実行も含める"/> <node CREATED="1514018015304" ID="ID_1613432857" MODIFIED="1514018020395" TEXT="他のOS との比較は?"> <node CREATED="1514018020396" ID="ID_913667138" MODIFIED="1514018028182" TEXT="unix, linux kernel"/> <node CREATED="1514018022227" ID="ID_1406507293" MODIFIED="1514018041526" TEXT="プロシンのコメントの論文"> <node CREATED="1514018042054" ID="ID_994343708" MODIFIED="1514018141905" TEXT="大体の論文は COQ で証明を書いて, 実装は別の言語でかく"/> <node CREATED="1514018090857" ID="ID_1653509773" MODIFIED="1514018313010" TEXT="CbCで証明も実装も書く"> <node CREATED="1514018313969" ID="ID_792215202" MODIFIED="1514018320689" TEXT="今は agda も使ってるが"/> <node CREATED="1514018323389" ID="ID_1330939690" MODIFIED="1514018368591" TEXT="agda できちんと CbC のコードをマッピングできれば"/> </node> </node> </node> </node> <node CREATED="1512460286627" ID="ID_1409831252" MODIFIED="1512460438315" POSITION="right" TEXT="まとめ, 今後の課題"> <node CREATED="1512460491942" ID="ID_1541576349" MODIFIED="1512460497601" TEXT="疑似並列実行"> <node CREATED="1512460501794" ID="ID_1097558600" MODIFIED="1512460537793" TEXT="Code Gear を実行の最小単位とする"/> <node CREATED="1512460539814" ID="ID_1131663966" MODIFIED="1512460568205" TEXT=""/> </node> </node> <node CREATED="1514281649646" ID="ID_1568729910" MODIFIED="1514281659508" POSITION="left" TEXT="par goto と Synchronized Queue を優先に書く"> <node CREATED="1514281660067" ID="ID_175932633" MODIFIED="1514281747899" TEXT="それに使用した meta computation を抜き出して, "/> <node CREATED="1514281763120" ID="ID_130958059" MODIFIED="1514281849518" TEXT="Thread 間の通信の例題"> <node CREATED="1514281767058" ID="ID_1648214351" MODIFIED="1514281770562" TEXT="bounded buffer"/> <node CREATED="1514281771023" ID="ID_753303870" MODIFIED="1514282905235" TEXT="consumer producer みたいなもの"/> <node CREATED="1514281821309" ID="ID_619774660" MODIFIED="1514281829033" TEXT="go の 例題から探す"/> </node> <node CREATED="1514282094582" ID="ID_545317549" MODIFIED="1514282111883" TEXT="データ依存はどういうふうに実装するか"/> </node> <node CREATED="1518064616548" ID="ID_1521823706" MODIFIED="1518067661848" POSITION="left" TEXT="Slide"> <node CREATED="1518064686043" ID="ID_1634184648" MODIFIED="1518064690520" TEXT="研究目的"/> <node CREATED="1518064735563" ID="ID_1749479393" MODIFIED="1518064739630" TEXT="Code Gear Data Gear"> <node CREATED="1518064744892" ID="ID_83532885" MODIFIED="1518064759840" TEXT="Input/Output Data Gear から依存関係を解決し、並列処理"/> <node CREATED="1518064764180" ID="ID_1863637270" MODIFIED="1518064777782" TEXT="関数呼び出しではなく継続で Code Gear を遷移する"/> </node> <node CREATED="1518064700207" ID="ID_1454284984" MODIFIED="1518064715133" TEXT="CbC での記述方法"> <node CREATED="1518064715619" ID="ID_1179771941" MODIFIED="1518064720699" TEXT="Data Gear の記述"/> <node CREATED="1518064724713" ID="ID_1263796081" MODIFIED="1518064729553" TEXT="Code Gear の記述"/> <node CREATED="1518064729885" ID="ID_1732431489" MODIFIED="1518064734204" TEXT="軽量継続"> <node CREATED="1518066202102" ID="ID_501863633" MODIFIED="1518066209616" TEXT="通常のプログラミングスタイルとはだいぶ異なる"/> </node> </node> <node CREATED="1518064958855" ID="ID_894130998" MODIFIED="1518064965898" TEXT="Meta Code Gear"> <node CREATED="1518066215664" ID="ID_942131983" MODIFIED="1518066510888" TEXT="Code Gear 間の継続の間に挟まる"> <node CREATED="1518066219160" ID="ID_330545735" MODIFIED="1518066520414" TEXT="代表的なものが stub Code Gear"/> </node> <node CREATED="1518066525332" ID="ID_1359907981" MODIFIED="1518066533725" TEXT="stub Code Gear"> <node CREATED="1518066534105" ID="ID_1501421453" MODIFIED="1518066593460" TEXT="Context を参照しながら ノーマルレベルの Code Gear に値を渡す"/> </node> <node CREATED="1518064966611" ID="ID_543122540" MODIFIED="1518064980649" TEXT="stub Code Gear の記述"> <node CREATED="1518066024979" ID="ID_170043921" MODIFIED="1518066029264" TEXT="記述が煩雑"/> </node> </node> <node CREATED="1518066032699" ID="ID_209141222" MODIFIED="1518066295292" TEXT="Interface"> <node CREATED="1518066037806" ID="ID_1249505951" MODIFIED="1518066045815" TEXT="Code Gear と Data Gear の集合"/> <node CREATED="1518066302315" ID="ID_268116340" MODIFIED="1518066314298" TEXT="Interface の記述"> <node CREATED="1518066248061" ID="ID_663976198" MODIFIED="1518066285334" TEXT="Data Gear を操作する API(Code Gear)と 引数になりうる Data Gear をInterface ファイルに記述"/> </node> <node CREATED="1518066629519" ID="ID_487977928" MODIFIED="1518066632728" TEXT="Interface の実装"> <node CREATED="1518066318690" ID="ID_933818606" MODIFIED="1518066327412" TEXT="Interface 実装の生成"> <node CREATED="1518066455839" ID="ID_352858904" MODIFIED="1518066476605" TEXT="実装した Code Gear を Interface 型の変数に格納する"/> <node CREATED="1518066327707" ID="ID_1182727836" MODIFIED="1518066343810" TEXT="関数呼び出しで Interface 型に包んでreturnする"/> </node> <node CREATED="1518066639754" ID="ID_1038147312" MODIFIED="1518066650736" TEXT="API 実装の Code Gear"> <node CREATED="1518066651184" ID="ID_1525249350" MODIFIED="1518066664272" TEXT="stub は基本決まった形になる"> <node CREATED="1518066669009" ID="ID_621743365" MODIFIED="1518066676787" TEXT="script による自動生成が可能"/> </node> </node> </node> <node CREATED="1518066346427" ID="ID_942645682" MODIFIED="1518066359706" TEXT="API の呼び出し"> <node CREATED="1518066360186" ID="ID_770926725" MODIFIED="1518066424959" TEXT="goto interface->method() とする"/> <node CREATED="1518066372668" ID="ID_565357099" MODIFIED="1518066407465" TEXT="この際 interface は 実装を Interface 型で包んだ Data Gear"/> <node CREATED="1518066408600" ID="ID_143105587" MODIFIED="1518066420630" TEXT=" method は実装の生成で指定した Code Gear に継続する"/> <node CREATED="1518066431079" ID="ID_627628319" MODIFIED="1518066450334" TEXT="引数には Input Data Gear, Output Data Gear, next Code Gear を指定"/> </node> </node> <node CREATED="1518066690402" ID="ID_43166865" MODIFIED="1518066694566" TEXT="並列処理"> <node CREATED="1518066694892" ID="ID_33995923" MODIFIED="1518066696088" TEXT="Task"/> <node CREATED="1518066696767" ID="ID_554293613" MODIFIED="1518066701442" TEXT="TaskManager"/> <node CREATED="1518066701698" ID="ID_1849048852" MODIFIED="1518066702873" TEXT="Worker"/> <node CREATED="1518066703243" ID="ID_1889526389" MODIFIED="1518066707507" TEXT="依存関係の解決"/> </node> <node CREATED="1518066711698" ID="ID_1239099487" MODIFIED="1518066716103" TEXT="CUDA 実装"> <node CREATED="1518066716511" ID="ID_1477796584" MODIFIED="1518067296517" TEXT="CUDAのアーキテクチャ"> <node CREATED="1518067308688" ID="ID_898730244" MODIFIED="1518067395432" TEXT="Data Gear を GPUに移動するにはアーキテクチャにそって書かなければならない"/> </node> <node CREATED="1518067298107" ID="ID_1072200714" MODIFIED="1518067433141" TEXT="CUDA Worker"/> <node CREATED="1518067433425" ID="ID_1393991682" MODIFIED="1518067436772" TEXT="CUDA Executor"> <node CREATED="1518067464594" ID="ID_732297750" MODIFIED="1518067479298" TEXT=" GPU へのデータの送信"/> <node CREATED="1518067480091" ID="ID_1696357859" MODIFIED="1518067486395" TEXT="kernel の実行"/> <node CREATED="1518067486682" ID="ID_1752499252" MODIFIED="1518067492178" TEXT="CPU への結果の書き出し"/> </node> <node CREATED="1518067437356" ID="ID_177649565" MODIFIED="1518067442979" TEXT="CUDA Buffer"> <node CREATED="1518067444519" ID="ID_1116278333" MODIFIED="1518067462611" TEXT="CPU 上の Code Gear と GPU の データの扱いのギャップを埋めるもの"/> </node> <node CREATED="1518067494520" ID="ID_1471945460" MODIFIED="1518067505431" TEXT="stub での実行の切り替え"/> </node> <node CREATED="1518067581952" ID="ID_1798780577" MODIFIED="1518067586599" TEXT="例題"> <node CREATED="1518067586599" ID="ID_752643281" MODIFIED="1518067589159" TEXT="Twice"/> <node CREATED="1518067589596" ID="ID_1262439929" MODIFIED="1518067594149" TEXT="bitonicSort"/> </node> <node CREATED="1518067675655" ID="ID_1698086825" MODIFIED="1518067679418" TEXT="比較"> <node CREATED="1518067679674" ID="ID_1648312579" MODIFIED="1518067680754" TEXT="openmp"/> <node CREATED="1518067681219" ID="ID_581518872" MODIFIED="1518067684179" TEXT="go"/> </node> <node CREATED="1518067686587" ID="ID_188331961" MODIFIED="1518067687929" TEXT="まとめ"/> </node> </node> </map>