Hello大家好, 舉一個例子考慮兩個openCL內核一個內核讓我們說add和other是sub。重新利用openCL內存
加載內核是
__kernel void add(global int *output1,global int *input1,global int *input2
/* Put other parameters here */
)
{
int i = get_global_id(0);
output1[i] = input1[i] + input2[i];
}
子內核是
__kernel void add(global int *output2,global int *input1,global int *input2
/* Put other parameters here */
)
{
int i = get_global_id(0);
output2[i] = input1[i] - input2[i];
}
這兩個內核,其2個輸入是相同的,我需要複製相同的輸入(輸入1 &輸入2)兩次到裝置從主機內存,這可能會增加性能方面的成本。
有什麼辦法讓我可以複製一次數據,並在任何函數中重新使用它,直到我不釋放內存?
爲什麼你需要複製相同的輸入兩次?你可以在設備內存中創建緩衝區,並且可以通過使用clSetKernelArg()重新定義內核參數來重用它們(當然,除非你想同時使用它們*這更加棘手,而且我不確定它是事實上甚至被OpenCL標準所允許)。 – Thomas