0
我是新GPU的發展,我想知道有多少工人(線程),併發執行我的內核,所以我用下面的內核OpenCL的工人數始終爲1
kernel void helloWorld(global int* result)
{
int gid = 0;
gid = get_local_id(0);
if (gid > result[0])
{
result[0] = gid;
}
}
但酷睿i7英特爾的結果運行時[0]始終爲0;並且在nvidia GPU上運行時,它始終爲0
'我想知道同時有多少工人(線程)......什麼?!當你啓動內核時,這個數字是由* you *選擇的! –
通過爲本地工作組大小指定NULL,可以將其留給運行時間。然而,這段代碼並不正確,因爲對'result [0]'的訪問不是原子的。所有線程都將讀取初始值(如果在運行內核之前清除緩衝區,則大概爲0),然後寫入它們的值,這會導致競爭狀態。相反,讓每個工作項將其本地ID寫入由其全局ID索引的緩衝區位置。結果會因設備而異。 – Dithermaster