Здравствуйте, eao197, Вы писали:
E>Здравствуйте, kot--, Вы писали:
K>> Скомпилированный с оптимизацией(/O2) по скорости экзешник считает на 20% чем его однопоточный(/O2).
K>> Скомпилированный БЕЗ ОПТИМИЗАЦИИ(/Od) — на 77% быстрее однопоточный(/Od).
K>> Чем можно объяснить подобные результаты?
E>Вполне возможно, что в программе есть куски кода, которые действительно исполняются параллельно, а есть точки, в которых работа приостанавливается для взаимной синхронизации (даже на неявной, вроде копирования двух std::string). Без оптимизации параллельные куски кода работают дольше, поэтому время распределяется так, что несколько потоков редко одновременно оказываются на точках синхронизации. С оптимизацией куски кода работают быстрее, соответственно время распределяется по другому и потоки чаще одновременно входят в точки синхронизации и, соответственно, больше простаивают.
Полностью согласен. В релиз версии синхронизация стала чаще, соотв. больше конкуренции. А учитывая, что на современных компиляторах скорость релиз и дебаг могут отличаться порядка 10 раз, то соотв. синхронизация стала значительно чаще.