Исторический контекст параллелизма сочинение пример

ООО "Сочинения-Про"

Ежедневно 8:00–20:00

Санкт-Петербург

Ленинский проспект, 140Ж

magbo system

Сочинение на тему Исторический контекст параллелизма

Исторический контекст параллелизма «Параллелизм» или «параллельные вычисления» – это термин, используемый для описания практики запуска или создания процессов, содержащих операции, которые могут выполняться одновременно. Хотя практика параллелизма становится все более популярной в последние годы, эта концепция возникла в 1842 г. в «Зарисовке аналитического двигателя, изобретенного Чарльзом Бэббиджем» [1] ». Menabrea описывает процесс, с помощью которого операция и дублирование набора введенных чисел могут передаваться по конвейеру, чтобы происходить одновременно.

Этот процесс не позволяет пользователю вводить один и тот же набор чисел более одного раза для использования во многих операциях и снижает как вероятность человеческой ошибки, так и общее время выполнения на вход. Хотя в то время это была необходимая оптимизация Появление цифровых вычислений временно отменило это требование из-за того, что скорость, с которой можно было вводить данные и выполнять операции, была значительно увеличена. Хотя в оригинальных электронных цифровых компьютерах, таких как ENIAC, использовалась форма параллелизма [2], последующие компьютеры чаще всего планировали операции с использованием более последовательного подхода, за исключением того, что это касается ввода или вывода. [3] Хотя первый коммерчески доступный параллельный компьютер был запущен в 1952 году [4], необходимость широко распространенных параллельных вычислений не была общепризнана намного позже, когда стало понятно, что отдельные процессоры, скорее всего, скоро достигнут своей максимальной скорости в терминах тактовой частоты и операций с плавающей запятой в секунду (FLOPS) [3].

В знак признания этого было определено, что наиболее эффективным способом увеличения скорости вычислений было добавление дополнительных процессорных блоков. Эта инициатива теперь называется многопроцессорной. Появление многопроцессорной обработки оказало большое влияние на разработку как аппаратного, так и программного обеспечения. , Поскольку скорость ЦП значительно превышала скорость любого другого компонента, необходимо было увеличить объем памяти, специфичной для ЦП, чтобы уменьшить замедление, вызванное временем чтения хранилища [5].

Чтобы ядра могли обмениваться данными без лишних задержек, необходимо было создать «мосты» между ядрами, которые работали со скоростью, сравнимой с самими ядрами. Чтобы облегчить совместную работу ядер при выполнении отдельных задач, доступность быстрой памяти, доступной для нескольких ядер, стала более важной. Это создало потребность в программном обеспечении, которое могло бы охватывать асинхронный характер доступа к этим банкам памяти, известным как «кеши», и иметь возможность эффективно разделять список задач, чтобы их можно было назначать нескольким ядрам. < / р>

Кэш

«Кэш» – это термин, обычно используемый для обозначения памяти с высокой скоростью доступа, которая зарезервирована исключительно для использования ЦПУ для ускорения выполняемых операций. Кэш может использоваться как своего рода буфер, где хранятся значимые фрагменты соответствующих данных в надежде, что они могут быть полезны («попадание в кэш»), или для хранения значений, которые генерируются процессором при выполнении операции. Одним из примеров первого может быть чтение следующих N значений списка, когда запрашивается первый элемент, так как вероятно, что остальные понадобятся впоследствии. Одним из примеров последнего может быть использование счетчика цикла во время операции среднего значения. Кэши организованы по «уровням» скорости, причем самый высокий (уровень 1) физически связан с процессором, часто с отдельным ядром. В современных процессорах кэши уровня 2 обычно подключаются к кэшу уровня 1 каждого ядра [6], в то время как кэш уровня 3 является отдельным и используется всеми ядрами. Архитектура кэша разработана таким образом, чтобы обеспечить многоуровневый подход к чтению из нее – если ядру требуются данные, кэш самого высокого уровня считывается. Если данные не найдены, кэши нижнего уровня считываются последовательно до тех пор, пока, наконец, не будет проведено обращение к основному хранилищу. Мосты «мост» – это термин, который обычно используется для описания соединения между процессором, его обслуживающим процессором и материнской платой. Во многих архитектурах есть два моста, называемые «северным мостом» и «южным мостом» [7].

Северный мост работает на тактовой частоте, которая лишь немного меньше, чем сами ядра процессора, и используется для обеспечения быстрой связи между ядрами и более быстрыми кэшами. Южный мост работает значительно медленнее, чем северный, и используется для передачи данных с материнской платы и на нее. В связи с этим его часто считают «реле ввода / вывода» для CPU. Однако стоит отметить, что эта архитектура была недавно изменена Intel, чтобы включить северный мост в матрицу ЦП [8], теперь известную как «песчаный мост». Это произошло для того, чтобы уменьшить потребность в специфичных для ЦП компонентах на материнской плате [9]. Парадигмы параллельного программирования. ThreadingDefinition ‘Threading’ – это термин, используемый для обозначения практики разделения программы на несколько отдельных потоков управления или «потоков». ‘, которые в значительной степени независимы друг от друга [10]. Эти потоки могут затем запускаться одновременно и, таким образом, могут значительно увеличить общую скорость выполнения процесса. Потоки имеют доступ к глобальному банку памяти и, таким образом, могут обмениваться данными друг с другом [11], хотя необходимо позаботиться о том, чтобы асинхронный доступ не влиял на эту общую память.

Описание

Большинство современных операционных систем широко используют многопоточность для оптимизации взаимодействия с пользователем [12]. Простой процесс, такой как Microsoft Notepad, может содержать только один поток, тогда как более сложный процесс, такой как Google Chrome, может содержать много потоков, выполняющих различные функции. Поток, управляемый операционной системой, называется «потоком ядра» и обычно создается при загрузке. Потоки, управляемые программами, управляемыми пользователями, называются «пользовательскими потоками» и отображаются при запуске в свободный поток ядра.

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

