是否可以在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