annotate paper/scheduling.tex @ 5:208ca954df56

fix
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Wed, 06 Nov 2013 21:46:55 +0900
parents 9e88a388ec83
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \section{CPUとGPUの同時実行}\label{scheduling}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 今回、 CPU と GPU 両方のデバイスで Task を実行させることに成功した。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 CPU と GPU で同時実行する場合、実行速度には差が出る。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 GPU はホスト側とPCIバスを通してデータの転送を行う。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 CPU 側の計算量によってバスの転送を圧迫する事が考えられる。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 各アーキテクチャの得意とする計算が異なる事からも実行速度に差異が出ることは自明である。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 これらの事から、 CPU と GPU に対して均等に Task を割り振ると並列度は低くなると予想できる。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 それを確認するため、ベンチマークを行った。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 \subsection{Benchmark}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 \begin{tiny}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 \begin{table}[h]
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 \begin{center}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 \caption{Run Time for Heterogeneous}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 \label{table:fft_heterogeneous}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 \small
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 \begin{tabular}[t]{c||r}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 \hline
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 &Run Time \\
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 \hline
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 GPU \& 1 CPU&542 ms \\
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 \hline
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 GPU \& 2 CPU&357 ms \\
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 \hline
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 GPU \& 4 CPU&256 ms \\
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 \hline
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 GPU \& 8 CPU&180 ms \\
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 \hline
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 \end{tabular}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 \end{center}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 \end{table}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 \end{tiny}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 セクション\ref{fft_benchmark}で用いた例題を使ってベンチマークを行う。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 CPU と GPU で Task を同時実行して時間を測定を行った(表\ref{table:fft_heterogeneous})。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 なお、 CPU と GPU に交互に Task を割り振っている。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 GPU \& 1 CPU を利用した場合,表\ref{table:fft_runtime}の
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 1 CPU を利用した場合と比較して約 0.8 倍の速度低下が見られる。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 これは各 Task に依存関係があることが原因である。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 CPU と GPU を交互に動かしているため、デバイス間でのデータの転送が増えたことがネックになっていると考えられる。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 \subsection{Scheduling}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 並列度を維持するためにアーキテクチャのコア数によってどちらかに優先して Task を振る必要がある。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 Scheduling 手法の提案を行う。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 まず並列実行する Task を CPU と GPU で事前に一度実行し、実行速度を測定する。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 Taskの実行速度の割合でアーキテクチャに重みをつけて Task を振り分けていく。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 片方が先に終わり、もう一方はまだ動いている、という状態が好ましくない。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 Task が終了するときは CPU も GPU も両方同時に実行終了するように Scheduling する事が望ましい。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 基本的には GPU の方がコア数が多いので、優先して Task を振ることになる。
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 データの転送がオーバーヘッドになる際にCPUが Task を動かすことで並列度の向上が見込める。