В каком диапазоне примерно лежит производительность современных персональных компьютеров

Обновлено: 07.07.2024

Сравнение компьютеров между собой обычно начинают с оценки их производительности. Это потребовало введения соответствующих единиц измерения производительности и разработки стандартных методов ее оценки.

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

В основе используемых в настоящее время методов оценки и сравнения производительности вычислительных систем лежит время.

Компьютер , который выполняет определенный объем работы за меньшее время, считается более быстродействующим.

Оценка временных характеристик выполняемых процессором работ - далеко не тривиальная задача.

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

Дополнительные сложности при сравнении временных характеристик решаемых на разных компьютерах задач обусловлены тем, что системный код при решении задачи на одном компьютере на другом компьютере может стать пользовательским.

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

Возникают серьезные методические трудности сравнения производительности компьютеров с разными операционными системами.

В связи с этим в методиках оценки производительности используют разное время:

  • астрономическое;
  • время выполнения ( execution time );
  • время ответа ( response time );
  • прошедшее время ( elapsed time ), представляющее задержку выполнения задания и включающее: время работы процессора, время обращения к жесткому диску, время обращения к ОП, время выполнения операций ввода/вывода, накладные расходы операционной системы.

Для измерения времени, затрачиваемого процессором на выполнение данной программе, используется специальное время, которое называют временем центрального процессора ( CPU time ). Из этого времени исключено время ожидания выполнения ввода-вывода и время выполнения других программ. Необходимость применения этого параметра обусловлена тем, что в многопрограммном режиме происходит совмещение во времени процедур, обслуживающих задачи, которые используют разные ресурсы.

Время центрального процессора можно разделить пользовательское и системное.

Все современные ЭВМ работают в общем случае, как минимум , в двух-задачном режиме, обслуживая запросы операционной системы и запросы задачи пользователя.

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

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

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

Важной характеристикой процессора является среднее количество тактов синхронизации, необходимых для выполнения одной команды ( CPI clock cycles per instruction ). Этот параметр позволяет легко оценить время центрального процессора, необходимое для данной программы, зная количество выполняемых в программе команд.

Производительность центрального процессора определяется тремя параметрами:

  • тактовой частотой;
  • средним количеством тактов на команду;
  • количеством выполняемых команд.

Все эти параметры тесно связаны между собой:

  • среднее количество тактов на команду зависит от функциональной организации и системы команд;
  • частота синхронизации зависит от уровня технологии производства аппаратных средств и функциональной организацией процессора;
  • количество выполняемых в программе команд определяется решаемой задачей, архитектурой системы и алгоритмом работы компиляторов. Для сравнения двух компьютеров по их производительности необходимо рассматривать все три компоненты.

В процессе поиска стандартной метрики для оценки производительности вычислительных систем было выбрано несколько единиц измерения.

Одной из наиболее распространенных среди них является MIPS (Million Instruction Per Second ). Она показывает количество команд программы, выполняемых в секунду.

Производительность определяется как обратная ко времени выполнения величина, а более быстродействующий компьютер имеет более высокий MIPS - рейтинг .

На первый взгляд метрика очень проста, но ее использование не позволяет учесть особенности выполняемой программы и архитектуру процессора. Невозможно сравнивать компьютеры, имеющие разные системы команд. Даже на одном компьютере результат меняется при решении разных задач. Серьезные проблемы возникают в связи с использованием сопроцессоров для выполнения команд с плавающей запятой и оптимизирующих компиляторов. Все это не дает возможности выполнять объективное сравнение разных процессоров.

С понятием MIPS в свое время была связано еще две метрики, основанные на производительности эталонных компьютеров VAX 11/780 компании DEC и одной из моделей RS/6000 компании IBM . Производительность этих компьютеров определялась как 1 MIPS . Производительность тестируемых систем вычислялась относительно производительности этих компьютеров, которые являются эталонными. Приблизительное соотношение между этими величинами таково: 1 IBM MIPS равен 1.6 DEC MIPS .

Использование эталонного компьютера сопряжено с серьезными трудностями:

  • необходимо постоянно воспроизводить или сохранять эталон;
  • требуется двойное программирование тестовых задач: на тестируемом и эталонном компьютере.

