Mercurial > hg > Papers > 2011 > yutaka-jssst
comparison paper/datasegment.ind @ 9:504aea3b42be
fix
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 11 Aug 2011 17:38:00 +0900 |
parents | e62c3a665813 |
children | 99f297cb7d34 |
comparison
equal
deleted
inserted
replaced
8:e62c3a665813 | 9:504aea3b42be |
---|---|
52 | 52 |
53 Data segment は型を持っていて、その型は実行時に一致している必要がある。分散通信を考えて、Data segment の型は MessagePack \cite{MessagePack} を用いる。 | 53 Data segment は型を持っていて、その型は実行時に一致している必要がある。分散通信を考えて、Data segment の型は MessagePack \cite{MessagePack} を用いる。 |
54 | 54 |
55 --C++ との相性 | 55 --C++ との相性 |
56 | 56 |
57 Cerium の Task は、Cell のspuとppuで共通であり、同じ Task ID で管理されている。これは C++ のオブジェクトとは関係ない。Cerium の開発でわかったのは、Cerium のデータは、Actor の become 的\cite{Act3} に書き換えられるということである。 | 57 Cerium の Task は、Cell のspuとppuで共通であり、同じ Task ID で管理されている。これは C++ のオブジェクトとは関係ない。Cerium の開発でわかったのは、Cerium のデータは、Actor の become 的\cite{Act3} に書き換えられるということである。C++のようなポインタを使い合わし、オブジェクトの内部の書き換えで状態を作るようなオブジェクト指向プログラミングと、細分化したTaskを並列に廻す Ceirum のようなシステムとの相性は良くない。 |
58 Task の入力と出力は異なる場所に書かれる。処理は、常にダブルバッファを用いて行われているのでそのようになる。 | |
58 | 59 |
60 --階層的パイプライン | |
59 | 61 |
62 プログラム中の自明な並列性は、データ並列とループのパイプラインの二つであり、パイプラインはプログラムの中で、様々なレベルで行われる。Task そのものは入力データから出力データを計算するだけなので単純だが、その入出力データをダブルバッファリングとして切替えたり、適切な並列度を得られるように徐々に生成するのは非常に繁雑になる。 | |
63 | |
64 これらのデータの管理は、中心となるアルゴリズムとは別に並列実行を行うアーキテクチャに特化した処理が必要となる。例えば、分散環境で並列処理するのか、MPIなのか、Cell や Open CL なのかによって異なる。これらを、すべて Task という一括りで扱うと並列計算しない複雑なTaskができてしまう。 | |
65 | |
66 これらのデータ管理用の Task は、本質的には Data Segment に対する Iterator であり、ライブラリまたはコンパイラにより生成されるべきものだと考えられる。 | |
60 | 67 |
61 --Data Segment を用いた Cerium の再設計 | 68 --Data Segment を用いた Cerium の再設計 |
69 | |
70 Cell 用のTaskManager Cerium の再設計の方針としては以下のようになる。 | |
71 | |
72 CbCのCode segment の導入 | |
73 定型的な Data 単位である Data | |
62 | 74 |
63 ---Data Segment の型 | 75 ---Data Segment の型 |
64 | 76 |
65 ---Data Segment のAPI | 77 ---Data Segment のAPI |
66 | 78 |