我需要帮助优化以下一组着色器:
顶点:
precision mediump float;
uniform vec2 rubyTextureSize;
attribute vec4 vPosition;
attribute vec2 a_TexCoordinate;
varying vec2 tc;
void main() {
gl_Position = vPosition;
tc = a_TexCoordinate;
}
Run Code Online (Sandbox Code Playgroud)
分段:
precision mediump float;
/*
Uniforms
- rubyTexture: texture sampler
- rubyTextureSize: size of the texture before rendering
*/
uniform sampler2D rubyTexture;
uniform vec2 rubyTextureSize;
uniform vec2 rubyTextureFract;
/*
Varying attributes
- tc: coordinate of the texel being processed
- xyp_[]_[]_[]: a packed coordinate for 3 areas within the texture
*/
varying vec2 …Run Code Online (Sandbox Code Playgroud) Mali OpenCL SDK允许在Mali GPU上执行opencl代码.
是否可以使用Mali OpenCL SDK在ARM CPU(Cortex-a7)上执行OpenCL代码?
我正在尝试在资源较少的嵌入式 GPU 上运行一些为桌面显卡编写的 OpenCL 内核。特别是,桌面版本假设始终支持至少 256 的工作组大小,但基于 Mali T628 ARM 的 GPU 仅保证 64+ 的工作组大小。
事实上,一些内核报告CL_KERNEL_WORK_GROUP_SIZE只有 64,我不知道为什么。我检查了CL_KERNEL_LOCAL_MEM_SIZE有问题的内核,它是 <2 KiB,而CL_DEVICE_LOCAL_MEM_SIZE32 KiB,所以我想我可以排除__local存储。
还有哪些其他因素(例如,寄存器/__private内存?)导致 low CL_KERNEL_WORK_GROUP_SIZE,我如何检查使用情况?我对程序化内省(例如clGetKernelWorkGroupInfo()我已经做过一些)以及我可能不知道的任何开发工具都持开放态度。
编辑:
内核是 OpenCV 的 OpenCL v2.4 模块的一部分。特别是,内核icvCalcOrientation在surf.cl. 代码相当复杂,并且设置了多个编译时参数,这就是为什么手动分析内核以查找问题而不提示要查看的内容有点不可行的原因。
如果有办法在 NVidia 或 AMD 硬件(我可以访问)上解决此问题,我愿意接受。