【问题标题】:log2 function in OpenCL kernel?OpenCL内核中的log2函数?
【发布时间】:2020-02-12 14:20:04
【问题描述】:

您好,我在 OpenCL 内核中使用的 log2 函数有问题,我遇到了编译器崩溃:

CVMS_ERROR_SERVICE_FAILURE:CVMS 编译器在管理服务时崩溃或挂起

代码是这样的:

int offset = log2((double)m)

其中 m 是一个 int,问题出在哪里?谢谢

【问题讨论】:

标签: c opencl


【解决方案1】:

我无法重现该错误,因此我认为这是驱动程序问题。

根据OpenCL documentation,定义了T log2 (T),所以log2(double)返回一个double,它只会在隐式转换为int时给你一个编译器警告。试试

int offset = (int)(log2((float)m)+0.5f);

为了避免任何编译器警告,如果这仍然不起作用,请使用我的evil fast log2 method

int offset = (as_uint((float)m)>>23)-127;

它使用内置的 OpenCL 函数as_uint(float)

【讨论】:

    猜你喜欢
    • 2013-10-20
    • 2019-12-31
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 2011-08-12
    • 2016-08-17
    • 2011-12-06
    相关资源
    最近更新 更多