Использование измерения производительности компьютеров в MIPS не всегда объективно. Примером могут служить задачи, связанные с научно-техническими расчетами. В них широко применяется арифметика с плавающей точкой. Решение этих задач требует значительных вычислительных ресурсов. Вопрос оценки производительности используемых при их решении вычислительных систем всегда стоял очень остро. При этом достигнутые показатели производительности служили и служат показателем уровня разработок вычислительной техники.

Поэтому для подобных приложений производительность процессора оценивалась и оценивается в FLOPS ( Fl oating point O perations P er S econd), который показывает, сколько операций с плавающей запятой выполняется компьютером в секунду.

Современные компьютеры имеют достаточно высокий уровень производительности, поэтому в настоящее время используются производные величины от FLOPS : MFLOPS , GFOPS, TFLOPS , PFLOPS.

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

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

Однако у MFLOPS есть свои недостатки. Прежде всего, это связано с тем, что отсутствует совместимость операций с плавающей точкой на различных компьютерах.

Другая проблема заключается в том, что время выполнения разных операций с плавающей запятой может существенно отличаться, в результате рейтинг MFLOPS существенно зависит от состава тестовой смеси. Например, программа , состоящая из операций сложения, будет иметь более высокий рейтинг , чем программа , состоящая из операций умножения, при равном количестве этих операций.

Для оценки показателей производительности в MIPS и MFLOPS используется очень много различных тестов. Рассмотрим несколько примеров.

Тестовая смесь Dhrystone в настоящее время практически не применяется.

Смесь состоит из ста команд. Из них 53 оператора присваивания, 32 команды управления, 15 вызовов функций. В качестве метрики используется количество Dhrystone в секунду. Тест очень короткий [301, 302].

"Ливерморские циклы" представляют собой типичный набор фрагментов программ на языке FORTRAN . [301, 302] В этих программах реализованы разные вычислительные алгоритмы:

  • сеточные;
  • волновые;
  • последовательные.

Их выбор был основан на богатом опыте создания суперкомпьютеров и проведения сложнейших научных и инженерных расчетов Ливерморской национальной лаборатории им. Э. Лоуренса (Lawrence Livermore National Laboratory, LLNL ) Министерства энергетики США

При тестировании используется либо малый набор (14 циклов), либо большой набор (24 цикла ).

Коэффициент распараллеливания применяемых алгоритмов лежит в диапазоне от 0 до 1. Это позволяет использовать "Ливерморские циклы" для оценки производительности вычислительных систем, имеющих различную архитектуру. Тест практически не используется.

Тесты LINPACK представляют собой программы я решения систем линейных алгебраических уравнений большой размерности. Они написаны на языке программирования FORTRAN [301, 302].

Применяемые в этих программах алгоритмы широко используются при решении многих практических задач. С эти связана популярность этого теста среди пользователей.

Аргонская национальная лаборатория ( Argonne National Lab ) Министерства энергетики США регулярно публикует результаты тестирования различных вычислительных систем на тестах LINPACK .

В основе используемых в LINPACK алгоритмов лежит метод декомпозиции, широко применяемый при высокопроизводительных вычислениях. Достоинством тестов LINPACK является их структурированность. Для реализации элементарных операций над векторами, которые включаю умножение векторов на скаляр, сложение векторов, скалярное произведение векторов выделяется базовый уровень системы, называемый BLAS ( Basic Linear Algebra Subprograms ).

Исходные данные для тестирования представляются в виде вещественных чисел двойной точности. Полученные результаты выражаются в MFLOPS .

Тест LINPACK имеет два уровня.

В тесте первого уровня LINPACK DP используется исходной матрицы размером 100*100. В тесте второго уровня LINPACK TPP исходная матрица имеет размерность 1000*1000.

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

В этом случае полученные результаты могут существенно превышать реальные возможности системы.

Применение тестов LINPACK TPP, LINPACK TPP для систем с массовым параллелизмом поводит к неадекватной оценки их производительности

