是否可以在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. 一个定义规则 - 内联函数
- 4. 如何在OpenCL中定义函数?
- 5. 如何根据Matlab中的另一个内联函数定义内联函数?
- 6. OpenCL内置函数'select'
- 7. OpenCL内核中的自定义类型
- 8. 从用户定义函数
- 9. 用户定义函数
- 10. 从内联事件调用的自定义jQuery函数
- 11. 函数定义之前的调用不能被内联?
- 12. 联动的内联函数
- 13. 内自定义的函数
- 14. 调用用户定义的C函数
- 15. 使用用户定义的函数
- 16. 用户自定义函数的用法
- 17. 内联函数
- 18. 内联函数
- 19. 内联函数
- 20. 操纵用户定义的函数内的data.table对象
- 21. 用户定义的函数numpy的外
- 22. 内联函数调用静态内联函数
- 23. 内联函数在其他内联函数用C
- 24. sybase用户定义函数 - “非确定性”或“非法内置函数”错误
- 25. 定义静态二维数组与内联函数
- 26. 从函数返回内联定义的枚举?
- 27. 模板专业化:非内联函数的定义问题
- 28. 是否可以分离内联函数的声明和定义?
- 29. C内联函数和“未定义的外部”错误
- 30. tsql用户定义的函数
老问题......其他任何你从一个答案需要什么? – 2011-08-09 17:06:01
似乎标题和问题是不同的?标题特别要求'inline',而问题只是询问我们是否可以定义我们的函数...... – 2015-01-10 05:14:16