GraphicsMagick 的 OpenCL 开发记录(十四)

<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
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值