Для оценки производительности таких систем используется тест LINPACK HPC ( Highly Parallel Computing ), который обеспечивает полную загрузку вычислительных ресурсов MPP-системы, увеличивая размеры матрицы. Вариант этого теста разработан и для параллельных вычислительных систем.

Тестовый пакета LINPACK с двойной точностью широко используется создателями высокопроизводительных вычислительных систем.

Анализ подходов к оценке производительности вычислительных систем позволяет сделать следующие выводы:

Скорость работы стационарного компьютера или ноутбука зависит от многих факторов. Поэтому нельзя ожидать значительного увеличения производительности ПК, если вы улучшите только один компонент, например, установите более быстрый процессор. Чтобы компьютер стал ощутимей быстрее работать, следует улучшить сразу несколько характеристик комплектующих, а желательно даже все. Это вполне закономерно, ведь ваш компьютер не будет работать быстрее, чем того позволяет самое медленное устройство в системе.

Тактовая частота процессора


При определении производительности компьютера в первую очередь смотрят на тактовую частоту процессора. Этот показатель оказывает влияние на скорость проведения операций ЦП. Частотой процессора называется тактовая частота ядра, который является его основным компонентом, в тот момент, когда система максимально загружена.

Величина измерения данного параметра – мегагерцы и гигагерцы. Показатель тактовой частоты не отображает количество выполненных операций за секунду . Дело в том, что на выполнение определенных операций может тратиться по несколько тактов. Естественно, что компьютер с процессором с большей тактовой частотой, чем у идентичного по другим параметрам компьютера, сможет выполнять больше задач за единицу времени.

Оперативная память


Второй по важности параметр компьютера, оказывающий влияние на производительность – это объем оперативной памяти. Это второй по скорости компонент в компьютере, уступающий лишь процессору. Однако разница в показателях скорости у этих устройств существенная. Следует учитывать, что чем больше у вас будет оперативной памяти, тем более полно сможет задействоваться процессор.

Обмен информации с оперативной памятью проходит куда быстрее, чем с другими устройствами, например, с жестким диском. Именно поэтому повышение объема ОЗУ приведет к существенному ускорению работы компьютера.

Жесткий диск


На производительность компьютера также оказывает существенное влияние объем жесткого диска и скорость его работы. Объем винчестера не так важен, главное, чтобы на системном диске оставалось до 10% свободного места. А вот скорость связи шины жесткого диска – это куда более значительный фактор.

Сегодня на смену обычным жестким дискам пришли более скоростные SSD диски , в которых отсутствуют движущиеся части. Они работают по принципу флешки. Скорость обмена информации в них в разы превышают аналогичный параметр для винчестеров. Происходит это из-за того, что большие файлы считываются одновременно из нескольких микросхем, за счет этого и увеличивается производительность компьютера. Кроме того, здесь нет головок, которые перемещаются по диску и тормозят весь процесс считывания/записи информации. Однако главный недостаток SSD дисков остается по-прежнему актуальным – высокая цена.

Дефрагментация файлов

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

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


Чтобы выполнить дефрагментацию диска в операционной системе Windows 7, необходимо зайти в меню Пуск , выбрать Все программы – Стандартные – Служебные – Дефрагментация диска .

Одновременно выполняемые задачи в ОС

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

Снижать производительность компьютера могут и вирусы, поэтому установите надежное антивирусное ПО, и сканируйте систему на наличие вредоносных программ.

Компьютеры, даже персональные, становятся все сложнее. Не так уж давно в гудящем на столе ящике все было просто — чем больше частота, тем больше производительность. Теперь же системы стали многоядерными, многопроцессорными, в них появились специализированные ускорители, компьютеры все чаще объединяются в кластеры.
Зачем? Как во всем этом многообразии разобраться?
Что значит SIMD, SMP, GPGPU и другие страшные слова, которые встречаются все чаще?
Каковы границы применимости существующих технологий повышения производительности?

Введение

Откуда такие сложности?

