Open
Description
The following code produces different results when run on the GPU vs the CPU.
import com.aparapi.*;
public class Main {
public static void main(String[] args) {
int num = 1;
final long[] result = new long[num];
final int start = Integer.MAX_VALUE;
Kernel kernel = new Kernel() {
@Override
public void run() {
final int id = getGlobalId();
result[id] = calculate(start + id);
}
};
kernel.execute(num);
System.out.println( "expected: " + calculate(start) + " result: " + result[0]);
}
public static long calculate(int tc) {
return (long) tc * 100;
}
}
The output from the above code snippet is:
expected: 214748364700 result: 4294967196
I tested this on my Macbook pro but others noticed the problem as well on other unspecified platforms. Also changin the calculate function such that 100 is a long rather than an integer with return (long) tc * 100l;
(notice the letter l at the end of the 100) will produce the exact same incorrect results as above.