GraphicsMagick 的 OpenCL 开发记录(十四)

发布时间:2024年01月22日

<2022-03-30 Wed>

关于ImageMagickresizeHorizontalFilter()中的scale变量

分析ImageMagickaccelerate.c:resizeHorizontalFilter()的源代码发现它的scale变量计算后只停留在此函数内,并没有往下传递进kernel函数,关于scale的计算代码是不是多余的?从目前我理解到的ImageMagick的逻辑来看,我认为它是多余的。因为向下传递给kernel函数的是resizeFilterScale变量,这个变量的值不依赖scale变量,而是通过传参获取现有的结构体中的值,且它进入kernel函数ResizeHorizontalFilter()后通过调用getResizeFilterWeight()函数再以filterType获得计算函数来进一步计算scale值,进而最终返回weight值。

另外发现在kernel函数ResizeHorizontalFilter()的开始部分scale又被计算了一次,因此我觉得可以确认accelerate.c:resizeHorizontalFilter()中的scale变量是多余的。

我在GraphicsMagick中应该怎么处理呢?考虑到GPU并行运行的影响,scale的值不依赖各个work-groupwork-item。因此我认为将scale赋值给resizeFilterScale传进kernel函数不会影响计算结果,那这样的话kernel函数中的scale计算就显得有点多余了。

备注:代码写着写着,发现个严重问题,OpenCL不支持函数指针,那怎么把过滤函数传进kernel函数呢?

关于error: use of type 'double' requires cl_khr_fp64 support错误

安装了最新的intel-compute-runtime,看来已经修复了core dumped问题,见:“又一个闪退问题”中提到的问题。

% sudo pacman -Ss intel-compute-runtime
[sudo] password for ysouyno:
community/intel-compute-runtime 22.12.22749-1 [installed]
    Intel(R) Graphics Compute Runtime for oneAPI Level Zero and OpenCL(TM) Driver

试运行了一下我的最新代码,发现有opencl编译错误:

error: use of type 'double' requires cl_khr_fp64 support

先只是简单的将double换成float来解决这个问题。见commitfix error: use of type ‘double’ requires cl_khr_fp64 support
在这里插入图片描述

文章来源:https://blog.csdn.net/ftuc5dn/article/details/135750001
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。