In che modo NVCC ottimizza il codice del dispositivo? Fa qualche tipo di ottimizzazioni come il piegamento costante e l'eliminazione delle sub-espressioni comuni?Quanto è buono NVCC alle ottimizzazioni del codice?
Ad esempio, sarà di ridurre il seguente:
float a = 1/sqrtf(2 * M_PI);
float b = c/sqrtf(2 * M_PI);
a questo:
float sqrt_2pi = sqrtf(2 * M_PI); // Compile time constant
float a = 1/sqrt_2pi;
float b = c/sqrt_2pi;
Che dire di ottimizzazioni più intelligenti, che coinvolgono sapendo semantica delle funzioni matematiche:
float a = 1/sqrtf(c * M_PI);
float b = c/sqrtf(M_PI);
a this:
float sqrt_pi = sqrtf(M_PI); // Compile time constant
float a = 1/(sqrt_pi * sqrtf(c));
float b = c/sqrt_pi;
Quindi, * fa * il piegamento costante, quindi? E quale compilatore è nvOpen64? È una versione NVIDIA o OSS? E il secondo caso? –
nvOpen64 è il compilatore NVIDIA, basato su [Open64] (http://www.open64.net/) (nota nvcc non è un compilatore), – talonmies
Perdonami la mia ignoranza, ma cosa è esattamente nvcc se non è un compilatore? –