私はCUDAのイメージフィルタを使っています。画像処理はCPUよりもはるかに高速です。しかし問題は、画像の割り当てが本当に遅いことです。CUDAメモリ割り当てのパフォーマンス
これは、私がメモリを割り当ててイメージを設定する方法です。
hr = cudaMalloc(&m_device.originalImage, size);
hr = cudaMalloc(&m_device.modifiedImage, size);
hr = cudaMalloc(&m_device.tempImage, size);
hr = cudaMemset(m_device.modifiedImage, 0, size);
hr = cudaMemcpy(m_device.originalImage, host.originalImage, size, cudaMemcpyHostToDevice);
これはプログラムを実行した結果です。
C:\cpu_gpu_filters(GPU)\x64\Release>cpu_gpu_filters test-case.txt
C:\Users\Max\Desktop\test_set\cheshire_cat_1280x720.jpg
Init time: 519 ms
Time spent: 2.35542 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_1366x768.jpg
Init time: 31 ms
Time spent: 2.68595 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_1600x900.jpg
Init time: 44 ms
Time spent: 3.54835 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_1920x1080.jpg
Init time: 61 ms
Time spent: 4.98131 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_2560x1440.jpg
Init time: 107 ms
Time spent: 9.0727 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_3840x2160.jpg
Init time: 355 ms
Time spent: 20.1453 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_5120x2880.jpg
Init time: 449 ms
Time spent: 35.815 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_7680x4320.jpg
Init time: 908 ms
Time spent: 75.4647 ms
時間測定とUPDコード:
start = high_resolution_clock::now();
Initialize();
stop = high_resolution_clock::now();
long long ms = duration_cast<milliseconds>(stop - start).count();
long long us = duration_cast<microseconds>(stop - start).count();
cout << "Init time: " << ms << " ms" << endl;
start = high_resolution_clock::now();
GpuTimer gpuTimer;
gpuTimer.Start();
RunGaussianBlurKernel(
m_device.modifiedImage,
m_device.tempImage,
m_device.originalImage,
m_device.filter,
m_filter.width,
m_host.originalImage.rows,
m_host.originalImage.cols
);
gpuTimer.Stop();
最初の画像は最小であるが、初期化は、519ミリ秒を要します。たぶん、それはドライバや何かをロードする必要があるからです。そして、画像のサイズが大きくなると、初期化時間も長くなる。実際は、これは論理的に見えますが、私はまだ初期化プロセスが遅いことを確認していません。私は何か間違っているのですか?
あなたのコードでは、開始時間と終了時間を測定していますか? – Makketronix
@Makketronix、私は時間を測定する方法は正しいと確信していますが、質問を更新しました。問題は、初期化に時間がかかりすぎるのが正常かどうかです。 – Max
Hmm。あなたは "Debug"または "Release"をビルドしていますか?私は "Debug"ビルドの前にパフォーマンス上の問題がありました。 – Makketronix