Возможно ли ощутимое повышение производительности при использовании VC++ __assume
? Если это так, пожалуйста, опубликуйте доказательство с кодом и тестами в своем ответе.
Немногочисленная статья MSDN о __assume: http://msdn.microsoft.com/en-us/library/1b3fsfxw(v=vs.100).aspx
В статье упоминается использование __assume(0)
, чтобы переключать
операторы быстрее __assume(0)
в случае по умолчанию
. Я не замерил повышения производительности при использовании __assume(0)
следующим образом:
void NoAssumeSwitchStatement(int i)
{
switch (i)
{
case 0:
vector();
break;
case 1:
vector();
break;
default:
break;
}
}
void AssumeSwitchStatement(int i)
{
switch (i)
{
case 0:
vector();
break;
case 1:
vector();
break;
default:
__assume(0);
}
}
int main(int argc, char* argv[])
{
const int Iterations = 1000000;
LARGE_INTEGER start, middle, end;
QueryPerformanceCounter(&start);
for (int i = 0; i < Iterations; ++i)
{
NoAssumeSwitchStatement(i % 2);
}
QueryPerformanceCounter(&middle);
for (int i = 0; i < Iterations; ++i)
{
AssumeSwitchStatement(i % 2);
}
QueryPerformanceCounter(&end);
LARGE_INTEGER cpuFrequency;
QueryPerformanceFrequency(&cpuFrequency);
cout << "NoAssumeSwitchStatement: " << (((double)(middle.QuadPart - start.QuadPart)) * 1000) / (double)cpuFrequency.QuadPart << "ms" << endl;
cout << " AssumeSwitchStatement: " << (((double)(end.QuadPart - middle.QuadPart)) * 1000) / (double)cpuFrequency.QuadPart << "ms" << endl;
return 0;
}
Округленный вывод консоли, 1000000 итераций:
NoAssumeSwitchStatement: 46 мс
AssumeSwitchState: 46 мс