8800 GTX has 16 Multiprocessors. Each is capable to process 32 threads of a warp in for clock cycles.
On the IF:
The compiler will replace branches with prediction (the gpu is capable of branch prediction) if the number of instructions controled by the IF is smaller than a given threshold. There are different thresholds depending on how divergent the possible warps are.
If it does not replace it, it will not jump into a "false" scope of an IF, but branch execution takes some time (the programming guide does not give any clock cycle information on this for IF thought)
Will have to check back with some other papers to say something specific on the PC. Theoretically they would need their own PC as they can be pushed from one to another stream processor on the same Multiprocessor but thats a pure theoretical consideration.
Programming on CUDA is a lot different than on regular C and its very important to follow the advices from the CUDA Programming Guide 1.1 (would highly suggest reading it, it will answer many questions you will find while trying to tinker with it) on how to access memory correctly etc if you want to use the GPU usefully. Because if you don't do it, your GPU will be idle a lot and in the end a P3 will outperform your 8800GTX easily in that case. (a P3 when using MMX and SSE will leave it in the dust as the vectorization of that is already very powerfull and gives speedup of 3-4 compared to regular code)
On the IF:
The compiler will replace branches with prediction (the gpu is capable of branch prediction) if the number of instructions controled by the IF is smaller than a given threshold. There are different thresholds depending on how divergent the possible warps are.
If it does not replace it, it will not jump into a "false" scope of an IF, but branch execution takes some time (the programming guide does not give any clock cycle information on this for IF thought)
Will have to check back with some other papers to say something specific on the PC. Theoretically they would need their own PC as they can be pushed from one to another stream processor on the same Multiprocessor but thats a pure theoretical consideration.
Programming on CUDA is a lot different than on regular C and its very important to follow the advices from the CUDA Programming Guide 1.1 (would highly suggest reading it, it will answer many questions you will find while trying to tinker with it) on how to access memory correctly etc if you want to use the GPU usefully. Because if you don't do it, your GPU will be idle a lot and in the end a P3 will outperform your 8800GTX easily in that case. (a P3 when using MMX and SSE will leave it in the dust as the vectorization of that is already very powerfull and gives speedup of 3-4 compared to regular code)