Я изучаю Aparapi (https://code.google.com/p/aparapi/ ) и имеют странное поведение одного из включенных образцов. Проба первая, "добавочная". Построение и выполнение - это нормально. Я также помещаю следующий код для проверки, действительно ли используется графический процессор.
if(!kernel.getExecutionMode().equals(Kernel.EXECUTION_MODE.GPU)){
System.out.println("Kernel did not execute on the GPU!");
}
и это работает нормально. Но если я попытаюсь изменить размер массива с 512 на число больше 999 (например, 1000), у меня будет следующий вывод:
!!!!!!! clEnqueueNDRangeKernel() failed invalid work group size
after clEnqueueNDRangeKernel, globalSize[0] = 1000, localSize[0] = 128
Apr 18, 2013 1:31:01 PM com.amd.aparapi.KernelRunner executeOpenCL
WARNING: ### CL exec seems to have failed. Trying to revert to Java ###
JTP
Kernel did not execute on the GPU!
Вот мой код:
final int size = 1000;
final float[] a = new float[size];
final float[] b = new float[size];
for (int i = 0; i < size; i++) {
a[i] = (float)(Math.random()*100);
b[i] = (float)(Math.random()*100);
}
final float[] sum = new float[size];
Kernel kernel = new Kernel(){
@Override public void run() {
int gid = getGlobalId();
sum[gid] = a[gid] + b[gid];
}
};
Range range = Range.create(size);
kernel.execute(range);
System.out.println(kernel.getExecutionMode());
if (!kernel.getExecutionMode().equals(Kernel.EXECUTION_MODE.GPU)){
System.out.println("Kernel did not execute on the GPU!");
}
kernel.dispose();
}
Я попытался указать размер, используя
Range range = Range.create(size, 128);
как было предложено в группе Google, но ничего не изменилось.
В настоящее время я работаю на Mac OS X 10.8 с Java 1.6.0_43. Версия Aparapi является последней (2012-01-23).
Я что-то упускаю? Любые идеи?
заранее спасибо