Other Parts Discussed in Thread: SK-AM62B-P1
器件型号: SK-AM62B-P1
**部件:** SK-AM62B-P1 (AM62B / PowerVR A 系列 AX-1-16M)
** SDK / DDK:*首次在 DDK 24.2.6643903 上观察;**重新确认 DDK 25.3.6908880**(TI 处理器 SDK Linux 12.x) 上仍然存在
*** Tool/IDE:** OpenCL 3.0(内核语言 OpenCL C 1.2)、libPVROCL
这最初是通过 2026年05月16日 上的 TI 电子邮件 (Ghelani / Bhargav / Pothukuchi / Etheridge) 提出的;TI 确认了复制并要求我们在此处发布以进行跟踪。 在 DDK 25.3 上进行了 Re 测试、并显示了错误支架。
##症状
通过`clCreateProgramWithBinary`(使用从同一器件上的`clGetProgramInfo (CL_program_binaries)`捕获的字节)创建程序时、`clSetKernelArg` libPVROCL.so 中的 segfaults` libPVROCL.so `将大于~4KB 的缓冲区绑定到`___constant`参数。 相同的缓冲区在较小时可以干净地绑定、并且可以干净地绑定到同一内核的源代码构建的同级。 以上每个步骤都报告成功:
```μ s
步骤 1:源代码构建正常;捕获的二进制文件
clCreateProgramWithBinary ERR=0、binary_STATUS=0
clBuildProgram (link) err=0
步骤 2:绑定 1024 字节__constant buffer
源代码构建内核 arg 1 err=0
二进制加载的内核 arg 1 err=0 <-低于阈值、正常
步骤 3:绑定 8192 字节__constant buffer
源代码构建内核 arg 1 err=0
二进制加载的内核 arg 1 ... SIGSEGV 内侧 libPVROCL.so
```μ s
##阈值
通过 bisection、触发崩溃的最小`__constant `缓冲区为**4036 字节**(任何≤4035 绑定成功)。 4096−60=一个 4 KB 页减去一个小页脚—与驱动程序具有≤~4 KB 的小恒定内联路径和较大缓冲区的单独路径一致、这些缓冲区查询的是不能通过二进制往返运行的每算法元数据。
## DDK 24.2 与 25.3
相同的碰撞、两者的阈值模式相同。 捕获的二进制大小发生了变化 (24.2→**7109 B 25.3**),即序列化格式在 DDK 之间演变,但缺少的元数据错误没有发生。
##再制作者
单源代码 C++(~120 行、仅限系统 OpenCL 标头)。 六行内核:一个`_全局浮点数*`和一个`__常量浮点数*`参数—无`__本地`m、无屏障、无` ax _ constant_size `re、无` QD_WORK_GROUP_SIZE `。 repro 从源代码构建、捕获二进制文件、重新加载二进制文件、从两个程序创建内核、并在 1KB 和 8KB 下运行并排 arg-bind。
```μ s
g++-std=c++17 repro_binary_constant_arg.cpp -lOpenCL -o repro
./repro
```μ s
(将`repro_binary_constant_arg.cpp`附加到 POST - TI 已通过电子邮件线程提供的同一文件。)
##问题
``→`clGetProgramInfo (CL_program_binaries)` clCreateProgramWithBinary ` round-trip 对于具有 Δ___constant`参数的内核是否受 PowerVR A 系列支持?
` per-arg `_constant address-space 元数据是否应该在二进制序列化中生存,或者在这一代的“>4kB 常量缓冲区“情况下,二进制加载路径是否未被产品化?
3.是否为将来的 DDK 计划修复?
##影响/解决方法
不会阻塞—我们通过`clCreateProgramWithIL`(`cl_KHR_il_program`) 将内核作为 SPIR-V 模块发货、该模块可在 DDK 24.2 和 25.3 上正常运行。 但本机二进制路径本来是我们首选的 OEM 船舶目标、因此将其标记为可能的回归、值得修复。
repro_binary_constant_arg.cpp