¿Qué tan bien NVCC optimiza el código del dispositivo? ¿Hace algún tipo de optimizaciones como el plegado constante y la eliminación de subexpresiones comunes?¿Qué tan bueno es NVCC en las optimizaciones de código?
Por ejemplo, va a reducir el siguiente:
float a = 1/sqrtf(2 * M_PI);
float b = c/sqrtf(2 * M_PI);
a esto:
float sqrt_2pi = sqrtf(2 * M_PI); // Compile time constant
float a = 1/sqrt_2pi;
float b = c/sqrt_2pi;
¿Qué pasa con las optimizaciones más inteligentes, que implican saber semántica de funciones matemáticas:
float a = 1/sqrtf(c * M_PI);
float b = c/sqrtf(M_PI);
a esto:
float sqrt_pi = sqrtf(M_PI); // Compile time constant
float a = 1/(sqrt_pi * sqrtf(c));
float b = c/sqrt_pi;
Entonces, ¿* dobla * constante entonces? ¿Y qué compilador es nvOpen64? ¿Es NVidia o una versión de OSS? ¿Qué pasa con el segundo caso? –
nvOpen64 es el compilador de NVIDIA, basado en [Open64] (http://www.open64.net/) (note nvcc no es un compilador), – talonmies
Perdón por mi ignorancia, pero ¿qué es exactamente nvcc si no es un compilador? –