Как использовать закон Амдала (общее ускорение против ускорения)

Вспомните закон Амдала об оценке максимально возможного ускорения. Ответьте на следующие вопросы.

У вас есть программа, в которой 40% кода распараллелено на трех процессорах, и только для этой части кода достигается ускорение в 2.3 раза. Какое общее ускорение?

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


person Isabelle Congdon    schedule 19.11.2019    source источник
comment
Вот переформулировка исходного вопроса. Есть программа, 40% которой можно распараллелить. В этой 40% части, по сравнению с последовательным выполнением, параллельное выполнение ускоряется в 2,3 раза, то есть выполняется в 2,3 раза быстрее. Если мы используем параллельное выполнение, то каково ускорение всей программы по сравнению с последовательным?   -  person instinct71    schedule 20.11.2019


Ответы (1)


В: Каково общее ускорение?

Лучше всего начинать не с исходной и тривиальной формулы закона Амдала, а с чтения немного дополнительной современной точки зрения , расширяющий исходный, где обсуждаются дополнительные накладные расходы, а также объясняется аспект атомарности-разделения-работы.

введите описание изображения здесь

Два раздела,
один ускорен за счет локального ускорения,
один общий результат

Ваша первоначальная формулировка проблемы, кажется, обходит объясненные виды проблем с реальными накладными расходами на оркестровку процессов путем простого постулирования (net-local) -speedup, где <PAR>-able Section-under-Review связанные с реализацией дополнительные накладные расходы становятся скрытыми, что выражается в некоторой неэффективности наличия в три раза большего количества ресурсов для выполнения кодового потока, но при этом ускорение только в 2,3 раза, а не в 3,0 раза, поэтому затраты больше теоретического 1 / В 3 случаях фактически также при начальной настройке (дополнительные накладные расходы, отсутствующие в чистом [SERIAL] выполнении кода) + параллельная обработка ( выполнение The_useful_work, теперь в три раза больше ресурсов выполнения кода) + также завершение и возврат результатов (дополнительные накладные расходы, которых нет в чистом [SERIAL] выполнении кода) в основной код.

Скрытие этих естественных затрат на вход / выход из [PARALLEL]-кодовых разделов упрощает домашнюю работу, но правильное понимание реальных затрат крайне важно, чтобы не тратить намного больше (на настройки и все другие дополнительные накладные расходы, которых невозможно избежать в реальном мире) чем когда-либо получалось бы обратно (из-за желания получить многопроцессорную распределенную систему) ускорение обработки)

|-------> time
|START:
|                                                                                        |DONE: 100% of the code
|                                                     |                                  |
|______________________________________<SEQ>______60%_|_40%__________________<PAR>-able__|
o--------------------------------------<SEQ>----------o----------------------<PAR>-able--o CPU_x runs both <SEQ> and <PAR>-able sections of code, in a pure [SERIAL] process-flow orchestration, one after another
|                                                                                        |
|                                                                                        |

|-------> time
|START:                                                         |
|                                                     |         |DONE: 100% of the code  :
o--------------------------------------<SEQ>----------o         |                        :
|                                                     o---------o    ..   ..   ..   ..   ..CPU_1 runs <PAR>'d code
|                                                     o---------o    ..   ..   ..   ..   ..CPU_2 runs <PAR>'d code
|                                                     o---------o    ..   ..   ..   ..   ..CPU_3 runs <PAR>'d code
|                                                     |         |
|                                                     |         |
|                                                     <_not_1/3_> just ~ 2.3x faster (not 3x) perhaps reflects real-costs (penalisations) of new, add-on, process-organisation related setup + termination overheads
|______________________________________<SEQ>______60%_|_________|~ 40% / 2.3x ~ 17.39% i.e. the <PAR>-section has gained a local ( "net"-section ) speedup of 2.3x instead of 3.0x, achievable on 3-CPU-code-execution streams
|                                                     |         |

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

     ( 60% + ( 40% / 1.0 ) )
  ---------------------------- ~ 1.2921 x
     ( 60% + ( 40% / 2.3 ) )
person user3666197    schedule 20.11.2019