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.
The following code produces different results when run on the GPU vs the CPU.
The output from the above code snippet is:
expected: 214748364700 result: 4294967196I 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.