GraphicsMagick 的 OpenCL 开发记录(六)

文章目录

  • 调用`clCreateBuffer()`产生异常问题(四)

<2022-03-15 Tue>

调用clCreateBuffer()产生异常问题(四)

想来想去,还是因为内存重叠的原因:我在opencl.cAcquireMagickCLCacheInfo()函数中调用clCreateBuffer()之前添加了如下的输出代码:

LogMagickEvent(UserEvent, GetMagickModule(),
  "clCreateBuffer - req: %d, pixels: %p, len: %d",
  device->requested, pixels, length);

当出现问题时有如下log

[ysouyno@arch gm-ocl]$ gm display ~/temp/bg1a.jpg
10:51:31 0:1.368105  1.030u 28955 opencl.c/AcquireMagickCLCacheInfo/569/User:
  clCreateBuffer - req: 1, pixels: 0x55d124b58490, len: 15728640
10:51:31 0:1.374360  1.060u 28955 opencl.c/AcquireMagickCLCacheInfo/569/User:
  clCreateBuffer - req: 2, pixels: 0x55d123c23730, len: 1536000
10:51:31 0:1.469657  1.670u 28955 opencl.c/AcquireMagickCLCacheInfo/569/User:
  clCreateBuffer - req: 2, pixels: 0x55d125c58510, len: 15728640
10:51:31 0:1.475944  1.720u 28955 opencl.c/AcquireMagickCLCacheInfo/569/User:
  clCreateBuffer - req: 3, pixels: 0x55d123c23730, len: 1536000
10:51:31 0:1.566470  2.310u 28955 opencl.c/AcquireMagickCLCacheInfo/569/User:
  clCreateBuffer - req: 3, pixels: 0x55d125c58510, len: 15728640
10:51:31 0:1.571902  2.360u 28955 opencl.c/AcquireMagickCLCacheInfo/569/User:
  clCreateBuffer - req: 4, pixels: 0x55d124b23740, len: 1536000
Abort was called at 250 line in file:
/build/intel-compute-runtime/src/compute-runtime-22.09.22577/shared/source/memory_manager/host_ptr_manager.cpp
Aborted (core dumped)

注意看第一行和最后一行的输出发现,最后一行的地址加偏移已经大于第一行的地址,见下面这个emacs-lisp计算式,说明此时内存重叠,所以出现clCreateBuffer()的调用崩溃。这个问题有点难解了,涉及要修改整个GraphicsMagick的内存布局?

(> (+ #x55d124b23740 1536000) #x55d124b58490)

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