Компьютерные мощности быстро растут и все время кажется, что все, существующей скорости хватит на все.
Но нет — растущая производительность позволяет решать проблемы, к которым раньше нельзя было подступиться. Даже на бытовом уровне есть задачи, которые загрузят ваш компьютер надолго, например кодирование домашнего видео. В промышленности и науке таких задач еще больше: огромные базы данных, молекулярно-динамические расчеты, моделирование сложных механизмов — автомобилей, реактивных двигателей, все это требует возрастающей мощности вычислений.
В предыдущие годы основной рост производительности обеспечивался достаточно просто, с помощью уменьшения размеров элементов микропроцессоров. При этом падало энергопотребление и росли частоты работы, компьютеры становились все быстрее, сохраняя, в общих чертах, свою архитектуру. Менялся техпроцесс производства микросхем и мегагерцы вырастали в гигагерцы, радуя пользователей возросшей производительностью, ведь если «мега» это миллион, то «гига» это уже миллиард операций в секунду.
Но, как известно, рай бывает либо не навсегда, либо не для всех, и не так давно он в компьютерном мире закончился. Оказалось, частоту дальше повышать нельзя — растут токи утечки, процессоры перегреваются и обойти это не получается. Можно, конечно, развивать системы охлаждения, применять водные радиаторы или совсем уж жидким азотом охлаждать — но это не для каждого пользователя доступно, только для суперкомпьютеров или техноманьяков. Да и при любом охлаждении возможность роста была небольшой, где-то раза в два максимум, что для пользователей, привыкших к геометрической прогрессии, было неприемлемо.
Казалось, что закон Мура, по которому число транзисторов и связанная с ним производительность компьютеров удваивалась каждые полтора-два года, перестанет действовать.
Пришло время думать и экспериментировать, вспоминая все возможные способы увеличения скорости вычислений.

Формула производительности

Возьмем самую общую формулу производительности:


Видим, что производительность можно измерять в количестве выполняемых инструкций за секунду.
Распишем процесс поподробнее, введем туда тактовую частоту:


Первая часть полученного произведения — количество инструкций, выполняемых за один такт (IPC, Instruction Per Clock), вторая — количество тактов процессора в единицу времени, тактовая частота.
Таким образом, для увеличения производительности нужно или поднимать тактовую частоту или увеличивать количество инструкций, выполняемых за один такт.
Т.к. рост частоты остановился, придется увеличивать количество исполняемых «за раз» инструкций.

Включаем параллельность

Как же увеличить количество инструкций, исполняемых за один такт?
Очевидно, выполняя несколько инструкций за один раз, параллельно. Но как это сделать?
Все сильно зависит от выполняемой программы.
Если программа написана программистом как однопоточная, где все инструкции выполняются последовательно, друг за другом, то процессору (или компилятору) придется «думать за человека» и искать части программы, которые можно выполнить одновременно, распараллелить.

Параллелизм на уровне инструкций

Возьмем простенькую программу:
a = 1
b = 2
c = a + b

Первые две инструкции вполне можно выполнять параллельно, только третья от них зависит. А значит — всю программу можно выполнить за два шага, а не за три.
Процессор, который умеет сам определять независимые и непротиворечащие друг другу инструкции и параллельно их выполнять, называется суперскалярным.
Очень многие современные процессоры, включая и последние x86 — суперскалярные процессоры, но есть и другой путь: упростить процессор и возложить поиск параллельности на компилятор. Процессор при этом выполняет команды «пачками», которые заготовил для него компилятор программы, в каждой такой «пачке» — набор инструкций, которые не зависят друг от друга и могут исполняться параллельно. Такая архитектура называется VLIW (very long instruction word — «очень длинная машинная команда»), её дальнейшее развитие получило имя EPIC (explicitly parallel instruction computing) — микропроцессорная архитектура с явным параллелизмом команд)
Самые известные процессоры с такой архитектурой — Intel Itanium.
Есть и третий вариант увеличения количества инструкций, выполняемых за один такт, это технология Hyper Threading В этой технологии суперскалярный процессор самостоятельно распараллеливает не команды одного потока, а команды нескольких (в современных процессорах — двух) параллельно запущенных потоков.
Т.е. физически процессорное ядро одно, но простаивающие при выполнении одной задачи мощности процессора могут быть использованы для выполнения другой. Операционная система видит один процессор (или одно ядро процессора) с технологией Hyper Threading как два независимых процессора. Но на самом деле, конечно, Hyper Threading работает хуже, чем реальные два независимых процессора т.к. задачи на нем будут конкурировать за вычислительные мощности между собой.

