我正在尝试使用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.
#
答案 0 :(得分:0)
对不起,这有点晚了,但也许可以帮助别人。
事实证明,我试图返回一个离开函数后被释放的浮点数,例如:
float sum(float a, float b) {
float x = a+b;
return x;
}
变量x在函数外部不存在,所以当我尝试从调用函数访问它时,我收到了一个错误。解决方案是设置我自己的缓冲区(对接中的痛苦),以便变量在整个线程中保持完整性。