0

プロセス 1 とプロセス 2 (以下) の両方を見る方法は、同じ時間がかかるという点で同等です。私が間違っている?

allOfData_A= data_A1 + data_A2
allOfData_B= data_B1 + data_B2
allOFData_C= data_C1 + data_C2
Data_C is the output of the kernel operation of both Data_A & Data_B.  (Like C=A+B)
The HW supports one DeviceOverlap (concurrent) operation.

プロセス 1:

MemcpyAsync data_A1 stream1 H->D
MemcpyAsync data_A2 stream2 H->D
MemcpyAsync data_B1 stream1 H->D
MemcpyAsync data_B2 stream2 H->D
sameKernel stream1
sameKernel stream2
MemcpyAsync result_C1 stream1 D->H
MemcpyAsync result_C2 stream2 D->H

プロセス 2: (同じ操作、別の順序)

MemcpyAsync data_A1 stream1 H->D
MemcpyAsync data_B1 stream1 H->D
sameKernel stream1
MemcpyAsync data_A2 stream2 H->D
MemcpyAsync data_B2 stream2 H->D
sameKernel stream2
MemcpyAsync result_C1 stream1 D->H
MemcpyAsync result_C2 stream2 D->H
4

1 に答える 1

3

CUDA ストリームを使用すると、依存する操作を同じストリームに配置することで、プログラマーは作業の依存関係を表現できます。異なるストリームでの作業は独立しており、同時に実行できます。

HyperQ (計算能力 1.0 から 3.0) のない GPU では、DMA エンジンまたは計算の作業が単一のハードウェア パイプに入れられるため、誤った依存関係が発生する可能性があります。コンピューティング機能 3.5 は、複数のハードウェア パイプを可能にする HyperQ をもたらし、そこで誤った依存関係を取得するべきではありません。simpleHyperQの例はこれを示しており、ドキュメントには何が起こっているかをより明確に説明する図が示されています。

簡単に言えば、HyperQ を備えていないデバイスでは、最大の同時実行性を得るために作業の幅優先起動を行う必要がありますが、HyperQ を備えたデバイスでは深さ優先起動を行うことができます。誤った依存関係を回避するのは非常に簡単ですが、心配する必要がない方が簡単です!

于 2013-02-12T17:38:50.420 に答える