Чому код на C + + працює значно довше на одному комп'ютері, ніж інший? [зачинено]


0

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

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

Машина 1:

  • Кінець 2013 року MacBook Pro Retina,
  • 2,8 ГГц i7-4558U,
  • 16 Гб 1600 МГц DDR3,
  • 500 Гб флеш-пам'яті

Машина 2:

  • Робоча станція MacPro наприкінці 2013 року
  • 3,5 ГГц 6-ядерний процесор Intel Xeon E5-1650,
  • 32 ГБ 1867 МГц DDR3
  • 251 Гб флеш-пам'яті,
  • Зовнішній диск SATA 3TB

Час виконання:
Машина 1: з виходом 200 сек., W / o 18 сек.
Машина 2: (/ директорія - флеш-накопичувач): з 2230 сек., Без / 2075 сек.
Машина 2: (~ каталог - зовнішній привід): з 2262 сек., Без 2080 сек.

Будь-які ідеї про те, як покращити час виконання на Mac Pro?


@Ramhound Мені сказали, що це буде більш доречним тут, ніж StackOverflow.
Stershic

2
Це питання здається надзвичайно широким. Те, що вам потрібно зробити, щоб зрозуміти відмінності, полягає в наступному. Визначте, яка частина коду займає найдовше. Потім ви можете змінити цей код так швидко на обох машинах. Якщо ви застрягли, роблячи це, ви можете в цей момент задати питання на правильному сайті.
Ramhound

@Ramhound Було запропоновано використовувати інструменти для профілювання мого коду, і мені вдалося це зробити, але мені не зрозуміло, чи показується, яка частина коду займає найдовше. Я не запитую, тому що я експерт - я прошу, тому що я не є, і я хочу вчитися.
Stershic

1
Я навіть не можу дослідити відмінності між i7 і E5, оскільки у мене немає конкретних номерів моделей. Моє припущення, що ваш код є однопоточним. Оскільки швидкість сплеску i7 становить близько 3,0 ГГц, що означає його малоймовірну частоту процесора, що викликає збільшення 115% для генерування виходу.
Ramhound

Ви змогли це зробити. Але ви не надаєте такої інформації. Ви знаєте, скільки часу займає код. Яка саме функція викликає затримку? Звичайно, це питання є питанням Stackoverflow. Я в основному намагаюся сказати вам, що ви задаєте неправильне запитання. Слід додати, що наступне. Вам не сказали, що це питання суперкористувача. Неповторна причина, що вона могла бути на тему тут, її немає, вам дали кращі поради в коментарях.
Ramhound

Відповіді:


0

Правильний спосіб підійти до питання "чому цей код триває так довго", незалежно від того, чи є він "довгим" у абсолютних або відносних термінах, означає використовувати інструмент, який називається профайлер.

В основному, ви запускаєте програму через профайлер або з прикріпленим профілером, і профайлер записує, скільки часу програма витрачає на різні функції. Ця інформація подається вам у формі, що дозволяє точно визначити частину програми, яка зайняла найдовше виконання під час виконання. Часто буде також можливим отримати додаткову інформацію з цього звіту, наприклад, які частини програми називаються найбільшою кількістю разів, і подібні речі, які також можуть вказувати на області, які могли б використовувати певний контроль.

Виходячи з цих даних, зазвичай легко визначити, які частини потрібно оптимізувати, щоб програма працювала швидше, не використовуючи гру угадування, відому як "передчасна оптимізація", або покладаючись на особливості певної частини обладнання.


1

Це спекулятивне припущення, але ваш код працює з диском і дисковим входом-виходом, і я припускаю, що це ваша вузька місце - ви згадали, що він працює швидше на 500 Гб флеш-пам'яті, ніж на одному з 250 GB flash storage - це має сенс, логічно, через те, що флеш-пам'ять, по суті, є рейдом-0 менших (32 / 64gb) чіпів флеш-пам'яті, і більше чіпів / дисків у масиві raid-0 значно збільшить продуктивність. Я не знаю конкретного make / model / firmware / контролера пам'яті, але я підозрюю, що якщо ви зробите тест на диск I / O, ви знайдете подібну невідповідність у продуктивності на двох машинах. Такий тест продуктивності може найкраще виконується за допомогою XBench .


@Ramhound: чому ви повернете мою посилання на XBench. Як випливає з цієї відповіді, різниця в продуктивності ймовірно зумовлена ​​швидкістю жорсткого диска. Пропонується вимірювати цю швидкість, і я додав посилання на інструмент, щоб перевірити це. Навіщо видаляти це?
agtoever

@agtoever - Складно. Моє ліжко
Ramhound
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.