2017-03-17 3 views
1

私はOpenCLの1.1標準(セクション6.11.10(いくつかのasync_work_group_copyを「グループ」)は、単一のイベントで呼び出す

から次の引用は、イベントの引数はにも使用することができ、右アム async_work_group_copyを以前の非同期コピーと関連付けて、 へのイベントを複数の非同期コピーで共有できるようにします。

は、私は、「グループ」、複数の単一のイベントとasync_work_group_copy()通話と使用完了するために、オペレーションをコピーするグループ全体を待つのみというイベントでし意味しますか?

備考:以下のブログ投稿でusing_local()カーネルのコードスニペットは、まさにそれを行う、ようですか?インテルiGPUで https://streamcomputing.eu/blog/2014-06-19/using-async_work_group_copy-on-2d-data/

答えて

2

// 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は、プリミティブ(またはそのベクトル型)を使用したアクセスを合体したメモリを推測私たちを停止するためにサポートされているので、私は便利と思われるイベント処理のいずれかのバージョンを使用すると思います。

関連する問題