5
NVCC如何優化設備代碼?它是否執行任何類型的優化,如常量摺疊和常見的子表達式消除?NVCC在代碼優化方面有多優秀?
例如,它會降低如下:
float a = 1/sqrtf(2 * M_PI);
float b = c/sqrtf(2 * M_PI);
這樣:
float sqrt_2pi = sqrtf(2 * M_PI); // Compile time constant
float a = 1/sqrt_2pi;
float b = c/sqrt_2pi;
什麼更聰明的優化,涉及知道的數學函數語義:
float a = 1/sqrtf(c * M_PI);
float b = c/sqrtf(M_PI);
到這個:
float sqrt_pi = sqrtf(M_PI); // Compile time constant
float a = 1/(sqrt_pi * sqrtf(c));
float b = c/sqrt_pi;
那麼,它*確實*不斷摺疊呢?什麼編譯器是nvOpen64?是NVidia還是OSS版本?第二種情況呢? –
nvOpen64是基於[Open64](http://www.open64.net/)的NVIDIA編譯器(注意nvcc不是編譯器), – talonmies
請原諒我的無知,但是如果nvcc不是編譯器,究竟是什麼? –