<2022-03-30 Wed>
ImageMagick
中resizeHorizontalFilter()
中的scale
变量分析ImageMagick
的accelerate.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-group
或work-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
来解决这个问题。见commit
:fix error: use of type ‘double’ requires cl_khr_fp64 support。