Технологии параллелизма на уровне инструкций активно развивались в 90е и первую половину 2000х годов, но в настоящее время их потенциал практически исчерпан. Можно переставлять местами команды, переименовывать регистры и использовать другие оптимизации, выделяя из последовательного кода параллельно исполняющиеся участки, но все равно зависимости и ветвления не дадут полностью автоматически распараллелить код. Параллелизм на уровне инструкций хорош тем, что не требует вмешательства человека — но этим он и плох: пока человек умнее микропроцессора, писать по-настоящему параллельный код придется ему.

Параллелизм на уровне данных

Векторные процессоры

Мы уже упоминали скалярность, но кроме скаляра есть и вектор, и кроме суперскалярных процессоров есть векторные.
Векторные процессоры выполняют какую-то операцию над целыми массивами данных, векторами. В «чистом» виде векторные процессоры применялись в суперкомьютерах для научных вычислений в 80-е годы.
По классификации Флинна, векторные процессоры относятся к SIMD — (single instruction, multiple data — одиночный поток команд, множественный поток данных).
В настоящее время в процессорах x86 реализовано множество векторных расширений — это MMX, 3DNow!, SSE, SSE2 и др.
Вот как, например, выглядит умножение четырех пар чисел одной командой с применением SSE:

float a[4] = < 300.0, 4.0, 4.0, 12.0 >;
float b[4] = < 1.5, 2.5, 3.5, 4.5 >;
__asm movups xmm0, a ; // поместить 4 переменные с плавающей точкой из a в регистр xmm0
movups xmm1, b ; // поместить 4 переменные с плавающей точкой из b в регистр xmm1
mulps xmm1, xmm0 ; // перемножить пакеты плавающих точек: xmm1=xmm1*xmm0
movups a, xmm1 ; // выгрузить результаты из регистра xmm1 по адресам a
>;

Таким образом, вместо четырех последовательных скалярных умножений мы сделали только одно — векторное.
Векторные процессоры могут значительно ускорить вычисления над большими объемами данных, но сфера их применимости ограничена, далеко не везде применимы типовые операции над фиксированными массивами.
Впрочем, гонка векторизации вычислений далеко не закончена — так в последних процессорах Intel появилось новое векторное расширение AVX (Advanced Vector Extension)
Но гораздо интереснее сейчас выглядят

Графические процессоры


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

Не так давно эта мощность была приспособлена для универсальных высокопроизводительных вычислений с помощью CUDA/OpenCL.
Архитектура графических процессоров (GPGPU, General Purpose computation on GPU – универсальные расчеты средствами видеокарты), близка к уже рассмотренной SIMD.
Она называется SIMT — (single instruction, multiple threads, одна инструкция — множество потоков). Так же как в SIMD операции производятся с массивами данных, но степеней свободы гораздо больше — для каждой ячейки обрабатываемых данных работает отдельная нить команд.
В результате
1) Параллельно могут выполняться сотни операций над сотнями ячеек данных.
2) В каждом потоке выполняется произвольная последовательность команд, она может обращаться к разным ячейкам.
3) Возможны ветвления. При этом, правда, параллельно могут выполняться только нити с одной и той же последовательностью операций.

GPGPU позволяют достичь на некоторых задачах впечатляющих результатов. но существуют и принципиальные ограничения, не позволяющие этой технологии стать универсальной палочкой-выручалочкой, а именно
1) Ускорить на GPU можно только хорошо параллелящийся по данным код.
2) GPU использует собственную память. Трансфер данных между памятью GPU и памятью компьютера довольно затратен.
3) Алгоритмы с большим количеством ветвлений работают на GPU неэффективно

Мультиархитектуры-

