[英]CUDA: Does passing arguments to a kernel slow the kernel launch much?
CUDA 初學者在這里。
在我的代碼中,我目前在主機代碼的循環中多次啟動內核。 (因為我需要塊之間的同步)。 所以我想知道我是否可以優化 kernel 的發布。
我的 kernel 啟動看起來像這樣:
MyKernel<<<blocks,threadsperblock>>>(double_ptr, double_ptr, int N, double x);
So to launch a kernel some signal obviously has to go from the CPU to the GPU, but i'm wondering if the passing of arguments make this process noticeably slower.
arguments 到 kernel 每次都是相同的,所以也許我可以通過復制一次來節省時間,在 kernel 中通過定義的名稱訪問它們
__device__ int N;
<and somehow (how?) copy the value to this name N on the GPU once>
並簡單地啟動沒有 arguments 的 kernel
MyKernel<<<blocks,threadsperblock>>>();
這會讓我的程序更快嗎? 這樣做的最佳方法是什么? AFAIK arguments 存儲在一些常量全局 memory 中。 我如何確保手動傳輸的值存儲在速度相同或更快的 memory 中?
提前感謝您的幫助。
我希望這種優化的好處相當小。 在健全的平台上(即除 WDDM 之外的任何平台),kernel 啟動開銷僅為 10-20 微秒左右,因此可能沒有太多 scope 需要改進。
話雖如此,如果您想嘗試,影響這一點的合乎邏輯的方法是使用常量 memory。 在翻譯單元 scope 將每個參數定義為__constant__
符號,然后使用cudaMemcpyToSymbol function 將值從主機復制到設備常量 ZCD69B4957F06CD818D7BF3D61980。
簡單的回答:沒有。
更詳細地說:無論如何,您需要從主機向 GPU 發送一些信號,以啟動 kernel 本身。 此時,再多幾個字節的參數數據就不再重要了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.