android - 在 Android (Qualcomm Adreno 630) 上链接 OpenCL 内核时的 SIGABRT
问题描述
在构建 OpenCL 内核时,我有时会在链接阶段收到以下错误:
A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 17393 (.fhe.benchmarks), pid 17393 (.fhe.benchmarks)
.
编译和链接以下内核代码时出现错误,这是迄今为止我能够生成的最短的失败示例。
struct U {
uint high;
uint mid;
uint low;
};
struct V {
uint high;
uint low;
};
struct V bar(struct U y) {
struct V res;
res.low = y.low;
res.high = y.mid;
return res;
}
uint foo(struct U y) {
struct U q;
q.high = 1;
q.mid = 2;
q.low = 3;
// If I use the following lines to set r1 instead of
// calling bar, then the kernel links without error.
//struct V r1;
//r1.low = y.low;
//r1.high = y.mid;
struct V r1 = bar(y);
struct V r2 = bar(q);
return r1.low - r2.low;
}
__kernel void Broken(__global uint *out) {
struct U A;
A.high = 0;
A.mid = 0;
A.low = 1;
// If I remove one of the calls to foo then the kernel links successfully
out[get_global_id(0)] = foo(A) + foo(A);
}
我使用的设备是 LG G7 ThinQ,我使用的是 /system/vendor/lib64/libOpenCL.so。如果有人对此问题有任何见解,将不胜感激。我对 Android 和 OpenCL 编程比较陌生,所以我可能做错了什么导致或促成了这一点。
我在下面包含了我设备的一些 OpenCL 属性:
CL_PLATFORM_PROFILE: FULL_PROFILE
CL_PLATFORM_VERSION: OpenCL 2.0 QUALCOMM build: commit #d424b94 changeid #If195280fd4 Date: 12/24/19 Tue Local Branch: Remote Branch: quic/gfx-adreno.lnx.1.0.r72-rel
CL_PLATFORM_NAME: QUALCOMM Snapdragon(TM)
CL_PLATFORM_VENDOR: QUALCOMM
CL_PLATFORM_EXTENSIONS:
CL_DEVICE_TYPE: CL_DEVICE_TYPE_GPU CL_DEVICE_TYPE_ALL
CL_DEVICE_VENDOR_ID: 3209509963
CL_DEVICE_AVAILABLE: 1
CL_DEVICE_COMPILER_AVAILABLE: 1
CL_DEVICE_LINKER_AVAILABLE: 1
CL_DEVICE_EXECUTION_CAPABILITIES: CL_EXEC_KERNEL
CL_DEVICE_QUEUE_PROPERTIES: CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE CL_QUEUE_PROFILING_ENABLE
CL_DEVICE_NAME: QUALCOMM Adreno(TM)
CL_DEVICE_VENDOR: QUALCOMM
CL_DRIVER_VERSION: OpenCL 2.0 QUALCOMM build: commit #d424b94 changeid #If195280fd4 Date: 12/24/19 Tue Local Branch: Remote Branch: quic/gfx-adreno.lnx.1.0.r72-rel Compiler E031.37.03.00
CL_DEVICE_PROFILE: FULL_PROFILE
CL_DEVICE_VERSION: OpenCL 2.0 Adreno(TM) 630
CL_DEVICE_OPENCL_C_VERSION: OpenCL C 2.0 Adreno(TM) 630
解决方案
推荐阅读
- mysql - Docker 中的多个 MariaDB 数据库
- apache-kafka - 在 kafka broker 中添加压缩会有什么影响
- symfony - 在 Symfony 3 的 SQLFilter 中获取用户
- java - 我只能访问列表中的第一项
- javascript - ionic2- 动态改变离子卡的内容
- java - Button.findViewById 与 Button = findViewById
- perl - 哈希排序哈希的元素限制
- max - 契约匹配规则,最小值和最大值
- amazon-web-services - Beanstalk 环境覆盖 Auto Scaling 组中的启动模板设置?
- react-native - React Native:在 ScrollView 中反向延迟加载/分页