Итак, мы дошли до полностью параллельных архитектур — независимо параллельных и по командам, и по данным.
В классификации Флинна это MIMD (Multiple Instruction stream, Multiple Data stream — Множественный поток Команд, Множественный поток Данных).
Для использования всей мощности таких систем нужны многопоточные программы, их выполнение можно «разбросать» на несколько микропроцессоров и этим достичь увеличения производительности без роста частоты. Различные технологии многопоточности давно применялись в суперкомпьютерах, сейчас они «спустились с небес» к простым пользователям и многоядерный процессор уже скорее правило, чем исключение. Но многоядерность далеко не панацея.

Суров закон, но это закон

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

Ускорение кода зависит от числа процессоров и параллельности кода согласно формуле


Действительно, с помощью параллельного выполнения мы можем ускорить время выполнения только параллельного кода.
В любой же программе кроме параллельного кода есть и последовательные участки и ускорить их с помощью увеличения количества процессоров не получится, над ними будет работать только один процессор.


Например, если выполнение последовательного кода занимает всего 25% от времени выполнения всей программы, то ускорить эту программу более чем в 4 раза не получится никак.
Давайте построим график зависимости ускорения нашей программы от количества параллельно работающих вычислителей-процессоров. Подставив в формулу 1/4 последовательного кода и 3/4 параллельного, получим

Грустно? Еще как.
Самый быстрый в мире суперкомпьютер с тысячами процессоров и терабайтами памяти на нашей, вроде бы даже неплохо (75%!) параллелящейся задаче, меньше чем вдвое быстрее обычного настольного четырехядерника.
Причем всё еще хуже, чем в этом идеальном случае. В реальном мире затраты обеспечение параллельности никогда не равны нулю и потому при добавлении все новых и новых процессоров производительность, начиная с некоторого момента, начнет падать.
Но как же тогда используется мощь современных очень-очень многоядерных суперкомпьютеров?
Во многих алгоритмах время исполнения параллельного кода сильно зависит от количества обрабатываемых данных, а время исполнения последовательного кода — нет. Чем больше данных требуется обработать, тем больше выигрыш от параллельности их обработки. Потому «загоняя» на суперкомп большие объемы данных получаем хорошее ускорение.
Например перемножая матрицы 3*3 на суперкомпьютере мы вряд ли заметим разницу с обычным однопроцессорным вариантом, а вот умножение матриц, размером 1000*1000 уже будет вполне оправдано на многоядерной машине.
Есть такой простой пример: 9 женщин за 1 месяц не могут родить одного ребенка. Параллельность здесь не работает. Но вот та же 81 женщина за 9 месяцев могут родить (берем максимальную эффективность!) 81 ребенка, т.е.получим максимальную теоретическую производительность от увеличения параллельности, 9 ребенков в месяц или, в среднем, тот же один ребенок в месяц на 9 женщин.
Большим компьютерам — большие задачи!

Мультипроцессор

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

Системы с общей памятью


В таких системах множество процессоров (и процессорных кэшей) имеет доступ к одной и той же физической оперативной памяти. Такая модель часто называется симметричной мультипроцессорностью (SMP). Доступ к памяти при таком построении системы называется UMA (uniform memory access, равномерный доступ) т.к. любой процессор может обратиться к любой ячейке памяти и скорость этого обращения не зависит от адреса памяти. Однако каждый микропроцессор может использовать свой собственный кэш.

Несколько подсистем кэш-памяти процессоров, как правило, подключены к общей памяти через шину

Посмотрим на рисунок.
Что у нас хорошего?
Любой процессор обращается ко всей памяти и вся она работает одинаково. Программировать для таких систем проще, чем для любых других мультиархитектур. Плохо то, что все процессоры обращаются к памяти через шину, и с ростом числа вычислительных ядер пропускная способность этой шины быстро становится узким местом.
Добавляет головной боли и проблема обеспечения когерентности кэшей.

Когерентность кэша

Допустим, у нас есть многопроцессорный компьютер. Каждый процессор имеет свой кэш, ну, как на рисунке вверху. Пусть некоторую ячейку памяти читали несколько процессоров — и она попала к ним в кэши. Ничего страшного, пока это ячейка неизменна — из быстрых кэшей она читается и как-то используется в вычислениях.
Если же в результате работы программы один из процессоров изменит эту ячейку памяти, чтоб не было рассогласования, чтоб все остальные процессоры «видели» это обновление придется изменять содержимое кэша всех процессоров и как-то тормозить их на время этого обновления.
Хорошо если число ядер/процессоров 2, как в настольном компьютере, а если 8 или 16? И если все они обмениваются данными через одну шину?
Потери в производительности могут быть очень значительные.

