Программирование для многоядерных платформ

Программирование для многоядерных платформ в NI LabVIEW
 
Концепция графического программирования NI LabVIEW не просто позволяет сэкономить время разработки за счет удобств интерфейса, но и предоставляет серьезные преимущества разработчикам систем с многоядерными процессорами и прочими системами, позволяющими вести параллельные вычисления, например, ПЛИС. Одно из этих преимуществ заключается в возможности автоматической адаптации приложения для работы на системах с процессорами с двумя, четырьмя и более ядрами практически без дополнительных усилий со стороны разработчика. Более того, LabVIEW позволяет инженерам и ученым представить распараллеливание вычислений в наиболее удобном для восприятия виде.
image001.jpg


Важность параллельного программирования

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

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

image002.jpg 
Рис. 1. Рост производительности процессоров за счет увеличение тактовой частоты прекратился и теперь обеспечивается за счет многоядерности.


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

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

Чтобы понять суть сказанного, представьте себе простую программу арифметических вычислений, диаграмма которой показана на рис. 2. Компилятор LabVIEW определяет, что умножение со сложением и вычитание могут быть выполнены одновременно, поскольку не зависят от результатов выполнения друг друга.
 
image003.jpg
Рис. 2. Независимые участки кода могу выполняться одновременно

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


Ручное создание потоков

Способность LabVIEW автоматически создавать и управлять потоками, используя преимущества многоядерных систем, не означает, что у разработчика не остается контроля над потоками. К примеру, вам может потребоваться изолировать в отдельном высокоприоритетном потоке задачу мониторинга аварийного состояния. Структура Timed Loop, осуществляющая хронометраж выполняемого в ее теле кода, создает один поток для содержащегося в ней кода и позволяет указать конкретное ядро для выполнения кода в процессе разработки или выполнения программы. Таким образом LabVIEW позволяет сконцентрировать усилия на предметной области задачи, беря на себя заботу об организации кода для многоядерной системы и в то же время оставляя возможность низкоуровневого управления в случае необходимости.


Интуитивно понятное представление параллельных участков кода

Другое важное преимущество LabVIEW с точки зрения разработки программ для многоядерных систем - это интуитивно понятное графическое представление кода параллельных вычислений. В обычных языках параллельное программирование реализуется путем самостоятельного объявления нитей (threads), настройки разделяемых ими ресурсов и отслеживания их взаимодействия в коде параллельных и непараллельных участков кода, что зачастую является весьма обременительным занятием, особенно при коллективной разработке приложения.

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

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


Параллелизм задач

Параллелизм задач подразумевает, что несколько операций могут быть выполнены независимо друг от друга. На рис. 3 приведен пример подобных задач: операции фильтрации сигнала и БПФ независимы, а следовательно могут быть выполнены на многоядерных процессорах одновременно.
 
image004.jpg
 Рис. 3. Пример параллельных задач


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

Параллельные данные – это независимые секции одного набора данных, которые могут быть обработаны независимо друг от друга с последующим объединение результатов. На рис. 4. показан пример отдельной обработки правого и левого каналов аудиосигнала.
 
image005.jpg
Рис. 4. Пример параллельных вычислений


Конвейеризация задач

Конвейеризация задач представляет собой метод обработки данных последовательностью функций, которые передают друг другу соответствующие блоки данных в разных итерациях цикла. В LabVIEW конвейеризация задач организуется с помощью инструмента feedback node или сдвиговых регистров.
 
image006.jpg
Рис. 5. Пример конвейеризации задач

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


Мощные графические инструменты отладки

Отладка - важная часть процесса разработки любого приложения, поэтому LabVIEW содержит как встроенные средства графической отладки, так и возможности интеграции дополнительных инструментов, чтобы досконально разобраться в работе параллельных участков кода. Например, с помощью анимации выполнения кода в LabVIEW вы можете наблюдать перемещение данных от узла к узлу, а также одновременное выполнение параллельных участков кода, а набор инструментов LabVIEW Desktop Execution Trace позволяет непосредственно увидеть последовательность событий в приложении. Более того, на целевых устройствах с ОС реального времени этот набор инструментов позволяет увидеть хронологию работы потоков приложения, включая детальную информацию о назначенных ядрах и времени выполнения. Эта информация позволяет выявлять такие ситуации, как инверсия приоритетов, когда поток с большим приоритетом ожидает высвобождения ресурса потоком с низким приоритетом.


Решение наиболее сложных инженерных проблем

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


 

© 2016 National Instruments Russia. All rights reserved.
Яндекс.Метрика