GraphicsMagick 的 OpenCL 开发记录(十四)

文章目录

  • 关于`ImageMagick`中`resizeHorizontalFilter()`中的`scale`变量
  • 关于`error: use of type 'double' requires cl_khr_fp64 support`错误

<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来解决这个问题。见commit:fix error: use of type ‘double’ requires cl_khr_fp64 support。
GraphicsMagick 的 OpenCL 开发记录(十四)_第1张图片

你可能感兴趣的:(GraphicsMagick,ImageMagick,OpenCL,c++,开发语言)