Многоядерные процессоры


Как бы снизить нагрузку на шину?
Прежде всего можно перестать её использовать для обеспечения когерентности. Что для этого проще всего сделать?
Да-да, использовать общий кэш. Так устроены большинство современных многоядерных процессоров.

Посмотрим на картинку, найдем два отличия от предыдущей.
Да, кэш теперь один на всех, соответственно, проблема когерентности не стоит. А еще круги превратились в прямоугольники, это символизирует тот факт, что все ядра и кэши находятся на одном кристалле. В реальной действительности картинка несколько сложнее, кэши бывают многоуровневыми, часть общие, часть нет, для связи между ними может использоваться специальная шина, но все настоящие многоядерные процессоры не используют внешнюю шину для обеспечения когерентности кэша, а значит — снижают нагрузку на нее.
Многоядерные процессоры — один из основных способов повышения производительности современных компьютеров.
Уже выпускаются 6 ядерные процессоры, в дальшейшем ядер будет еще больше… где пределы?
Прежде всего «ядерность» процессоров ограничивается тепловыделением, чем больше транзисторов одновременно работают в одном кристалле, тем больше этот кристалл греется, тем сложнее его охлаждать.
А второе большое ограничение — опять же пропускная способность внешней шины. Много ядер требуют много данных, чтоб их перемалывать, скорости шины перестает хватать, приходится отказываться от SMP в пользу

NUMA (Non-Uniform Memory Access — «неравномерный доступ к памяти» или Non-Uniform Memory Architecture — «Архитектура с неравномерной памятью») — архитектура, в которой, при общем адресном пространстве, скорость доступа к памяти зависит от ее расположения Обычно у процессора есть " своя" память, обращение к которой быстрее и «чужая», доступ к которой медленнее.
В современных системах это выглядит примерно так


Процессоры соединены с памятью и друг с другом с помощью быстрой шины, в случае AMD это Hyper Transport, в случае последних процессоров Intel это QuickPath Interconnect
Т.к. нет общей для всех шины то, при работе со «своей» памятью, она перестает быть узким местом системы.
NUMA архитектура позволяет создавать достаточно производительные многопроцессорные системы, а учитывая многоядерность современных процессоров получим уже очень серьезную вычислительную мощность «в одном корпусе», ограниченную в основном сложностью обеспечения кэш-когерентности этой путаницы процессоров и памяти.
Но если нам нужна еще большая мощность, придется объединять несколько мультипроцессоров в

Мультикомпьютер

Сводим все воедино

Ну вот, вкратце пробежались почти по всем технологиям и принципам построения мощных вычислительных систем.
Теперь есть возможность представить себе строение современного суперкомпьютера.
Это мультикомпьютер-кластер, каждый узел которого — NUMA или SMP система с несколькими процессорами, каждый из процессоров с несколькими ядрами, каждое ядро с возможностью суперскалярного внутреннего параллелизма и векторными расширениями. Вдобавок ко всему этому во многих суперкомпьютерах установлены GPGPU — ускорители.
У всех этих технологий есть плюсы и ограничения, есть тонкости в применении.
А теперь попробуйте эффективно загрузить-запрограммировать всё это великолепие!
Задача нетривиальная… но очень интересная.
Что-то будет дальше?

