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 を実装し、速度比較を行った