首页 > 解决方案 > 在 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

标签: androidopenclsigabrt

解决方案


推荐阅读