1
上的cuda內核有沒有什麼辦法可以從內核(GPU代碼)找出代碼在哪個設備上運行?你可以找到blockIdx,threadIdx,blockDim和gridDim,但找到CUDA設備ID的任何方式?什麼設備是運行在
對於那些想知道的人,我計劃在OptiX程序中使用它來更好地控制OptiX緩衝區。
上的cuda內核有沒有什麼辦法可以從內核(GPU代碼)找出代碼在哪個設備上運行?你可以找到blockIdx,threadIdx,blockDim和gridDim,但找到CUDA設備ID的任何方式?什麼設備是運行在
對於那些想知道的人,我計劃在OptiX程序中使用它來更好地控制OptiX緩衝區。
這適用於OptiX 3.0和3.5,但我不能保證它總能正常工作。我們應該在未來的版本中爲此提供一個真正的API。
namespace rti_internal_register
{
__device__ unsigned reg_device_id;
}
rtBuffer<uchar4, 2> output_buffer;
RT_PROGRAM void pinhole_camera()
{
if(rti_internal_register::reg_device_id == 0)
output_buffer[launch_index] = make_color(make_float3(0.5, 0.0, 0.0));
else
output_buffer[launch_index] = make_color(make_float3(0.0, 0.5, 0.0));
}
你當然可以在主機上發現你需要的任何數據,然後在你調用它時將它傳遞給內核。例如'cudaSetDevice(X); mykernel <<<...> >>(x,...);' –
我受到OptiX API的限制,它無法控制如何將工作分割到幾個GPU上。不過,我想確定RT_PROGRAM運行在哪個設備上,以用於內存存儲的原因。因此,我需要在設備/內核端找到它,即。我需要一個__ device __標記的函數。 – apartridge
您可以使用'__device__'變量來存儲設備ID,因爲顯然這是每個設備... – tera