、
// tmp-store
// tmp2-compute
// tmp3-load
pipelineEvent[0]=async_work_group_copy(&b[g*gs],tmp,gs,pipelineEvent[0]);
pipelineEvent[0]=async_work_group_copy(tmp3,&e[g*gs],gs,pipelineEvent[0]);
tmp2[l]=tmp2[l]+3;
wait_group_events(1,&pipelineEvent[0]);
は
// tmp-store
// tmp2-compute
// tmp3-load
pipelineEvent[0]=async_work_group_copy(&b[g*gs],tmp,gs,0);
pipelineEvent[1]=async_work_group_copy(tmp3,&e[g*gs],gs,0);
tmp2[l]=tmp2[l]+3;
wait_group_events(2,&pipelineEvent[0]);
と同じレイテンシで同じ出力を与えるので、スペック "とは、複数の非同期コピーで共有" についての権利でなければなりません。
たぶん
event_t
内部カウンタを持っています。次いで1によって多分
async_work_group_copy
インクリメントそれを(またはNによって=グループ当たりのワークアイテムの数)
- は非同期完了すると、スケジューラは1(1によって各ワークアイテムデクリメント)
wait_group_events
か否かを調べることにより、カウンタデクリメントそれはゼロです。
したがって、90個のイベントまたは1個のイベントを使用するかどうかは関係ありません(さらに推測しません)。
しかし、1に近づく場合、実装は単に「非同期」を行うには指示インタリーブする場合
、THAスペック投機に参加し「また関連付けるために使用することができます」:
を
multiple events for multiple async copies
copy1 calculate copy2 calculate copy1 calculate copy2 calculate copy1
single event for multiple async copies(grouped copies)
copy1 copy2 calculate copy1 copy2 calculate copy1 copy2 calculate
各非同期反復で2回ではなく1回コピーをグループ化してチェックすると(完了に対して)待機バリアが細かくなる可能性があります。
実装では、複写同時に非同期ない場合(そのような計算のためのSIMDパイプラインを使用しながらコピーのスカラーパイプラインを使用するなどの、NCUは、例えば、各計算ユニット内2xScalarユニットと30xSIMD単位を有する):
multiple events for multiple copies
SIMD: compute compute compute compute
scalar-1: copy1 copy1 copy1 copy1
scalar-2: copy2 copy2 copy2 copy2
single event for multiple copies
SIMD: compute compute compute compute
scalar-1:copy1 copy2 copy1 copy2 copy1 copy2
scalar-2: copy1 copy2 copy1 copy2 copy1 copy2
読み取りと書き込みが異なるパイプライン上で独立して行われるため、複数のイベントバージョンが高速になる可能性があります。
CPUは、GPU、FPGAは全く違う仕事ができるとasync_work_group_copy
は、プリミティブ(またはそのベクトル型)を使用したアクセスを合体したメモリを推測私たちを停止するためにサポートされているので、私は便利と思われるイベント処理のいずれかのバージョンを使用すると思います。