Код точно такой же - я скопировал его с одного компьютера на другой. Код скомпилирован с g++- 4 (4.9.1), полученным из fink на OSX на обеих машинах, и не запускается параллельно.

Параметры компилятора - «-O2», и компьютеры в основном ничего не делают (низкое использование процессора и памяти). Код представляет собой ссылку на код исследования в 2400 строк.

Машина 1:

  • MacBook Pro Retina в конце 2013 года,
  • 2,8 ГГц i7-4558U,
  • 16 ГБ 1600 МГц DDR3,
  • 500 ГБ флэш-памяти

Машина 2:

  • Рабочая станция MacPro в конце 2013 года,
  • 3,5-ГГц 6-ядерный Intel Xeon E5-1650,
  • 32 ГБ 1867 МГц DDR3
  • 251 ГБ флэш-памяти,
  • Внешний накопитель SATA емкостью 3 ТБ

Run-время:
Станок 1: с выходной мощностью 200 сек., Без 18 сек.
Машина 2: (/ каталог - должна быть флешка): с 2230 сек., Без 2075 сек.
Машина 2: (~ каталог - должен быть внешний диск): с 2262 сек., Без 2080 сек.

Есть идеи, как улучшить время выполнения на MacPro?

2 ответа2

1

Это умозрительное предположение, но ваш код работает с дисковым и дисковым вводом-выводом, и я собираюсь предположить, что это ваше узкое место - вы упомянули, что он работает быстрее на машине с флэш-памятью 500 ГБ, чем на машине с 250 Флэш-память ГБ - это логично, поскольку логично, что флеш-память представляет собой raid-0 из более мелких (32/64 ГБ) микросхем флэш-памяти, а большее количество чипов / дисков в массиве raid-0 значительно повысит производительность. Я не знаю конкретной марки / модели / прошивки / контроллера хранилища, однако я подозреваю, что если бы вы провели тестирование дискового ввода-вывода, вы обнаружили бы аналогичное расхождение в производительности на двух машинах. Такой тест производительности лучше всего выполнить с помощью XBench.

0

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

По сути, вы запускаете программу через профилировщик или с прикрепленным профилировщиком, и профилировщик записывает, сколько времени программа тратит на различные функции. Затем эта информация представляется вам в форме, позволяющей точно определить те части программы, которые выполнялись дольше всего во время этого выполнения. Часто из этого отчета также можно получить дополнительную информацию, например, какие части программы называются наибольшее количество раз, и тому подобное, что также может указывать на области, которые могут быть подвергнуты тщательному анализу.

Основываясь на этих данных, обычно легко определить, какие части необходимо оптимизировать, чтобы программа работала быстрее, без использования игры на угадывание, известной как "преждевременная оптимизация", или не полагаясь на особенности некоторого конкретного компонента оборудования.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .