Is CUDA backward compatible?

Lately I upgraded my CUDA hardware from GeForce 9800 GTX to GeForce 280 GTX. Therefore I thought I could enjoy some CUDA 1.3 computation capability.

In order to do that, I replaced arch=sm_11 with arch=sm_13 in my project setting. It passed the compilation but some kernel function no longer works properly(still running but result is incorrect).

Then I changed the compiler setting back to arch=sm_11 and it works fine on new hardware.

In my current code, there is no using of any functionality which is only available in new hardware. My old GF 9800 GTX works just fine.

I try to debug the code but it seems very strange. Therefore I have to start wondering maybe there is some backward compatibility problem with CUDA.

Could somebody give me a clue of what may caused this? Thanks!


Maybe you have some constants that are not declared as float? 3.0 instead of 3.0f? That would become a double when compiling with sm_13

It was not the case in my code. Though it is very important thing to know.

I will try to track this bug down and hopefully can share the result here ASAP.