view paper/scheduling.tex @ 11:4ecae227af0c

write concurrency
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Tue, 05 Nov 2013 07:21:34 +0900
parents ad68ef71b28e
children 05a67420ce5c
line wrap: on
line source

\section{CPUとGPUの同時実行}\label{scheduling}
CPU と GPU で同時実行する場合、実行速度には差が出る。
 GPU はホスト側とPCIバスを通してデータの転送を行う。
 CPU 側の計算量によってバスの転送を圧迫する事が考えられる。
他にも、各アーキテクチャの得意とする計算が異なる事からも実行速度に差異が出ることが予想できる。
これらの事から、 CPU と GPU に対して均等に Task を割り振ると並列度は低くなる。
並列度を維持するためにアーキテクチャのコア数によってどちらかに優先して 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{table:fft_heterogeneous}は,セクション\ref{fft_benchmark}で用いた例題を,CPU,GPU で Task を順番に割り振って同時実行して時間を測定を行った。
GPU \& 1 CPU を利用した場合,表\ref{table:fft_runtime}の 1 CPU を利用した場合と比較して約 0.8 倍の速度低下が見られる。これは各 Task に依存関係があり,交互に Task を割り振っているため CPU,GPU 間でのデータの転送が増えたことがネックになっていると考えられる。
\subsection{Scheduling}
 Scheduling を行う際は、並列実行する Task を CPU と GPU で事前に一度実行し、実行速度を測定する。
それぞれの実行速度の割合で重みをつけて Task を振り分けていく。

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