view paper/scheduling.tex @ 6:744885be1943 default tip

fix
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Wed, 06 Nov 2013 22:23:07 +0900
parents 9e88a388ec83
children
line wrap: on
line source

\section{CPUとGPUの同時実行}\label{scheduling}
今回、 CPU と GPU 両方のデバイスで Task を実行させることに成功した。
CPU と GPU で同時実行する場合、実行速度には差が出る。
 GPU はホスト側とPCIバスを通してデータの転送を行う。
 CPU 側の計算量によってバスの転送を圧迫する事が考えられる。
各アーキテクチャの得意とする計算が異なる事からも実行速度に差異が出ることは自明である。
これらの事から、 CPU と GPU に対して均等に Task を割り振ると並列度は低くなると予想できる。
それを確認するため、ベンチマークを行った。
\subsection{Benchmark}
\begin{tiny}
  \begin{table}[h]
    \begin{center}
      \caption{Run Time for Heterogeneous}
      \label{table:fft_heterogeneous}
      \small
      \begin{tabular}[t]{c||r}
        \hline
        &Run Time \\
        \hline
        GPU \& 1 CPU&542 ms \\
        \hline
        GPU \& 2 CPU&357 ms \\
        \hline
        GPU \& 4 CPU&256 ms \\
        \hline
        GPU \& 8 CPU&180 ms \\
        \hline
      \end{tabular}
    \end{center}
  \end{table}
\end{tiny}
セクション\ref{fft_benchmark}で用いた例題を使ってベンチマークを行う。
 CPU と GPU で Task を同時実行して時間を測定を行った(表\ref{table:fft_heterogeneous})。
なお、 CPU と GPU に交互に Task を割り振っている。
GPU \& 1 CPU を利用した場合,表\ref{table:fft_runtime}の
1 CPU を利用した場合と比較して約 0.8 倍の速度低下が見られる。
これは各 Task に依存関係があることが原因である。
 CPU と GPU を交互に動かしているため、デバイス間でのデータの転送が増えたことがネックになっていると考えられる。
\subsection{Scheduling}
並列度を維持するためにアーキテクチャのコア数によってどちらかに優先して Task を振る必要がある。

Scheduling 手法の提案を行う。
まず並列実行する Task を CPU と GPU で事前に一度実行し、実行速度を測定する。
Taskの実行速度の割合でアーキテクチャに重みをつけて Task を振り分けていく。

片方が先に終わり、もう一方はまだ動いている、という状態が好ましくない。
 Task が終了するときは CPU も GPU も両方同時に実行終了するように Scheduling する事が望ましい。
基本的には GPU の方がコア数が多いので、優先して Task を振ることになる。
データの転送がオーバーヘッドになる際にCPUが Task を動かすことで並列度の向上が見込める。