0

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

Я хотел бы знать, если у меня нет многоядерной системы, тогда можно ли оценить ускорение заданного кода в многоядерной системе, просто выполнив ее на одноядерном процессоре?

У меня есть доступ к счетчикам производительности (инструкция за каждый цикл, количество промахов кэш-памяти, количество инструкций и т. Д.), И у меня есть только двоичные коды кода.

[Примечание: Я оценил parallel_running_time (T_P) = serial_running_time/N, но эта оценка имеет неприемлемую ошибку] ​​

спасибо

+0

Нет, это невозможно, вы можете не знать производительность многопроцессорности, не запуская его на многопроцессорной машине –

+0

Кстати, по опыту я обнаружил, что отношение нелинейно. Каждый раз, когда вы добавляете ядро, ускорение увеличивается немного меньше. Это больше похоже на отношение n log n. – jean

+0

Что это за «ускорение», о котором вы говорите? Вы имеете в виду расчет максимального ускорения в соответствии с Законом Амдаля (http://en.wikipedia.org/wiki/Amdahl's_law)? –

ответ

2

читать на Amdahl's Law, особенно немного о parallelization.

Чтобы определить, насколько вы можете ускорить свою программу, вы должны знать, какие части программы могут извлечь выгоду из распараллеливания и какие части должны выполняться последовательно. Если вы это знаете, и если вы знаете, как долго последовательная и параллельная части принимают (индивидуально) на одном процессоре, вы можете оценить, как быстро программа будет работать на нескольких процессорах.

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

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