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不是编译器,究竟是什么? –