Mercurial > hg > Papers > 2015 > yuhi-master
comparison paper/chapter4.tex @ 77:f9b73e12a52f
fix
author | Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 23 Feb 2015 19:12:19 +0900 |
parents | 7956856211c5 |
children |
comparison
equal
deleted
inserted
replaced
76:4a4d4ef632d0 | 77:f9b73e12a52f |
---|---|
1 \chapter{マルチコアへの対応} | 1 \chapter{マルチコアへの対応} |
2 Cerium は Cell 上で並列に動作するフレームワークであったが、 Mac OS X 、 Linux 上でも並列に実行させることを可能にした。 | 2 Cerium は Cell 上で並列に動作するフレームワークであった\cite{yutaka:2012a}が、 |
3 Mac OS X 、 Linux 上でも並列に実行させることを可能にした。\cite{daichi:2012a} | |
3 | 4 |
4 \section{マルチコア上での実行の機構} | 5 \section{マルチコア上での実行の機構} |
5 Cell には MailBox という機能がある。 | 6 Cell には MailBox という機能がある。 |
6 Cell は Shared Memory でないので、 Memory に直接アクセスできない。 | 7 Cell は Shared Memory でないので、 Memory に直接アクセスできない。 |
7 そこで MailBox を用いて双方向のデータの受け渡しを可能にしている。 | 8 そこで MailBox を用いて双方向のデータの受け渡しを可能にしている。 |
16 \section{DMA} | 17 \section{DMA} |
17 Cell ではデータの受け渡しとして MailBox 以外に DMA 転送を使用する方法がある。 | 18 Cell ではデータの受け渡しとして MailBox 以外に DMA 転送を使用する方法がある。 |
18 CPU を介さずに周辺装置とメモリ間でデータ転送を行う方式である。 | 19 CPU を介さずに周辺装置とメモリ間でデータ転送を行う方式である。 |
19 | 20 |
20 Cerium も DMA 転送を用いている箇所がある。 | 21 Cerium も DMA 転送を用いている箇所がある。 |
21 しかしマルチコア CPU 上で実行する場合は各 CPU で同じメモリ空間を利用できる。 | 22 しかし現在主流のアーキテクチャでは DMA をサポートしていない。 |
22 よって DMA 転送を用いていた部分をポインタ渡しを行うように修正し、 | 23 マルチコア CPU 上で実行する場合は各 CPU で同じメモリ空間を利用できるため、 |
24 DMA 転送を用いていた部分をポインタ渡しを行うように修正した。 | |
23 メモリに直接アクセスさせることで速度の向上が見込める。 | 25 メモリに直接アクセスさせることで速度の向上が見込める。 |
24 | 26 |
25 更に、DMA には prefetch 機能がある。 | 27 更に、Cerium には prefetch 機能がある。 |
26 DMA の転送効率を向上させるため、 DMA で転送する送信データを予め取り込むことができる。 | 28 データの転送効率を向上させるため、転送する送信データを予め取り込むことができる。 |
27 Cerium では DMA によるprefetch、DMA を用いないポインタ渡し、更に明示的なコピーによるデータ転送をサポートする。 | 29 Cerium ではprefetch、prefetch を用いないポインタ渡し、更に明示的なコピーによるデータ転送をサポートする。 |
28 | 30 |
29 \section{データ並列} | 31 \section{データ並列} |
30 \label{sec:multicore_dataparallel} | 32 \label{sec:multicore_dataparallel} |
31 並列プログラミングを行う際、並列化の方式としてタスク並列とデータ並列の2つがある。 | 33 並列プログラミングを行う際、並列化の方式としてタスク並列とデータ並列の2つがある。 |
32 Cerium における並列処理は、タスク並列により実現されている。 | 34 Cerium における並列処理は、タスク並列により実現されている。 |
36 プログラムを並列化する際はどちらの並列化手法が適しているか考える必要がある。 | 38 プログラムを並列化する際はどちらの並列化手法が適しているか考える必要がある。 |
37 独立した Task が充分にある場合はタスク並列が有効となる。 | 39 独立した Task が充分にある場合はタスク並列が有効となる。 |
38 処理対象となるデータが充分な数のサブデータへ分割することが可能で、 | 40 処理対象となるデータが充分な数のサブデータへ分割することが可能で、 |
39 サブデータへの処理を行うことが元のデータへの処理と同じになる場合、データ並列が有効となる。 | 41 サブデータへの処理を行うことが元のデータへの処理と同じになる場合、データ並列が有効となる。 |
40 | 42 |
41 本研究で Cerium でデータ並列による実行を可能にした。 | 43 本研究で Cerium でデータ並列による実行を可能にした\cite{yuhi:2013a}。 |
42 Cerium でデータ並列実行を行う場合、Task を spwan API でなく iterate API で生成すればよい。 | 44 Cerium でデータ並列実行を行う場合、Task を spwan API でなく iterate API で生成すればよい。 |
43 iterate API は複数の length を引数とし、 | 45 iterate API は複数の length を引数とし、 |
44 length の値がデータ分割後に各 Task が担当するサイズ、length の個数がデータの次元数となる。 | 46 length の値がデータ分割後に各 Task が担当するサイズ、length の個数がデータの次元数となる。 |
45 これを元にScheduler が各 Task が担当する index を計算し、Task に set\_param する。 | 47 これを元にScheduler が各 Task が担当する index を計算し、Task に set\_param する。 |
46 | 48 |