我想寫以下CUDA功能:我可以檢查地址是否在共享內存中?
void foo(int* a, size_t n)
{
if (/* MAGIC 1 */) {
// a is known to be in shared memory,
// so use it directly
}
else {
// make a copy of a in shared memory
// and use the copy
}
}
在主機方面,我們有一個輕微相關設施中的cudaPointerGetAttributes形式,它可以告訴我們一個指針是否爲設備內存或主機內存;也許還有一些方法可以區分設備代碼中的指針,也可以從全局指針中辨別共享。或者,甚至可能更好 - 也許有編譯時機制來做到這一點,因爲畢竟,設備函數只被編譯到內核中,並不是獨立的,所以nvcc
通常可以知道它們是用於共享內存還是不。
偉大的:-)你能解釋一下爲什麼我一開始需要額外的Win64專用伏都教嗎?另外,PTX指南說我們有「通用」存儲器地址,據說是空間專用地址。這對你的答案如何? – einpoklum
我補充說,「巫術」,以防萬一任何人試圖在32位模式下編譯。如果你知道你的代碼總是64位的,你可以直接使用指針的''l''約束。 – tera
...編輯到你的答案。 – einpoklum