2013-04-16 50 views
1

上的cuda內核有沒有什麼辦法可以從內核(GPU代碼)找出代碼在哪個設備上運行?你可以找到blockIdx,threadIdx,blockDim和gridDim,但找到CUDA設備ID的任何方式?什麼設備是運行在

對於那些想知道的人,我計劃在OptiX程序中使用它來更好地控制OptiX緩衝區。

+0

你當然可以在主機上發現你需要的任何數據,然後在你調用它時將它傳遞給內核。例如'cudaSetDevice(X); mykernel <<<...> >>(x,...);' –

+0

我受到OptiX API的限制,它無法控制如何將工作分割到幾個GPU上。不過,我想確定RT_PROGRAM運行在哪個設備上,以用於內存存儲的原因。因此,我需要在設備/內核端找到它,即。我需要一個__ device __標記的函數。 – apartridge

+1

您可以使用'__device__'變量來存儲設備ID,因爲顯然這是每個設備... – tera

回答

1

這適用於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)); 
} 
相關問題