Hello, there!
Does GeForce GTX 275 support Compute Capability 1.3. there is no GTX 275 in Appendix A, but I guess it does. So I changed the data type in project matrixMul in the SDK 2.2 from float to double, the results was different from CPU.
Can anyone tell what’s happening?
:)
IEEE 754 specifies the kind of representation of the data; but not the arithmetic itself. For example the floating point unit of intels 80x87 math-co-processor uses extended precisionj (80 bit) internally in arithmetic operations.
Floating point operations naturally have limited precision due to a limited number of bits. Therefore operations aren’t commutative at all even if they are in analytical sense. For example:
float sum1 = 0.;
float sum2 = 1.;
float plus = 1e(-EXP);
int i, count = 1e(EXP);
for( i=0; i < count; i++)
{
sum1 += plus;
sum2 += plus;
}
sum1 += 1.;
If EXP is large enough sum1 equals 2 and sum2 equals 1.
So you even can get different results of different launches of the same kernel, 'cause the order of execution of different threads may vary from time to time.
Regards
Navier
I’m pretty sure floating point ops are commutative, they’re not associative though…
N.
In any case, you really only need to be worried about getting different results on the GPU if that result is large enough to really make a difference in what you’re doing. If you’re working with numbers generally greater than 1 (let’s say), it probably won’t matter too much if the result is off by 0.0000008 or whatever.
Also, all the boards in the GTX series should be double precision. And if you query the device properties and it says compute level 1.3 or greater, then it must be.
Is there any sample code using double-float number?