Возможен ли ощутимый прирост производительности при использовании __assume в VC++?

Возможно ли ощутимое повышение производительности при использовании 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 мс

10
задан François Andrieux 25 October 2018 в 15:25
поделиться