我想根據條件在opencl內核的輸出數組中輸入一些值。所以我想在每個輸入到數組中的值後增加數組的索引。由於需要滿足條件,所以輸出數組索引是未知的。我現在用的是輸出數組索引作爲參數:OpenCL - 陣列的內核增量索引
__kernel void match(__global float* input, __global float* output, int pos)
{
if(condition)
{
output[pos] = input[get_global_id(0)];
atomic_inc(&pos); // this is where the problem lies
}
}
我也想給POS機作爲數組
__kernel void match(__global float* input, __global float* output, __global int* pos)
{
if(condition)
{
output[pos[0]] = input[get_global_id(0)];
atomic_inc(pos[0]); // this is where the problem lies
}
}
的clBuildProgram與這兩種情況下的錯誤代碼-11返回。它工作時,我增加了值pos ++,但沒有返回任何數組的位置的最終值。
任何人都可以解釋我做錯了什麼?
對不起,不包括get_global_id(0)。但是,是的,我只想將這些輸入元素放入通過某種條件的輸出中。所以對於某個線程,如果條件通過,輸出數組會增加。這是一個需要轉換爲並行的順序問題嗎? – shunyo
你也可以給我一個在飛行中計算位置的想法嗎?在順序版本中,當條件滿足時,我使用了vector和push_back()。 – shunyo
嗨Shunyo, 對不起,延遲響應。最簡單的方法是使輸入和輸出數組的大小相同。如果條件滿足,則將該值放入輸出數組中,否則放置0(或-1)。除此之外,如果不知道算法,它確實很難。在OpenCL中實現的C++中沒有真正的動態向量。 – Austin