Есть ли хороший тест для оптимизирующих компиляторов С++?

Я оцениваю оптимизирующий компилятор Visual C++ 10 на тривиальных примерах кода, поэтому посмотрите, насколько хорош машинный код, и у меня пока нет творческих вариантов использования.

Есть ли какой-нибудь образец кода, который обычно используется для оценки того, насколько хорош оптимизирующий компилятор C++?


person sharptooth    schedule 12.09.2011    source источник
comment
Если бы я оценивал компилятор, я бы посмотрел на некоторый код, представляющий то, что я собираюсь с ним компилировать...   -  person NPE    schedule 12.09.2011
comment
Вам действительно нужен довольно большой и разнообразный корпус кода, чтобы сделать это должным образом, поскольку существует так много разных классов оптимизации, которые может применить компилятор. В качестве альтернативы просто тестируйте код, который соответствует вашим конкретным потребностям и вариантам использования.   -  person Paul R    schedule 12.09.2011
comment
У Microsoft есть пара статей о собственных тестах: blogs.msdn.com/b/vcblog/archive/2010/07/07/ и blogs.msdn.com/b/vcblog/archive/2009/12/01/gl-and-pgo.aspx Но, как сказал @aix, наиболее подходящим тестом будет проверка кодовой базы, представляющей то, что вы на самом деле делаете.   -  person HostileFork says dont trust SE    schedule 12.09.2011
comment
Достаточно ли хороши для этого буст-регрессионные тесты?   -  person ks1322    schedule 12.09.2011
comment
Я должен согласиться с другими комментариями; единственный полезный тест - хорошо ли он компилирует ваш код (по сравнению с надуманными примерами).   -  person Oliver Charlesworth    schedule 12.09.2011
comment
@aix: я бы предложил скомпилировать код вместо эквивалентного. Экономит много усилий и предотвращает потенциальную неэквивалентность;)   -  person Sebastian Mach    schedule 12.09.2011
comment
@phresnel: код даже лучше (при условии, что он уже написан ;-))   -  person NPE    schedule 12.09.2011


Ответы (4)


Единственным допустимым тестом является тот, который имитирует тип кода, который вы разрабатываете. Оптимизаторы по-разному реагируют на разные приложения и разные стили кодирования, и единственное, что действительно имеет значение, — это код, который вы собираетесь компилировать с помощью компилятора.

person James Kanze    schedule 12.09.2011

Попробуйте протестировать такие библиотеки, как Eigen (http://eigen.tuxfamily.org/index.php?title=Main_Page).

person quant_dev    schedule 12.09.2011
comment
А потом выбрать лучший компилятор для Eigen? (И не тот, кто создает лучший код для вашей проблемы). - person Christopher; 12.09.2011
comment
Поправьте меня, если я ошибаюсь, но я понимаю, что ОП не заинтересован в сравнении компилятора с одним конкретным фрагментом кода. - person quant_dev; 12.09.2011

Во многих тестах используется scimark: http://math.nist.gov/scimark2/download_c.html однако вы должны быть избирательны в том, что вы тестируете (тестируете изолированно), так как некоторые тесты могут дать сбой из-за плохого развертывания цикла, но остальная часть кода была отличной, но что-то еще лучше только из-за развертывания цикла ( т.е. остальная часть его сгенерированного кода была ниже номинала)

person Necrolis    schedule 12.09.2011

Как уже было сказано, вам действительно нужно измерять оптимизацию в контексте типичных вариантов использования ваших собственных приложений в типичных целевых средах. По этой причине я включаю таймеры в свой собственный пакет автоматической регрессии и обнаружил несколько довольно необычных результатов, как описано в предыдущий вопрос FWIW, я обнаружил, что VS2010 SP1 создает код в среднем примерно на 8% быстрее, чем VS2008 в моем собственном приложении, и примерно на 13% с оптимизацией всей программы. Это не распределяется равномерно по вариантам использования. Я также склонен видеть значительные различия между длинными тестовыми прогонами, которые не видны при профилировании гораздо меньших тестовых случаев. Я еще не проводил сравнения платформ, например. зависит от платформы или аппаратного обеспечения.

Я полагаю, что многие оптимизаторы будут точно настроены, чтобы давать наилучшие результаты по сравнению с известными наборами тестов, что, в свою очередь, может означать, что это не лучшие фрагменты кода для проверки преимуществ оптимизации. (Размышление конечно)

person SmacL    schedule 12.09.2011