2015-03-03 1 views
10

Сегодня я загрузил и создал образец проекта внедрения Electronic Arts STL, и вектор EA выглядит намного медленнее для меня, чем стандарт. Я только что создал 2 векторов и загрузив их с 1 млн пунктов:EASTL performance

void performance_test(void) 
{ 
    clock_t start; 
    clock_t end; 


    // EA 

    eastl::string strEA = "hello"; 
    eastl::vector<eastl::string> vec_EA; 

    start = clock(); 
    for (size_t i = 0; i < 1000000; i++) 
    { 
     vec_EA.push_back(strEA); 
    } 

    end = clock(); 
    printf("EA  %f\n", (double(end - start)/1000)); 

    // Standard 

    std::string strStandard = "hello"; 
    std::vector<std::string> vec_Standard; 

    start = clock(); 
    for (size_t i = 0; i < 1000000; i++) 
    { 
     vec_Standard.push_back(strStandard); 
    } 

    end = clock(); 
    printf("Standard %f\n", (double(end - start)/1000)); 
} 

И результаты:

  1. Е.А. 0,759000
  2. Стандартный 0,064000

Итак, есть ли что-нибудь что я делаю неправильно, или что-то пропустил? Образец был скомпилирован с помощью набора инструментов платформы v100.

+0

Почему вы отметили C? Собственная стандартная библиотека компилятора может быть оптимизирована специально для этого компилятора. Однако я не уверен, что это должен быть такой порядок. Что такое набор инструментов платформы v100? –

+2

Я не уверен, что буду верить 'clock' для синхронизации, но когда разница в этом велика, все должно быть в порядке. Стоит попробовать вектор EASTL со стандартной строкой и наоборот, чтобы сузить проблему. –

+0

@MarkRansom: Хм. Вектор EA со стандартной строкой быстрее, чем стандартный вектор, но строка также не должна быть быстрее. – CsOkemf

ответ

11

Когда я запустить тест с сборки релиза в VS 2010, я получаю результаты похожи на то, что можно было бы надеяться на:

EA  0.063000 
Standard 0.073000 

Однако, когда я запускаю же сборку выпуска под управлением отладчика VS, то результаты резко меняются:

EA  1.293000 
Standard 0.080000 

Идет еще дольше (десятки секунд) для любой очистки объекта. Имейте в виду - это то же самое, что и сборка режима выпуска, а не сборка отладки.

Я не изучал, почему EASTL сильно влияет на среду отладчика. Я предполагаю, что это имеет какое-то отношение к отладочной куче.


Update (4 марта 2015):

Еще одна деталь, которая влияет на результаты, является длина строки вовлеченного. VS использует «оптимизацию коротких строк» ​​в std::string, что уменьшит количество распределений, которые возникают для строковых объектов, которые имеют значение, подобное "hello". Если изменить инициализирован значение для строк, используемых в примере из "hello" в "hello - but not too short", вы получите результаты больше похожи на следующее:

// release build, run outside of the debugger 
EA  0.078000 
Standard 0.113000 

// release build, run under the debugger 
EA  0.762000 
Standard 1.414000 

И теперь становится очевидным, что порядок величины разности, когда эталоном является запуск под отладчиком, вероятно, объясняется тем, что куча отладки тратит много времени на отслеживание распределения строки.

+0

Хм, не могли бы вы поделиться всем решением? Возможно, у меня разные настройки компилятора. – CsOkemf

+0

'git clone https: // github.com/mburr/eastl-test.git', затем откройте решение VS2010 в' eastl-test \ vs2010-test \ eastl-test \ eastl-test.sln'. Вы также можете прочитать «eastl-test \ vs2010-test \ README-vs2010-test.txt» –

+0

Большое вам спасибо, теперь я уверен, что что-то не так с моими настройками. Теперь я получаю ваши результаты. – CsOkemf

 Смежные вопросы

  • Нет связанных вопросов^_^