Введение
Алгоритм – это последовательность инструкций, выполняемых для решения проблемы. При разработке алгоритма мы должны учитывать архитектуру компьютера, на котором будет выполняться алгоритм. Согласно архитектуре, есть два типа компьютеров:
- Последовательный компьютер;
- Параллельный компьютер.
В зависимости от архитектуры компьютеров, у нас есть два типа алгоритмов:
- Последовательный алгоритм – алгоритм, в котором некоторые последовательные шаги инструкций выполняются в хронологическом порядке для решения проблемы.
- Параллельный алгоритм. Задача делится на подзадачи и выполняется параллельно для получения отдельных выходных данных. Позже, эти отдельные выходы объединяются, чтобы получить конечный желаемый результат.
Нелегко разделить большую проблему на подзадачи. Подзадачи могут иметь зависимость данных между ними. Поэтому процессоры должны общаться друг с другом, чтобы решить проблему.
Было обнаружено, что время, необходимое процессорам для связи друг с другом, больше, чем фактическое время обработки [1]. Таким образом, при разработке параллельного алгоритма необходимо учитывать правильную загрузку ЦП, чтобы получить эффективный алгоритм.
Чтобы правильно спроектировать алгоритм, мы должны иметь четкое представление об основной модели вычислений на параллельном компьютере.
Как последовательные, так и параллельные компьютеры работают с набором (потоком) инструкций, называемых алгоритмами. Этот набор инструкций (алгоритм) инструктирует компьютер о том, что он должен делать на каждом этапе.
В зависимости от потока команд и потока данных компьютеры можно разделить на четыре категории:
- Компьютеры с одним потоком команд, с одним потоком данных (SISD);
- Один поток инструкций, компьютеры с несколькими потоками данных (SIMD);
- Множественный поток команд, компьютеры с одним потоком данных (MISD);
- Множественный поток команд, компьютеры с несколькими потоками данных (MIMD).
Компьютеры SISD содержат один блок управления, один блок обработки и один блок памяти.
В компьютерах этого типа процессор принимает единый поток инструкций от блока управления и оперирует единым потоком данных из блока памяти. Во время вычислений на каждом этапе процессор принимает одну инструкцию от блока управления и оперирует единственными данными, полученными из блока памяти.
SIMD-компьютеры содержат один блок управления, несколько блоков обработки и общую память или сеть присоединения.
Здесь один единственный блок управления отправляет инструкции всем процессорам. Во время вычислений на каждом этапе все процессоры получают единый набор инструкций от блока управления и работают с различным набором данных из блока памяти.
Каждый из блоков обработки имеет свой собственный локальный блок памяти для хранения как данных, так и инструкций. В компьютерах SIMD процессоры должны общаться между собой [2]. Это делается общей памятью или сетью соединений.
В то время как некоторые из процессоров выполняют набор инструкций, остальные процессоры ждут своего следующего набора инструкций. Инструкции от блока управления решают, какой процессор будет активным (выполнять инструкции) или неактивным (дождаться следующей инструкции).
Компьютеры MISD содержат несколько блоков управления, несколько блоков обработки и один общий блок памяти.
Здесь каждый процессор имеет свой собственный блок управления, и они имеют общий блок памяти. Все процессоры получают инструкции по отдельности от своего собственного блока управления, и они работают с одним потоком данных в соответствии с инструкциями, которые они получили от своих соответствующих блоков управления. Этот процессор работает одновременно.
Компьютеры MIMD имеют несколько блоков управления, несколько блоков обработки и общую память или сеть взаимосвязей.
Здесь каждый процессор имеет свой собственный блок управления, локальный блок памяти и арифметико-логический блок. Они получают различные наборы инструкций от своих соответствующих блоков управления и оперируют различными наборами данных.
Актуальность параллельных вычислений
Применение параллельных вычислительных систем является актуальным направлением развития ЭВМ. Это обстоятельство вызвано не только физическим ограничением максимально возможного быстродействия обычных последовательных ЭВМ [3], но и существованием вычислительных задач, для решения которых возможностей существующей вычислительной техники всегда оказывается мало. Как результат можно заключить, что знание современных тенденций развития компьютеров и аппаратных средств для достижения параллелизма, умения разрабатывать модели, методы и программы параллельного решения задач обработки данных, следует отнести к важным квалификационным характеристикам современного программиста. В этой статье мы рассмотрим основные аспекты параллельных вычислений.
Под параллельными вычислениями можно понимать процессы решения задач, в которых в один и тот же момент времени могут выполняться одновременно несколько вычислительных операций. Такое определения является достаточно общим, но тем не менее можно сделать некоторые выводы. В первою очередь можно сделать вывод, что параллельные вычисления не сводятся к многопроцессорным вычислительным системам, кроме того упомянутые в определении выполняемые операции должны быть направлены на общую задачу. Чем же вызвано такой интерес к параллельным вычислениям?
В первою очередь это постоянное опережение вычислительных потребностей, быстродействию существующих компьютеров. В литературе известна так званая проблема «большого вызова», в числе которой: моделирования климата, генная инженерия, создание лекарств и тому подобное. Все эти перечисленные проблемы являются вычислительно трудоемкие. По оценкам специалистов для решения этих проблем нужны компьютеры с производительность около 1 терафлопа в секунду [4].
Так же развитию параллельных вычислительных систем способствует теоретическая ограниченность роста быстродействия последовательных вычислений и резкое снижение стоимости многопроцессорных вычислительных систем, как результат много компьютеров стали многоядерные.
Заключение
Но параллельное вычисление не универсально, и не все задачи можно ускорить с его помощью. Например, простая задача суммирования чисел одинаково выполняется и при последовательных вычислениях, и при параллельных. Зато, при задачах оптимизации параллельные вычисления дают огромный выигрыш в производительности. Поэтому использование параллельных вычислительных систем является актуальным на сегодняшний день. Какими же знаниями должен обладать специалист чтобы справится с задачами параллельного программирования? Архитектура параллельных вычислительных систем. Модели вычислений и методы анализа сложности. Параллельные методы вычислений. Параллельное программирование (языки, среды разработки, библиотеки). Глубокое знание параллельного программирования также дает много преимуществ при устройстве на работу.