Этот подход может быть далее разбит на «мелкозернистую» многопоточность (где потоки переключаются между ними в режиме циклического перебора), «крупнозернистую» многопоточность (где потоки переключаются, если происходит особенно медленное чтение), многопоточность ‘time-slice’ (где потоки переключаются между по истечении установленного времени) и многопоточность ‘switch-on-event’ (где потоки переключаются, если текущий поток должен ждать ввода).

Преимущества

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

Недостатки

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

Кластерная обработка

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

Описание

При проектировании компьютерного кластера необходимо тщательно продумать физическую компоновку и описание компьютеров-компонентов с учетом задач, которые должна выполнять завершенная система. Обязанности, требующие разрозненной и несвязанной серии событий (например, запуск веб-сервера), могут не требовать однородности компонентных устройств, тогда как функциональность с высоким уровнем взаимодействия между процессами (например, сложные процедуры моделирования) может требовать более высокого уровня сопряженных и, следовательно, компонентных машин схожей спецификации [17]. Компьютерные кластеры могут быть сконструированы для выполнения различных задач, но акценты, из которых они построены, делятся на две основные категории; балансировка нагрузки и высокая доступность. Кластер с высокой доступностью или отказоустойчивостью создан для обеспечения бесперебойной работы предоставляемого сервиса независимо от обстоятельств. Это достигается путем создания простых виртуальных машин для обслуживания запросов, а не обслуживания их всех из основной операционной системы. В случае отказа одного из этих компьютеров можно быстро создать дубликат и возобновить поставленную задачу.

Кластер с балансировкой нагрузки пытается обеспечить равную долю рабочей нагрузки на всех компьютерах-компонентах в кластере, чтобы максимизировать эффективность выполнения. Параллелизм в этих системах обычно достигается с помощью интерфейса передачи сообщений или MPI. MPI построен на принципе использования пакетов данных, передаваемых между процессами, для синхронизации и обеспечения возможности их связи [15]. Это позволяет повысить эффективность как в локальном, так и в глобальном масштабе как в однородных, так и в гетерогенных кластерах, поскольку локальное планирование может быть делегировано компонентным машинам, в то же время позволяя осуществлять контроль с помощью всеобъемлющего протокола управления. Преимущества MPI – это его мобильность. Поскольку он основан на простой концепции, он может быть эффективно реализован на большом количестве оборудования. MPI (2) содержит поддержку операций с удаленной памятью и аналогов для файловых операций типа UNIX, что позволяет реализовать его для различных операционных систем [18].

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

Определение GPGPU

Общее программирование на графических процессорах (GPGPU) – это практика запуска программ с использованием графического процессора компьютера, а не его процессора. Поскольку графические процессоры специально созданы для облегчения одновременной обработки большого числа матричных операций, это может значительно повысить производительность программ, работающих совместимым образом. Описание GPPPU в настоящее время является широко используемым подходом к параллелизму благодаря тому, что Графические процессоры обычно обладают большим количеством однородных ядер и, следовательно, с концептуальной точки зрения, легко написать параллельные программы для. Впервые была предпринята попытка создания графического процессора GPGPU, когда DirectX 8 стал доступен [19], поскольку теперь в графической карте появились программируемые процедуры затенения вершин и пикселей , Первоначально, единственный способ выполнить GPGPU был через графический API, поэтому выполняемые алгоритмы должны были быть представлены графической карте, как если бы они были необходимы для рендеринга. На этом этапе функциональность, представленная GPGPU, была минимальной для ряда причины. [15] Во-первых, местоположения в графической памяти были выделены и управлялись графическим процессором, что означало, что алгоритмы, требующие случайных расположений в памяти, не могли быть запущены.

Кроме того, стандартизированный подход к арифметике с плавающей запятой в графическом процессоре практически не использовался, и поэтому нельзя было гарантировать, что научные вычисления будут выполняться на какой-либо конкретной машине. Наконец, в случае сбоя или сбоя программы программист практически не мог отладить ошибочный код. Эти проблемы были решены в 2006 году, когда Nvidia выпустила свой первый графический процессор, построенный с использованием архитектуры CUDA. Эта архитектура была разработана частично для облегчения использования графического процессора для программирования общего назначения, позволяя перепрограммирование многих конвейеров внутри карты [15].

Кроме того, встроенные ALU были сконструированы в соответствии с рекомендациями IEEE по арифметике с плавающей запятой и, таким образом, теперь надежно используются в научных расчетах. Наконец, Nvidia работала над тем, чтобы позволить разработчикам использовать C для взаимодействия с графической картой, вместо того, чтобы использовать шейдерный язык через DirectX или openGL. GPGPU фактически использует систему, которая в некоторой степени объединяет MPI и многопоточность, так как использует «блоки» или процессы, которые могут взаимодействовать друг с другом с помощью сообщений, а также позволяет разделить «блок» на множество потоков, которые взаимодействуют друг с другом с помощью общей памяти. [20] ПреимуществаGPGPU позволяет значительно увеличить скорость работы из-за архитектура используемого графического процессора.

Недостатки

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

Условия гонки

Состояние гонки формируется, когда вывод программы изменяется в зависимости от порядка выполнения данных инструкций. Одним из примеров этого является медицинский ускоритель Therac-25, который испускает смертельную дозу радиации, если пользователь сначала …

Зарегистрируйся, чтобы продолжить изучение работы

    Поделиться сочинением
    Ещё сочинения
    Нет времени делать работу? Закажите!

    Отправляя форму, вы соглашаетесь с политикой конфиденциальности и обработкой ваших персональных данных.