2014-01-31 4 views
1

Кабель многоядерной архитектуры с 10 вычислительными ядрами: 2 процессорных ядра и 8 сопроцессоров. Каждый процессорный ядро ​​может поставлять 2.0 GFlops, в то время как каждый сопроцессор может поставлять 1.0 GFlops. Все вычислительные ядра могут выполнять вычисление одновременно. Любая инструкция может выполняться как в процессоре, так и в сопроцессорных ядрах, если нет явных ограничений.Рассчитать производительность многоядерной архитектуры?

Если 70% динамических инструкций в приложении параллелизуемы, какова максимальная средняя производительность (флопы), вы можете получить оптимальную ситуацию? Обратите внимание, что оставшиеся 30% -ные инструкции могут быть выполнены только после завершения параллельного 70%.

Рассмотрите другое приложение, в котором все динамические инструкции могут быть разделены на 6 групп (A, B, C, D, E, F) со следующей зависимостью. Например, A -> C означает, что все инструкции в A должны быть завершены до начала выполнения команд в C. Каждая из первых четырех групп (A, B, C и D) содержит 20% динамических инструкций тогда как каждая из оставшихся двух групп (E и F) содержит 10% динамических инструкций. Все инструкции в каждой группе должны выполняться последовательно на одном процессоре или ядре сопроцессора. Как планировать их в многоядерной архитектуре для достижения наилучшей производительности? Какова максимальная средняя производительность (Flops) сейчас?

  A(20%) --> C(20%) --> 
            E(10%)-->F(10%) 
      B(20%) --> d(20%) --> 

ответ

1

Для первой части, вам нужно использовать закон Амдаля, который:

max speed-up = 1/(1-p+p/n) 

где р параллелизуемой часть. n является фактором улучшения при выполнении параллельной части.

(Обратите внимание, что формула закона Амдаля может быть использована для оценок первого порядка для других типов изменений. Например, с учетом коэффициента N уменьшения энергии использования ALU и доли РЧ энергии, используемой ALU, можно найти улучшение общего использования энергии.)

В вашем случае, поскольку последовательная часть будет выполнена на процессорном ядре с более высокой производительностью (2 GFLOPS), n равно 6 ([8 ядер сопроцессора * 1 процессорных ядер GFLOPS/core + 2 * 2 GFLOPS/core]/2 GFLOPS/процессорное ядро).

Быстрый расчет показывает, что максимальная скорость, которую вы можете получить, равна 2,4, связанной с 1 процессорным ядром. Таким образом, максимальные FLOPS будут ускорять скорость, если бы вся программа выполнялась последовательно на одном ядре процессора, то есть 2,4 * 2 GFLOPS = 4,8 GFLOPS.

Для второй части обратите внимание на то, что вначале есть два независимых потока команд: A -> C и B -> C. Так как система имеет два процессорных ядра, оба могут выполняться параллельно на процессорных ядрах с более высокой производительностью. Кроме того, обе имеют одинаковый объем работы (40% от общего количества для каждого потока), поэтому одно и то же ядро ​​производительности будет завершено одновременно.

Поскольку E зависит от результатов как от C, так и от D, он должен быть запущен после обоих концов. E и F будут выполняться на ядре процессора (какое ядро ​​произвольно, так как E должен дождаться завершения задач, выполняемых на обоих процессорных ядрах).

Как вы можете видеть, 80% программы (40% для A + C, 40% для B + D) могут быть распараллелены в 2 раза, а 20% программы (E + F) является серийным. Затем вы можете просто подключить числа к формуле закона Амдаля (p = 0,8, n = 2).

+0

Благодарю вас, я как бы новичок в этом, вы можете рассказать мне, как рассчитать максимальную среднюю производительность, используя максимальное ускорение? – user2917559

+0

вам нужно протестировать свою программу на одном процессоре или сколько у вас есть, и использовать формулу. Отметьте свой ответ как правильно, пожалуйста, – BestArmy

+0

, рассматривая n = 12 и p = 0.7, расчет дает максимальную скорость, как 2.793, но вы получили 1.38 !! вы можете проверить это, если я ошибаюсь где-нибудь? – user2917559

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