Mercurial > hg > Papers > 2018 > parusu-master
comparison slide/slide.html @ 97:8596c1e30858
Update cudaDataArchitecture.graffle
author | Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Feb 2018 04:48:06 +0900 |
parents | 14bd1b466bcc |
children | c54c5fe77216 |
comparison
equal
deleted
inserted
replaced
96:14bd1b466bcc | 97:8596c1e30858 |
---|---|
85 | 85 |
86 <div class='slide '> | 86 <div class='slide '> |
87 <!-- === begin markdown block === | 87 <!-- === begin markdown block === |
88 | 88 |
89 generated by markdown/1.2.0 on Ruby 2.3.0 (2015-12-25) [x86_64-darwin16] | 89 generated by markdown/1.2.0 on Ruby 2.3.0 (2015-12-25) [x86_64-darwin16] |
90 on 2018-02-13 03:34:14 +0900 with Markdown engine kramdown (1.13.2) | 90 on 2018-02-13 04:42:29 +0900 with Markdown engine kramdown (1.13.2) |
91 using options {} | 91 using options {} |
92 --> | 92 --> |
93 | 93 |
94 <!-- _S9SLIDE_ --> | 94 <!-- _S9SLIDE_ --> |
95 <h2 id="section">並列処理の重要性</h2> | 95 <h2 id="section">並列処理の重要性</h2> |
672 </div> | 672 </div> |
673 <div class='slide '> | 673 <div class='slide '> |
674 <!-- _S9SLIDE_ --> | 674 <!-- _S9SLIDE_ --> |
675 <h2 id="cudabuffer">CUDABuffer</h2> | 675 <h2 id="cudabuffer">CUDABuffer</h2> |
676 <ul> | 676 <ul> |
677 <li>Host、Device 間でデータのやり取りをする際、 Gears OS での Data Gear をDevice 用にマッピングする必要がある | 677 <li>Host、Device 間でデータのやり取りをする際、 Gears OS での Data Gear をDevice 用にマッピングする必要がある</li> |
678 <ul> | |
679 <li>Device にデータ領域を確保するにはサイズの指定が必要</li> | |
680 <li>Data Gear には Meta Data Gear でデータのサイズを持っている</li> | |
681 <li>Data Gear の要素の中に Data Gear へのポインタがあるとポインタ分でサイズ計算してしまうため、 GPU では参照できなくなってしまう</li> | |
682 </ul> | |
683 </li> | |
684 <li>CUDA Buffer ではそのマッピングを行う | 678 <li>CUDA Buffer ではそのマッピングを行う |
685 <ul> | 679 <ul> |
686 <li>このマッピングは Task の stub Code Gear で行われる</li> | 680 <li>このマッピングは Task に設定されている stub Code Gear で行われる</li> |
687 </ul> | 681 </ul> |
688 </li> | 682 </li> |
689 </ul> | 683 </ul> |
690 | 684 |
691 <div style="text-align: center;"> | 685 <div style="text-align: center;"> |
697 <div class='slide '> | 691 <div class='slide '> |
698 <!-- _S9SLIDE_ --> | 692 <!-- _S9SLIDE_ --> |
699 <h2 id="cuda--1">CUDA での呼び出し</h2> | 693 <h2 id="cuda--1">CUDA での呼び出し</h2> |
700 <ul> | 694 <ul> |
701 <li>Gears OS では Task で実行される Code Gear の stub Code Gear で CUDA による実行を切り替える</li> | 695 <li>Gears OS では Task で実行される Code Gear の stub Code Gear で CUDA による実行を切り替える</li> |
702 <li>stub Code Gear で CUDABuffer でのマッピング、 実行する kernel の読み込みを行う</li> | 696 <li>stub Code Gear で CUDABuffer でのマッピング、実行する kernel の読み込みを行う</li> |
703 <li>stub Code Gear は CUDA で実行する際は CUDAExecutor の Code Gear に継続する</li> | 697 <li>stub Code Gear は CUDA で実行する際は CUDAExecutor の Code Gear に継続する</li> |
704 </ul> | 698 </ul> |
699 | |
700 <div style="text-align: center;"> | |
701 <img src="./images/gotoCUDAExecutor.svg" alt="message" width="600" /> | |
702 </div> | |
705 | 703 |
706 | 704 |
707 </div> | 705 </div> |
708 <div class='slide '> | 706 <div class='slide '> |
709 <!-- _S9SLIDE_ --> | 707 <!-- _S9SLIDE_ --> |
907 </div> | 905 </div> |
908 <div class='slide '> | 906 <div class='slide '> |
909 <!-- _S9SLIDE_ --> | 907 <!-- _S9SLIDE_ --> |
910 <h2 id="section-5">まとめ</h2> | 908 <h2 id="section-5">まとめ</h2> |
911 <ul> | 909 <ul> |
912 <li>Gears OS の並列処理機構の実装を行った</li> | 910 <li>Gears OS の並列処理機構を Interface を用いて実装を行った</li> |
913 <li>Interface を導入することで、見通しの良し Gears OS のプログラミングが可能となった</li> | 911 <li>Interface を導入することで、見通しの良し Gears OS のプログラミングが可能となった</li> |
914 <li>par goto 構文を導入することで、ノーマルレベルで並列処理の記述が可能になった</li> | 912 <li>par goto 構文を導入することで、ノーマルレベルで並列処理の記述が可能になった</li> |
915 <li>2つの例題である程度の台数効果が出ることを確認した</li> | 913 <li>2つの例題である程度の台数効果が出ることを確認した</li> |
916 </ul> | 914 </ul> |
917 | 915 |
920 <div class='slide '> | 918 <div class='slide '> |
921 <!-- _S9SLIDE_ --> | 919 <!-- _S9SLIDE_ --> |
922 <h2 id="section-6">今後の課題</h2> | 920 <h2 id="section-6">今後の課題</h2> |
923 <ul> | 921 <ul> |
924 <li>Gears OS の並列処理の信頼性の保証、チューニングを行う</li> | 922 <li>Gears OS の並列処理の信頼性の保証、チューニングを行う</li> |
925 </ul> | |
926 | |
927 | |
928 </div> | |
929 <div class='slide '> | |
930 <!-- _S9SLIDE_ --> | |
931 <h2 id="section-7">今後の課題</h2> | |
932 <ul> | |
933 <li>Gears OS では検証とモデル検査をメタレベルで実現することで信頼性を保証する | 923 <li>Gears OS では検証とモデル検査をメタレベルで実現することで信頼性を保証する |
934 <ul> | 924 <ul> |
935 <li>証明は CbC のプログラムを証明支援系の Agda に対応して行う。 並列処理の信頼性を保証するには SynchronizedQueue の証明を行う必要がある</li> | 925 <li>証明は CbC のプログラムを証明支援系の Agda に対応して行う。 並列処理の信頼性を保証するには SynchronizedQueue の証明を行う必要がある</li> |
936 <li>モデル検査は CbC で記述された モデル検査器である akasha を使用して行う。 モデル検査の方針としては Code Gear の並列実行を擬似並列で実行し、全ての組合せを列挙する方法で行う</li> | 926 <li>モデル検査は CbC で記述された モデル検査器である akasha を使用して行う。 モデル検査の方針としては Code Gear の並列実行を擬似並列で実行し、全ての組合せを列挙する方法で行う</li> |
937 </ul> | 927 </ul> |
938 </li> | 928 </li> |
939 </ul> | |
940 | |
941 | |
942 </div> | |
943 <div class='slide '> | |
944 <!-- _S9SLIDE_ --> | |
945 <h2 id="section-8">今後の課題</h2> | |
946 <ul> | |
947 <li>現在の CUDA 実装では CPU、GPU 間のデータの通信コストがかかってしまうことが例題からわかった | 929 <li>現在の CUDA 実装では CPU、GPU 間のデータの通信コストがかかってしまうことが例題からわかった |
948 <ul> | 930 <ul> |
949 <li>Meta Data Gear に Data Gear が CPU、 GPU のどこで所持されているのかを持たせ、 GPU の Data Gear が CPU で必要になったときに始めてデータの通信を行う</li> | 931 <li>Meta Data Gear に Data Gear が CPU、 GPU のどこで所持されているのかを持たせ、 GPU の Data Gear が CPU で必要になったときに始めてデータの通信を行う</li> |
950 </ul> | 932 </ul> |
951 </li> | 933 </li> |
953 | 935 |
954 | 936 |
955 </div> | 937 </div> |
956 <div class='slide '> | 938 <div class='slide '> |
957 <!-- _S9SLIDE_ --> | 939 <!-- _S9SLIDE_ --> |
958 <h2 id="section-9">今後の課題</h2> | 940 <h2 id="section-7">今後の課題</h2> |
959 <ul> | 941 <ul> |
960 <li>OpenMP、 Go で Twice を実装し、 Gears OS の性能比較を行った</li> | 942 <li>OpenMP、 Go 言語で Twice を実装し、 Gears OS の性能比較を行った</li> |
961 <li>その結果、 Gears OS が 1CPU での動作が遅いということがわかった。 | 943 <li>その結果、 Gears OS が 1CPU での動作が遅いということがわかった。 |
962 <ul> | 944 <ul> |
963 <li>par goto 文を使用する度に Context を生成するため、 ある程度の時間がかかってしまう</li> | 945 <li>par goto 文を使用する度に Context を生成するため、 ある程度の時間がかかってしまう</li> |
964 <li>モデル検査で par goto の Code Gear のフローを解析し、処理がかる場合は Context を生成せずに関数呼出しを行う等の最適化が必要</li> | 946 <li>モデル検査で par goto の Code Gear のフローを解析し、処理がかる場合は Context を生成せずに関数呼出しを行う等の最適化が必要</li> |
965 </ul> | 947 </ul> |
966 </li> | 948 </li> |
967 </ul> | 949 </ul> |
968 | 950 |
969 <div style="text-align: center;"> | 951 <div style="text-align: center;"> |
970 <img src="./images/compareExamples.svg" alt="message" width="600" /> | 952 <img src="./images/compareExamples.svg" alt="message" width="500" /> |
953 </div> | |
954 | |
955 | |
956 </div> | |
957 <div class='slide '> | |
958 <!-- _S9SLIDE_ --> | |
959 <h2 id="section-8">データ並列</h2> | |
960 <ul> | |
961 <li>data並列はあるデータ構造がサブデータへ分割することが可能で、各サブデータに行う処理が同じ場合に有効な並列処理手法</li> | |
962 <li>Gears OS ではdata 並列は par goto 構文に<strong>iterate(分割数)</strong>を追加することで可能になる</li> | |
963 <li>データ並列の Task は CPU で実行する際は Task にインデックスを付与して分割数分コピーして実行する</li> | |
964 <li>CUDA の場合は Kernel を実行する際にパラメーターとして分割数を渡す</li> | |
965 </ul> | |
966 | |
967 | |
968 </div> | |
969 <div class='slide '> | |
970 <!-- _S9SLIDE_ --> | |
971 <h2 id="task-">Task 間の同期処理</h2> | |
972 <ul> | |
973 <li>Context 間での同期処理を行うために Semaphore を実装</li> | |
974 <li>Semaphore はContext 停止用の待ち Queue を持つ</li> | |
975 </ul> | |
976 | |
977 <div style="text-align: center;"> | |
978 <img src="./images/semaphoreSequence.svg" alt="message" width="700" /> | |
971 </div> | 979 </div> |
972 | 980 |
973 <!-- | 981 <!-- |
974 ## OpenMP との比較 | 982 ## OpenMP との比較 |
975 - OpenMP で Twice を実装し、速度比較を行った | 983 - OpenMP で Twice を実装し、速度比較を行った |