1

私のcudaコードがgpu上でどれだけ速いか(データはすでにコピーされています)、私のコードがCPU上でどれだけ速いかを比較したいと思います。

cuda-code での測定は次のように行われます

    cudaEvent_t start, stop;
    cudaEventCreate(&start);
    cudaEventRecord(start,0);

   //Kernel Execution
    transformKernel7<<<grid,threads>>>(dev_result, width, height, angle, N);

    cudaEventCreate(&stop);
    cudaEventRecord(stop,0);
    cudaEventSynchronize(stop);
    cudaEventElapsedTime(&cuTime, start,stop);

今、私は自分のコードを C# で測定したいと考えています。次のコードがあります

var sw = Stopwatch.StartNew();

//making some calculation....

var elapsed = sw.ElapsedMilliseconds;

私の問題は、sw.ElapsedMilliseconds が十分に正確でないことです。0.02490834 の時間に 0 を返します。

ティックを使用しますが、ティックを適切な結果に再計算する方法がわかりません。私の Cuda コードの時間は、0.058938483 のような私の値を与えることができます。ストップウォッチは十分に正確ではありません。

何か案は?

4

2 に答える 2

2

ElapsedMilliseconds経過した整数時間を返します。したがって、そのプロパティを介して小数部分を取得することはできません。自分で計算する必要があります。

より正確な時間が必要な場合は、 を で割っElapsedTicksStopwatch.Frequency時間を秒単位で取得します。次に、必要な時間の単位に変換します。

var elapsedMilliseconds = (double)(sw.ElapsedTicks * 1000L) / Stopwatch.Frequency;
于 2012-10-09T17:09:53.613 に答える
0

MSDNによると、Ticksは長いタイプであり、1ミリ秒に10,000個あります。したがって、その計算を手動で行うことができます。

sw.ElapsedMillisecondsプロパティの問題の一部は、varデータ型の使用である可能性があります。出力は、varがintとしてコンパイルされていることを示しています。変数の型を自分で定義すれば、コンパイラーは変数に間違った型を与えません。 http://msdn.microsoft.com/en-us/library/bb383973.aspx

于 2012-10-09T16:54:50.150 に答える