OpenCL half_和native_函数未在Samsung Galaxy S7上编译

时间:2018-01-10 14:36:16

标签: android opencl

我正在尝试优化使用Android的Exynos Octa 8890和Mali-T880在Samsung Galaxy S7(SM-G930F)上运行的OpenCL代码。根据OpenCL-Z,gpu支持OpenCL 1.2完整档案。我有很多正确编译和运行的OpenCL代码。但是,我不能使用任何half_ *或native_ *函数,例如:half_sin或native_sin。一旦我添加其中一个,我在编译内核时会得到一个CL_BUILD_FAILURE。这是发生此类行为的一个内核:

#pragma OPENCL EXTENSION cl_khr_fp16 : enable
half distancePointToEllipse(short2 point, half2 ecenter, half phi, half a, half b)
{
    half2 t = convert_half2(point) - ecenter;
    half angle = atan2(t.y, t.x) - phi;
    half cos1, sin1;
    //cos1 = native_cos(angle);
    //sin1 = native_sin(angle);
    sin1 = sincos(angle, &cos1);
    half tx = a * a * cos1 * cos1;
    half ty = b * b * sin1 * sin1;
    //half c = native_sqrt(tx + ty);
    //half d = native_sqrt(t.x * t.x + t.y * t.y);
    half c = sqrt(tx + ty);
    half d = hypot(t.x, t.y);
    return fabs(d - c);
}

这是用于编译它的代码:

auto program_RANSACEllipses = cl::Program(context, CL_RANSAC_ELLIPSES_KERNEL, true);
    program_RANSACEllipses.build("-cl-std=CL1.2");
    Kernels::RANSACEllipses = cl::Kernel(program_RANSACEllipses, "RANSAC");

我已经从khronos下载了OpenCL 1.2的标题。此外,我之前可以在另一台设备上使用half_ *和native_ *。

你知道我做错了什么吗?

PS:我在ARM community上问了同样的问题,但该论坛并不活跃,所以我也决定在这里提问。

0 个答案:

没有答案