-1

I am working with a cuda program which I managed to assign a work to one Stream Multiprocessor. For example, I have the works A and B and my GPU has 2 SMs (SM0 and SM1). Are there ways to assign the work A exactly to SM0 and the work B to SM1?

Can you suggest me some ways to do that?

Thanks for your help.

4

1 に答える 1

1

1 つのアプローチは、(たとえば) kernelA に作業 A を実装し、kernelB に作業 B を実装し、両方を別々のストリームで 1*1 グリッドとして起動することです。Fermi および Kepler GPU では、このようなカーネルを同時に実行できるためです。1*1 グリッド起動の理由は、複数のブロックがある場合、それらのブロックが異なる SM で実行される可能性があり、その場合、2 つのカーネルを同時に実行できない (つまり、1 つのカーネル/SM のみ) ためです。

cudaStream_t stream1, stream2;
cudaStreamCreate ( &stream1 );
cudaStreamCreate ( &stream2 );
kernelA<<<1, 512, 0, stream1>>>(...);
kernelB<<<1, 512, 0, stream2>>>(...);
...

詳細については、この NVIDIA プレゼンテーションを参照してください。

于 2012-11-12T13:45:14.837 に答える