compiler-errors - OpenCL : can multiplying by a float cause an internal error?

标签 compiler-errors floating-point runtime-error opencl internal

我正在尝试使用OpenCL(Java包装器,使用Eclipse)对一些数据执行一堆计算。内核本身不包含计算。相反,它调用其他功能来完成工作。

现在,有一个似乎无效的功能。运行良好:

int scaled(floatMemory fMem, int a, float b){
    int result = indexAlloc(fMem);
    float a0 = getf(fMem,a,0);
    float a1 = getf(fMem,a,1);
    float a2 = getf(fMem,a,2);
    setf(fMem, result, a0, a1, a2);
    return 0;
}

但是,此代码会导致内部错误(请参阅倒数第二条语句):
int scaled(floatMemory fMem, int a, float b){
    int result = indexAlloc(fMem);
    float a0 = getf(fMem,a,0);
    float a1 = getf(fMem,a,1);
    float a2 = getf(fMem,a,2);
    setf(fMem, result, a0*b, a1*b, a2*b);
    return 0;
}

我尝试了其他一些逻辑测试,但发现浮点值'b'出现了问题(即无限或空)。 有人可以帮我验证一下吗?

PS:这是控制台上打印的内容:
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x5a619b14, pid=7416, tid=12112
#
# JRE version: 7.0_25-b16
# Java VM: Java HotSpot(TM) Client VM (23.25-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [igdbcl32.dll+0x79b14]  Delete+0x78a94
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# ~:\~\~\~\~\~\bin\hs_err_pid7416.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

最佳答案

抱歉,这有点晚了,但也许可以对某人有所帮助。

事实证明,我试图返回的浮点数在离开函数后就被释放了,例如:

float sum(float a, float b) {
float x = a+b;
return x;
}

变量x在函数外部不存在,因此当我尝试从调用者函数访问它时,出现错误。解决的办法是设置我自己的缓冲区(使人痛苦),以便变量在整个线程中保持完整性。

关于compiler-errors - OpenCL : can multiplying by a float cause an internal error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17307179/

相关文章:

air - Flash Builder - 发布构建期间的平台转换失败错误

android - 错误 : EPERM: operation not permitted

c# - 如何在 C# 中舍入浮点值?

floating-point - 是否有x的浮点值,x-x == 0为false?

java - UVA Online Judge 中的运行时错误

python - sys.path.append 和模块出错

c++ - 编译一个简单的C++程序时的一个问题

c++ - 将 float 与零进行比较的标准方法是什么?

regex - VBA 宏运行时错误

c++ - Ubuntu 上的 strlen 运行时错误