我已經分離出了一些互不相同的函數,但需要在不同的工作項中並行運行。因此,當內核被調用,它需要決定哪些功能已被執行..我怎樣才能優化我的OpenCl內核
void call_calc0() {
// code
}
void call_calc1() {
// code
}
void call_calc2() {
// code
}
void call_calc3() {
// code
}
__kernel void perform (__global double* A, __global double* B) {
int idx = get_global_id(0);
if (idx == 0) {
call_calc0();
} else if (idx == 1) {
call_calc1();
} else if (idx == 2) {
call_calc2();
} else if (idx == 3) {
call_calc3();
}
}
如果有256/512工作項,此代碼示例將不會是一個正確的做法。我如何優化這個?
我可以想到函數指針和預處理器的方式..但是,有可能在OpenCl中使用函數指針? –
OpenCL中不允許使用函數指針。你是說每一個工作項目都必須執行完全不同的代碼? – jprice
是的。但在相同的緩衝區上。單獨的單個緩衝塊。是否有可能..我做了一些測試@jprice如果我替換if-else單個「if」條件..然後編譯變得非常快...代碼將如果(idx == 1){calc1}; if(idx == 2){calc2} ... –