是否可以在OpenCL代碼中定義我自己的函數,以便內核可以調用它們?是的,我在哪裏可以看到一些簡單的例子?OpenCL用戶定義的內聯函數
9
A
回答
5
基於代碼樣本here你可以寫這樣的功能:
inline int add(int a,int b)
{
return a+b;
}
(如看在DXTC或雙調排序例子.cl文件中。)
我不知道這是否是nvidia唯一的擴展,但OpenCL文檔討論的是「輔助功能」以及內核。
3
13
功能...
cl_program clCreateProgramWithSource (
cl_context context,
cl_uint count,
const char **strings,
const size_t *lengths,
cl_int *errcode_ret)
您可以將串參數像這裏面的功能,
float AddVector(float a, float b)
{
return a + b;
}
kernel void VectorAdd(
global read_only float* a,
global read_only float* b,
global write_only float* c)
{
int index = get_global_id(0);
//c[index] = a[index] + b[index];
c[index] = AddVector(a[index], b[index]);
}
現在你已經一個用戶自定義函數「AddVector」和一個內核函數「VectorAdd」
2
我搜索了一下,只是不斷回到這個問題:-P
最後,我所做的是使用宏,因爲無論如何內聯將依賴於實現,並且宏在c99 OpenCL程序的上下文中似乎沒有任何主要的缺點?例如:
#define getFilterBoardOffset(filter, inputPlane) \
((filter * gInputPlanes + inputPlane) * gFilterSizeSquared)
#define getResultBoardOffset(n, filter) \
((n * gNumFilters + filter) * gOutputBoardSizeSquared)
代替:
inline float getFilterBoardOffset(float filter, int inputPlane) {
return (filter * gInputPlanes + inputPlane) * gFilterSizeSquared;
}
inline float getResultBoardOffset(float n, int filter) {
return (n * gNumFilters + filter) * gOutputBoardSizeSquared;
}
相關問題
- 1. 內聯函數定義
- 2. OpenCL內聯函數可以返回OpenCL類型嗎?
- 3. Qt C++ - 未定義的引用...內聯QImage自定義函數
- 4. 一個定義規則 - 內聯函數
- 5. 如何根據Matlab中的另一個內聯函數定義內聯函數?
- 6. 如何在OpenCL中定義函數?
- 7. OpenCL內核定義語法
- 8. 定義一個調用其他函數的內聯函數是否有意義?
- 9. 嵌套內核函數opencl
- 10. OpenCL內置函數'select'
- 11. OpenCL內核參數歧義
- 12. 調用內聯函數時未定義的引用
- 13. 從用戶定義函數
- 14. XSLT用戶定義函數
- 15. 用戶自定義函數
- 16. MySQL:用戶定義函數
- 17. 用戶定義函數
- 18. JFreeChart 2D函數繪製用戶定義的自定義函數
- 19. 函數定義之前的調用不能被內聯?
- 20. 從內聯事件調用的自定義jQuery函數
- 21. 如何禁用zsh中的內聯函數定義
- 22. OpenCL內核中的自定義類型
- 23. 使用用戶定義的函數內部的ob_start()出錯
- 24. 調用SQL用戶定義函數中其他用戶定義函數
- 25. f:ajax onevent不能使用預定義函數,但可以使用內聯函數
- 26. 聯動的內聯函數
- 27. 內聯函數和調用約定
- 28. 未定義引用與內聯析構函數
- 29. G ++警告,使用內聯虛函數,但沒有定義
- 30. 內自定義的函數
老問題......其他任何你從一個答案需要什麼? – 2011-08-09 17:06:01
似乎標題和問題是不同的?標題特別要求'inline',而問題只是詢問我們是否可以定義我們的函數...... – 2015-01-10 05:14:16