簡體   English   中英

CUDA:將 arguments 傳遞給 kernel 會減慢 Z50484C19F1AFDAF3841A0D821ED393D2 的啟動速度嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM