ЖУРНАЛ СТА 4/2020
В ЗАПИСНУЮ КНИЖК У ИНЖЕ Н Е РА при использовании большего числа ядер, работающих на бо- лее низкой частоте. В упрощённой форме закон Амдала вы- глядит следующим образом: . (1) S ( n ) – это теоретическая степень ускорения программных вы- числений при использовании n ядер (потоков) процессора. Здесь p представляет собой часть алгоритма, которая может быть распределена среди нескольких ядер, то есть эффектив- ность распараллеливания. Исходя из этого, 1– p – эта та часть программы, которая может выполняться только последова- тельно. Самым простым и быстрым способом определения эффек- тивности распараллеливания является проведение ряда тесто- вых измерений. Необходимо оценить время выполнения ка- кой-либо цикличной операцииПО на разном количестве ядер. Не стоит пугаться. Для тестирования достаточно использовать программные средства, чтобы изменять количество задейство- ванных ядер. В Windows для этого следует задать сходство для необходимого вам процесса через диспетчер задач (в ОС се- мейства Linux можно использовать команду taskset). Обратите внимание, что, если процессор поддерживает Hyper-threading (гиперпоточность), на самом деле в списке бу- дет в два раза больше ядер, чем у него имеется физически. Можно либо отключить Hyper-threading в BIOS перед выпол- нением тестирования, либо просто выбрать два потока для каждого ядра ЦП, которое вы хотите протестировать. Потоки с Hyper-threading всегда отображаются сразу после физиче- ского ядра в Windows, поэтому нужно выбрать два ядра для каждого физического ядра ЦП, которое вы хотите использо- вать в программе. Другими словами, выбор ядер 1 и 2 позволит программе использовать только одно физическое ядро ЦП, выбор ядер 1–4 даст возможность программе использовать два физических ядра ЦП и т.д. Перед измерениями рекомендуется отключать функцию TurboBoost в BIOS. Это позволит повы- сить точность результатов. На рис. 1 приведён пример задания сходства для процессов через диспетчер задач Windows. Теперь, имея возможность ограничивать количество ядер, которое используется вашим ПО, можно рассчитать, за какой промежуток времени будет выполнен алгоритм. Например, имеется программа по распознаванию отсканированных до- кументов. Вам необходимо зафиксировать, за какое время бу- дет проведено распознавание и парсинг (Parsing – анализ) всех его полей при различном количестве задействованных S n p p n ( ) = − + 1 1 ядер. В табл. 1 в первом и втором столбцах приведены приме- ры записи результатов измерений. Следует отметить, что задание сходства устанавливается для конкретного экземпляра программы. Когда вы запустите про- грамму в следующий раз, то придётся заново выполнить при- вязку. Однако если вы хотите быстро протестировать одно дей- ствие, используя различное количество ядер ЦП, вам не нуж- но закрывать программу перед изменением количества задей- ствованных ядер – просто нажмите «Задать сходство» и изме- ните его прямо во время выполнения программы. Тем не менее вы получите более точные результаты, закрыв программу меж- ду запусками тестируемого алгоритма, поскольку это очистит область памяти ОЗУ, выделенную для программы. На следующем шаге у нас появятся данные для определе- ния эффективности распараллеливания p . Для начала мы мо- жем оценить, насколько быстрее программа выполнила опе- рации с n ядрами процессора относительно времени выпол- нения программы на одном ядре. Например, для четырёх ядер время выполнения составило 2,5 с, в то время как для одного ядра – 5,2 с, тогда получим рассчитанный прирост произво- дительности 5,2/2,5 = 2,08. Для точного расчёта параметра p по фактическим значе- ниям ускорения можно использовать метод наименьших квадратов для нелинейной функции, однако это достаточно трудоёмкий и сложный процесс. Для нас достаточно про- извести менее точную оценку. Да и время, потраченное высо- коквалифицированным специалистом на точный расчёт, воз- можно, будет стоит дороже, чем экономия бюджета при вы- боре оптимального решения. Существует простой способ оценить с достаточной точ- ностью эффективность распараллеливания вычислений. Предположим, что эффективность распараллеливания со- ставляет 50%. Для этого значения нужно рассчитать по фор- муле (1) прирост производительности и построить график в любом удобном пакете, например Excel (рис. 2). Из рис. 2 можно видеть, что фактическое ускорение при увеличении количества ядер выше, чем рассчитанное по за- Рис. 1. Пример задания количества используемых программой ядер процессора СТА 4/2020 89 www.cta.ru Таблица 1 Результаты проведения экспериментов Количество задействованных ядер Время выполнения Рассчитанный прирост производительности Прирост по закону Амдала ( p = 70%) 1 5,2 c 1 1 2 3,1 c 1,67 1,53 3 2,7 c 1,92 1,87 4 2,5 c 2,08 2,1 Рис. 2. График расчётного фактического ускорения и ускорения по закону Амдала при p = 50% Прирост производительности Количество ядер Вычисленный прирост 1 2,5 2 1,5 0,5 0 1 2 3 4 Прирост, рассчитанный по закону Амдала
Made with FlippingBook
RkJQdWJsaXNoZXIy MTQ4NjUy