Принципы построения параллельных вычислительных систем. Технология параллельного программирования на платформе .NET. Оптимизация вычислений при решении задач. Разработка электронного методического комплекса "Оптимизация распараллеливанием вычислений".
Аннотация к работе
Параллелизм как средство оптимизации вычислительных систем для Windows 7 ЭУМК - электронный учебно-методический комплекс DMMP - distributed-memory-message-passing GMSV - global-memory-shared-variables MIMD - Multiple Instructions, Multiple Data MISD - Multiple Instructions, Single DataЗдесь на первый план выступают современные математические и алгоритмические методы организации вычислений, что требует высокого уровня квалификации создателей ПО. Разработкой теоретических подходов и практических методов для решения данного круга проблем занимались такие видные ученые как Дейкстра, Хоар, Хокни, Трилливен, А.В Каляев, Д.А. Вместе с тем, несмотря на большие объемы научных и исследовательских работ в области параллельных вычислений, необходимо отметить недостаток интерактивных приложений, которые сочетали бы в себе подачу теоретического материала, демонстрацию преимуществ отдельных методов распараллеливания при решении конкретных задач и проверку полученных знаний. Цель исследования - рассмотреть теоретические основы распараллеливания вычислений, изучить особенности технологии параллельного программирования на платформе .Net, решить на практике ряд задач и разработать учебно-методический комплекс для проверки знаний студентов по данной тематике. В ходе выполнения исследований решены следующие задачи и получены следующие результаты: - проведен анализ принципов построения параллельных ВС, этапов разработки параллельных приложений, особенностей многопоточности и синхронизации в ОС Windows;Потоки позволяют выделить независимые потоки исполнения команд в рамках одного процесса. MIMD (Multiple Instructions, Multiple Data) - системы с множественным потоком команд и множественных потоком данных; к данному классу относится большинство параллельных вычислительных систем. Режим разделения времени предполагает, что число подзадач (процессов или потоков одного процесса) больше, чем число исполнительных устройств. Данный режим является псевдопараллельным, когда активным (исполняемым) может быть одна единственнаяподзадача, а все остальные процессы (потоки) находятся в состоянии ожидания своей очереди на использование процессора; использование режима разделения времени может повысить эффективность организации вычислений (например, если один из процессов не может выполняться изза ожидания вводимых данных, процессор может быть задействован для выполнения другого, готового к исполнению процесса), кроме того в данном режиме проявляются многие эффекты параллельных вычислений (необходимость взаимоисключения и синхронизации процессов и др.). Например, в Windows-приложениях многопоточность повышает отзывчивость приложения - если основной поток занят выполнением каких-то расчетов или запросов, другой поток позволяет реагировать на действия пользователя.Как уже отмечалось выше, существует две стратегии разделения работы между потоками: параллелизм данных (data parallelism) и параллелизм задач (task parallelism). Т.е., каждый поток может выполнять (одинаковый) набор задач на подмножестве значений, и тогда мы получаем параллелизм данных. Для ожидания завершения нескольких задач существуют статические методы класса Task, принимающие в качестве аргумента массив задач: Task t1 = Task.Factory.STARTNEW(DOWORK1); Task t2 = Task.Factory.STARTNEW(DOWORK2); Task t3 = Task.Factory.STARTNEW(DOWORK3); Для того что бы присвоить потоку приоритет (см.выше, табл.1.3), нужно использовать свойство Priority в классе Thread, которое определяет, сколько времени на исполнение будет выделено потоку относительно других потоков того же процесса. С помощью метода Thread.Sleep() поток можно перевести в состояние WAITSLEEPJOIN и при этом указать, через какой промежуток времени поток должен возобновить работу: thread.Sleep(1000); Метод Abort() не всегда способен остановить поток немедленно, поэтому если поток требуется остановить перед тем, как продолжить выполнение программы, то после метода Abort() следует сразу же вызвать метод Join().Метод получил название «Решето Эратосфена», так как, согласно легенде, Эратосфен писал числа на дощечке, покрытой воском, и последовательно выкалывал составные числа. Алгоритм можно оптимизировать, если на шаге 3 зачеркивать числа, сразу начиная с р2, т.к. все составные числа меньше его уже будут зачеркнуты. Найти все простые числа в диапазоне от 2 до последовательными вычислениями, используя простое или модифицированные «решето». Замеры времени выполнения для решения S1 (1 ядро, 2 логических процессора, 32 бит, VS 2010) представлены на рис.3.2. Решения S3-S5 (рис.3.4-3.6) реализованы на ПК с 4 ядрами и 4 логическими процессорами, частотой 2,66 GHZ.В этой связи, студенты сталкиваются со сложной задачей ознакомления и систематизации огромного пласта информации, представленного в виде разнообразных книг, брошюр и статей.