You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Imagination IMG GPU下OpenCL缓冲区清除崩溃及跨平台方案咨询

跨平台通用OpenCL缓冲区清除方法问题

我在Intel、NVIDIA和AMD GPU上可通过clEnqueueFillBuffer()成功清除OpenCL缓冲区对象,但在Imagination IMG GPU执行相同操作时程序出现段错误。这可能是驱动漏洞,或是我未满足缓冲区填充的全部条件。

缓冲区分配代码

mem_p32 = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_HOST_READ_ONLY, p32maxsz, NULL, &err);

缓冲区清除代码

static void clear_p32( int streamnr, int textotal )
{       
        static uint32_t val=0;
        const size_t sz = textotal * 3 * sizeof(uint32_t);
        cl_int err;
        err = clEnqueueFillBuffer(queues[streamnr], mem_p32, &val, 1, 0, sz, 0,0,0);
        CHECK_CL
}

已验证内容

  • OpenCL API无专门的清除操作,Fill操作应为正确的清除方式;
  • 清除未超出缓冲区大小,即使仅清除1字节也会触发段错误;
  • libPVROCL.so无调试符号,gdb无法提供更多信息,gdb会话信息如下:
Thread 2 "testgib" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x3ff427e160 (LWP 15507)]
__GI_memset (dstpp=0x3fe8e7e000, c=0, len=<optimized out>) at ./string/memset.c:56
56  ./string/memset.c: No such file or directory.
(gdb) where
#0  __GI_memset (dstpp=0x3fe8e7e000, c=0, len=<optimized out>) at ./string/memset.c:56
#1  0x0000003ff7aef292 in ?? () from /lib/libPVROCL.so

环境信息

  • OpenCL设备:PowerVR B-Series BXM-4-64 Imagination Technologies(1单元,本地内存4KiB,全局内存5015MiB,维度3(512x512x512),最大工作组大小512,支持fp16,对齐1024)
  • 操作系统:Debian GNU/Linux 12
  • 硬件:Sipeed Pi4A
  • 架构:RISCV
  • SOC:TH1520

现咨询如何实现可在所有平台通用的OpenCL缓冲区清除方法?

内容的提问来源于stack exchange,提问作者Bram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 23:25:19