Первой действующей ЭВМ стал ENIAC (США, 1945-46 гг.). ENIAC содержал 18000 электронных ламп и потреблял 150 квт электроэнергии. Однако, эта машина еще не использовала принцип хранимой программы. Большой вклад в разработку ЭВМ внес американский математик Джон фон Нейман. Один из важнейших принципов конструирования ЭВМ предложенный Нейманом — принцип хранимой программы был впервые реализован в Англии в 1949 году в машине EDSAC и используется и в современных компьютерах. Этот принцип требует, чтобы программа вводилась в память компьютера также, как в нее вводятся данные.Первая отечественная ЭВМ (МЭСМ) была создана в 1951 г. под руководством С.А. Лебедева. В середине 60-х создана машина БЭСМ, бывшая базовой в СССР в научных, оборонных, космических исследованиях. Из других ЭВМ следует упомянуть "Минск", "Урал", "Мир" и др., созданные под руководством И.С. Брука, В.М. Глушкова и других.В истории развития вычислительной техники принято выделять поколения ЭВМ. Переход от одного поколения к другому связан со сменой элементной базы на которой построен компьютер. Выделяют следующие четыре поколения ЭВМ:

· первое поколение: 1946-1957 годы; элементная база – электронные вакуумные лампы; оперативное запоминающее устройство (ОЗУ) – до 100 байт; быстродействие — до 10000 операций в секунду;

· третье поколение: 1965-1975 годы; элементная база – малые интегральные схемы; ОЗУ — до 10 Кбайт; быстродействие – до 10 млн. операций в секунду;

· четвертое поколение: 1976 год; элементная база — большие (БИС) и сверхбольшие (СБИС) интегральные схемы; ОЗУ — от 100 Кбайт и выше; быстродействие — свыше 10 млн. операций в секунду.

Следует заметить, что граница между третьим и четвертым поколениями ЭВМ по признаку элементной базы достаточно условна: произошло, скорее количественное изменение параметров элементной базы.

Основные характеристики ЭВМ.

Быстродействие и производительность ЭВМ.

Кроме того, единица измерения быстродействия компьютера "операции в секунду" устарела. Она не достаточно правильно отражает быстродействие. Для компьютеров первых поколений под "операцией" часто понимали сложение двух целых чисел определенной длины. Операция умножения выполнялась в десятки раз медленнее, чем сложение. Поэтому для современных компьютеров чаще используется характеристика — тактовая частота. Тактовая частота – это количество импульсов в секунду (герц), генерируемых тактовым генератором компьютера. Тактовая частота — более мелкая единица измерения, чем операции в секунду. Фирмы — производители компьютеров стремятся к тому, чтобы уменьшить количество тактов, необходимых для выполнения базовых операций, и, тем самым, повысить быстродействие компьютеров.Современные персональные компьютеры характеризуются быстродействием свыше 2 Ггц и ОЗУ — более 256 Мбайт.Классификация компьютеров, исходящая из производительности и функционального назначения показана на рисунке 1.1.

Рис. 1.1.Классификация компьютеров по производительности.

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

Казалось бы, что более быстродействующая вычислительная тех­ника должна обеспечивать и более высокие показатели производитель­ности. Однако практика измерений значений этих характеристик для разнотипных ЭВМ может давать противоречивые результаты. Основ­ные трудности в решении данной задачи заключены в проблеме вы­бора: что и как измерять. Укажем лишь наиболее распространенные подходы.

Одной из альтернативных единиц измерения быстродействия была и остается величина, измеряемая в MIPS (Million Instructions Per Se­cond — миллион операций в секунду). В качестве операций здесь обыч­но рассматриваются наиболее короткие операции типа сложения. MIPS широко использовалась для оценки больших машин второго и третье­го поколений, но для оценки современных ЭВМ применяется доста­точно редко по следующим причинам:




• набор команд современных микропроцессоров может включать сотни команд, сильно отличающихся друг от друга длительнос­тью выполнения;

• значение, выраженное в MIPS, меняется в зависимости от особен­ностей программ;

• значение MIPS и значение производительности могут противоре­чить друг другу, когда оцениваются разнотипные вычислители (например, ЭВМ, содержащие сопроцессор для чисел с плавающей точкой и без такового).

При решении научно-технических задач в программах резко уве­личивается удельный вес операций с плавающей точкой. Опять же для больших однопроцессорных машин в этом случае использова­лась и продолжает использоваться характеристика быстродействия, выраженная в MFPOPS (Million Floating Point Operations Per Se­cond — миллион операций с плавающей точкой в секунду). Для персональных ЭВМ этот показатель практически не применяется из-за особенностей решаемых задач и структурных характеристик ЭВМ.

Читайте также: