我有这个代码(Java / LWJGL)来创建我的OpenCL程序。
try
{
CL.create();
} catch (LWJGLException e1)
{
e1.printStackTrace();
}
platform = CLPlatform.getPlatforms().get(0);
devices = platform.getDevices(CL_DEVICE_TYPE_GPU);
try
{
context = CLContext.create(platform, devices, null, null, null);
} catch (LWJGLException e)
{
e.printStackTrace();
}
queue = clCreateCommandQueue(context, devices.get(0), CL_QUEUE_PROFILING_ENABLE, null);
program = clCreateProgramWithSource(context, source, null);
checkCLError(clBuildProgram(program, devices.get(0), "", null));
kernel = clCreateKernel(program, "main", null);
这个OpenCL内核可以正常运行并且不会出错:
kernel void main(
global const float *hitboxes,
global const float *positions,
global const float *rotations,
global const float *velocities,
global const float *colliders,
global const float *weights,
global float *answerPos,
global float *answerRot,
global float *answerVel
)
{
int id = get_global_id(0);
}
但是如果我向主方法或其他方法/结构添加任何代码,它会抛出" CL_OUT_OF_HOST_MEMORY"在clBuildProgram
方法中。有人可以告诉我为什么吗?我有另一个OpenCL程序(也是LWJGL),基本相同。除了它有效。