Насколько хорошо 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;
5
задан Alex B 23 September 2011 в 14:39
поделиться