Обзор компании Intel в рамках параллельного программирования
Разработка программного обеспечения, эффективно использующего вычислительные ресурсы за счет одновременного исполнения кода на нескольких вычислительных узлах. Обзор компании Intel в использовании инструментов и языков параллельного программирования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 25.12.2011 |
Размер файла | 1,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Реферат
По дисциплине:
Параллельные системы и параллельные вычисления
На тему:
Обзор компании Intel в рамках параллельного программирования
Оглавление
Введение
Обзор Intel® Parallel Studio
Обзор Cilk и Intel Cilk Plus
GNU Compiler Collection (GCC)
Intel Threading Building Blocks (TBB)
Конкурс Acceler8 2011
Вывод
Список литературы
Приложение
Введение
Компания Intel, являясь одним из лидеров в индустрии параллельных вычислений, расширяет свой многолетний опыт создания программных инструментов в сторону клиентских приложений для персональных компьютеров. Выбирая предметную область, меня заинтересовала политика компании Intel в улучшении параллельного программирования. Они не только разрабатывают собственное программное обеспечение, но и улучшают уже проверенное ПО других компаний. Так же в реферате собираюсь рассказать о конкурсах параллельного программирования, проводимых компанией Intel. В частности последний конкурс: Acceler8 2011, для проведения которого, компания предоставила возможность работать на 40 ядерном сервере лаборатории Manycore Testing Lab (MTL).
Обзор Intel® Parallel Studio
Intel® Parallel Studio - это набор из нескольких инструментов, который является гармоничным продолжением или расширением Microsoft Visual Studio и позволяет за счет удобства использования, понятного интерфейса и оригинальных технологий добиваться хорошей эффективности параллельных програм на мультиядерных системах. Несмотря на то, что этот набор является plug-in'ом к Visual Studio, он полностью покрывает все этапы разработки приложения программистом, от создания скелета будущей параллельной программы до оптимизации релизной версии проекта. В состав этого набора входят четыре отдельных продукта, каждый их которых используется в своем сегменте цикла разработки, и каждый может быть проинсталлирован и интегрирован в Visual Studio как по-отдельности, так и всем пакетом сразу.
Intel® Parallel Advisor: поможет найти возможности распараллеливания кода с самого начала разработки приложения**
Intel® Parallel Composer: предназначен для генерирования параллельного кода, т.е. создания программ с помощью компилятора и широкого набора библиотек для многопоточных алгоритмов
Intel® Parallel Inspector: проверит ваше параллельное приложение на корректность и найдет ошибки работы с памятью
Intel® Parallel Amplifier: обнаружит «узкие места» в программе, которые мешают масштабируемости и увеличению производительности на мультиядерных платформах.
Intel® Parallel Advisor
Существуют два похода к написанию параллельных програм. Первый - это распараллеливание, частичное или полностью, уже готовых последовательных приложений для ускорения работы которых достаточно изолированных участков, часто алгоритмов, которые не затрагивают всю архитектуру проекта. Здесь методологии как таковой не существует. Разработчик просто анализирует приложение и определяет участки программы, которые потребляют максимальное количество ресурсов микропроцессора. Затем анализируется структура проекта и принимается решение о модификации того или иного алгоритма. Второй подход предполагает изначальный дизайн с учетом требований параллельного выполнения нагрузки. И если концептуально проект можно разделить на участки, которые должны выполняться одновременно, то начать его реализацию в виде программы часто является сложной задачей для новичков. Особенно трудно написать проект так, чтобы потом не пришлось прибегать к первому подходу.
Здесь на помощь придет Parallel Advisor. Это совершенно новая категория или новый класс инструментов, который несет в себе некую методологию создания параллельных программ «с нуля» с использованием правильных подходов к их реализации, в том числе с использованием параллельных библиотек производительности. Понятно, что не каждая программа или алгоритм легко и просто параллелятся. Advisor найдет, из-за чего именно параллельная реализация может оказаться неэффективной, и попытается выдать нужные решения. Кроме того, все знания по применению параллельных библиотек будут собраны здесь в виде сэмплов и шаблонов, для того чтобы максимально облегчить начальный этап их использования.
Однако и в случае с распараллеливанием готовой последовательной программы Advisor предоставит «путеводную нить», или workflow, по распараллеливанию, проверке корректности и оптимизации приложения, если разработчик пока еще не в силах «уложить» в голове эту методологию. Но через какое-то время работы с проектом надобность в Advisor'е отпадает, так как становятся понятными принципы разработки параллельной программы, а элементы методологии рассматриваются как дополнительный Help Page ресурс.
В текущем пакете Advisor не присутствует, зато его первая реализация в виде утилиты Intel® Parallel Advisor Ligt доступна среди других исследовательских проектов на сайте Intel. Это сделано для того, чтобы сообщество разработчиков могло поделиться своими идеями относительно методологий распараллеливания, которые могут быть потом реализованы в будущем продукте. Такой же путь уже прошли хорошо известные теперь параллельная библиотека TBB и инструмент Performance Tuning Utility, которые стали частью Intel® Parallel Studio, возвращая разработчикам их идеи в виде open source библиотеки для разработки на С++ и совершенно нового продукта для оптимизации производительности.
Intel® Parallel Composer
Несмотря на некий маркетинговый акцент в названии продукта Composer - это не просто компилятор С++ от Intel. Он уже проинтегрирован в Visual Studio вместе с библиотекой производительности IPP и параллельной библиотекой TBB, что значительно облегчает процесс разработки параллельного кода для новичков, т.е. тех, кто еще не пользовался продуктами Intel, такими, например, как Compiler Pro, и только собирается попробовать улучшить производительность своих приложений с помощью технологий Intel.
Наличие сразу нескольких компонент в пакете позволит сразу же начать оптимизировать свою программу с использованием параллельных технологий, которые содержит Composer:
Вычислительные примитивы, реализованные в виде функций в библиотеке IPP, гарантируют высокую производительность алгоритмов на платформах Intel;
Поддержка новой версии стандарта OpenMP 3.0 позволит использовать multitasking, недоступный в предыдущих версиях, которые поддерживаются в том числе и компилятором Microsoft;
Новый тип данных Valarray немного упростит код, реализующий векторные операции, а компилятор сгенерирует эффективный бинарный код, задействующий SIMD-инструкции для увеличения производительности;
Поддержка компилятором элементов стандарта С++ 0х облегчит кодирование программистам.
Intel® Parallel Inspector
Это, пожалуй, самый востребованный и ожидаемый инструмент на сегодняшний день, так как он помогает избавиться от ошибок в многопоточной программе на этапе верификации, повышая корректность и стабильность ее исполнения. Несмотря на свой характерный функционал Inspector применяется не только командами тестировщиков (QA team). Нормальная инженерная практика предполагает проверку программы на наличие ошибок и самим разработчиком, хотя бы на уровне юнит-тестов (unit tests).
Давайте разберем, какие же ошибки помогает обнаружить Parallel Inspector. Инструмент адресует два класса ошибок: ошибки многопоточности и ошибки работы с памятью, причем анализ для каждого класса запускается отдельно. Последний класс ошибок хорошо известен программистам, которые до последнего времени использовали различные инструменты, чтобы найти утечки памяти, нарушение целостности стека или доступ по несуществующим адресам. Второй класс ошибок связан с многопоточной природой програм. Они неизбежно возникают при разработке параллельных приложений, и их чрезвычайно сложно отловить, особенно если они проявляются нерегулярно и только при совпадении определенных условий.
Ошибки работы с памятью
Механизм обнаружения ошибок памяти основан на анализе абсолютно всех инструкций чтения/записи и их адресов на уровне бинарного кода с помощью бинарной инструментации. В основе инструментации лежит утилита Pin - A Dynamic Binary Instrumentation Tool, которая внедряется в исследуемый процесс во время его запуска и позволяет отслеживать выполнение практически любых инструкций, предоставляет API доступа к содержимому регистров, контекста выполнения программы, символьной и отладочной информации. Понятно, что всесторонний анализ исполняемого кода не может быть проведен без существенных накладных расходов, поэтому он разделен на уровни, отражающие глубину и сложность анализа. Чемы выше уровень, тем больше потребуется времени для проверки приложения.
Уровень mi1 - позволяет обнаруживать только утечки памяти, выделенной в куче (heap).
Глубина стека функций равна 7, что даст достаточно информации для определения местонахождения ошибки и структуры вызовов функций, выделявших память.
Уровень mi2 - позволяет обнаруживать все остальные ошибки работы с памятью в куче, которые мы рассмотрим ниже. Однако для снижения накладных расходов и ускорения анализа глубина стека выбрана равной единице. То есть на этом уровне мы сможем найти ответ на вопрос, есть ли в принципе ошибки в программе. А где эти ошибки, нам поможет определить следующий уровень.
Уровень mi3 - отличается от предыдущего тем, что глубина стека увеличена до 12-ти. Плюс добавлен функционал поиска утерянных указателей. На этом уровне мы получаем наиболее полный анализ корректности работы с памятью в куче, но заплатим за это накладными расходами, которые увеличат время выполнения программы от 20 до 80 раз по сравнению с оригиналом.
Уровень mi4 - высший уровень, дополнен анализом ошибок доступа к памяти, выделенной на стеке, которые не обнаружены на стадии компиляции или с помощью run-time check опций компилятора. Уровень вложенности функций - 32. Как и все остальные уровни, 4-й является инклюзивным, то есть включающим в себя все виды анализа на предыдущих уровнях. Соответственно, накладные расходы будут максимальными.
В зависимости от выбранного уровня анализа, Parallel Inspector способен обнаруживать следующие виды ошибок работы с памятью:
Memory Leak - возникают при выделении программой памяти в куче и неосвобождении ее по окончании программы;
Invalid Memory Access - возникают при чтении/записи по недействительным адресам памяти, в куче или в стеке;
Invalid Partial Memory Access - возникают при чтении/записи по частично недействительным адресам памяти;
Missing Allocation - возникают при попытке освободить память по несуществующему адресу;
Mismatched Allocation/Deallocation - возникают при попытке освободить память с помошью функций, не соответствующих функции выделения памяти;
Uninitialized Memory Access - возникают при попытке чтения неинициализированной памяти, в куче или в стеке;
Uninitialized Partial Memory Access - в возникают при попытке чтения частично неинициализированной памяти.
Пример иллюстрации ошибок памяти
// Запись по недействительному адресу освобожденной памяти
char *pStr = (char*) malloc(20);
free(pStr);
strcpy(pStr, "my string"); // Ошибка!
// Попытка чтения неинициализированной памяти
char* pStr = (char*) malloc(20);
char c = pStr[0]; // Ошибка!
// Функция освобождения памяти не соответствует функции выделения
char *s = (char*)malloc(5);
delete s;// Ошибка!
// Выход за пределы стека
void stackUnderrun()
{
char array[10];
strcpy(array, "my string");
int len = strlen(array);
while (array[len] != "Z") // Ошибка!
len--;
}
Ошибки многопоточности
Наиболее распространенные ошибки многопоточности - это «гонки» (Data Races), или конкурирующий доступ потоков к разделяемым данным, и взаимоблокировки (Deadlocks), когда, захватив неправильно расставленные объекты синхронизации, потоки самозаблокировались и не могут продолжить свое выполнение.
Пример ошибки, которая рано или поздно приведет к «зависанию» программы, представлена в примере ниже.
// Поток A захватывает критическую секцию L1, затем ожидает критическую секцию L2
DWORD WINAPI threadA(LPVOID arg)
{
EnterCriticalSection(&L1);
EnterCriticalSection(&L2);
processA(data1, data2);
LeaveCriticalSection(&L2);
LeaveCriticalSection(&L1);
return(0);
}
// Поток В захватывает критическую секцию L2, затем ожидает секцию L1
DWORD WINAPI threadB(LPVOID arg)
{
EnterCriticalSection(&L2);
EnterCriticalSection(&L1);
processB(data2, data1) ;
LeaveCriticalSection(&L1);
LeaveCriticalSection(&L2);
return(0);
}
Intel® Parallel Amplifier
Профилировщик производительности предназначен для того, чтобы выяснить, насколько эффективно используется мультипроцессорная платформа приложением, и где находятся те узкие места в программе, которые мешают ей масштабироваться и увеличивать производительность с ростом вычислительных ядер в системе. Методология профилировки приложения предельна проста: необходимо ответить себе на три основных вопроса, каждый из которых соответствует своему типу анализа и отражает суть, место и причины проблем с производительностью.
Hotspot-анализ. «На что моя программа тратит вычислительное время процессора?» Нам необходимо знать те места в программе, Hotspot-функции, где больше всего тратится вычислительных ресурсов при исполнении, а также тот путь, по которому мы в эти места попали, т.е. стэк вызовов.
Concurrency-анализ. «Почему моя программа плохо параллелится?» Бывает, что независимо от того, насколько продвинута параллельная инфраструктура приложения, ожидаемый прирост производительности при переходе например от 4-ядерной системе к 8-ядерной так и не достигается. Поэтому тут нужна оценка эффективности параллельного кода, которая дала бы представление о том, на сколько полно используются ресурсы микропроцессора.
Lock & Wait - анализ. «Где моя программа простаивает в ожидании синхронизации или операции ввода-вывода?» Поняв, что наша программа плохо масштабируется, мы хотим найти, где именно и какие именно объекты синхронизации стали на пути к хорошей параллельности.
Программа на данный момент находится в стадии альфа тестирования и не входит в комплект Intel® Parallel Studio, поэтому полный обзор до релиза приложения делать некорректно.
Обзор Cilk и Intel Cilk Plus
Cilk -- язык параллельного программирования.
Разрабатывался с 1994 года в лаборатории Информатики MIT. Основан на языке ANSI C, с добавлением небольшого количества ключевых слов Cilk. Позже был расширен на Си++, в виде Cilk++ -- коммерческого продукта, разрабатываемого компанией Cilk Arts.
В 2009 году компанией Cilk Arts было объявлено о том, что все её продукты и сама команда разработчиков становятся частью корпорации Интел.
Intel® Cilk Plus является расширением языка С++, которое упрощает разработку приложений, параллельных по задачам и данным в системах с общей памятью. Задачи могут быть реализованы в виде отдельных функций или итераций цикла. При этом система исполнения автоматически распределяет их по доступным ядрам.
Cilk Plus включает четыре основные компоненты:
Ключевые слова (cilk_for, cilk_spawn, cilk_sync). Эти конструкции предоставляют мощный инструмент для организации параллелизма по задачам.
Гипер-объекты или преобразователи (reducers). Устраняют конкуренцию за переменные, разделяемые между задачами, автоматически создавая представление этих переменных для каждой задачи и собирая их обратно в разделяемое значение по завершении всех задач.
Специальное представление массивов (C/C++ Extensions for Array Notation (CEAN)). Данный компонент обеспечивает параллелизм по данным (векторизацию) для всего массива или его частей при выполнении однотипной операции со всеми его элементами.
Элементарные функции. Включают параллелизм по данным для всех функций и операций, которые применяются к специальным массивам или их частям.
Таким образом, разработчики Cilk Plus предоставляют средства для организации циклического и рекурсивного («разделяй и властвуй») параллелизма.
GNU Compiler Collection (GCC)
GNU Compiler Collection (обычно используется сокращение GCC) -- набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU. GCC является свободным программным обеспечением, распространяется фондом свободного программного обеспечения (FSF) на условиях GNU GPL и GNU LGPL и является ключевым компонентом GNU toolchain. Он используется как стандартный компилятор для свободных UNIX-подобных операционных систем.
Изначально названный GNU C Compiler, он поддерживал только язык Си. Позднее, GCC был расширен для компиляции исходных кодов на таких языках программирования как C++, Objective-C, Java, Фортран и Ada.
Языки:
В версии 4.1.1 (выпущенной 24 мая 2006), стандартный компилятор включал в себя front-end'ы для:
Ada (GCC для Ada, или GNAT)
Си
C++ (C++ для GCC, или G++)
Фортран (GCC для Fortran, или gfortran)
Java (GCC для Java, или GCJ)
Objective-C (GCC для Objective-C, или gobjc)
Objective-C++ (GCC для Objective-C++, или gobjc++)
Go (GCC для Go, или gccgo) (с версии 4.6[4])
Front end для CHILL был добавлен ранее, но из-за недостаточной поддержки был исключён из набора. До релиза версии 4.0 front-end'ом для Fortran был G77, который поддерживал лишь FORTRAN 77. В новых версиях G77 был исключён в пользу нового GFortran frontend который поддерживает Fortran 95.
Также существуют front-end'ы для Pascal, D, Модула-2, Modula-3, Mercury, VHDL и PL/I.
Архитектуры
Список поддерживаемых GCC (для версии 4.3) процессоров включает в себя:
Alpha,ARM,Atmel AVR, x86,IA-64,m68k,MIPS,MSP430,PA-RISC,PDP-11,PowerPC,SuperH,VAX, Inteli960, MMIX, AVR32.
Структура
Внешний интерфейс GCC является стандартом для компиляторов на платформе UNIX. Пользователь вызывает управляющую программу, которая называется gcc. Она интерпретирует аргументы командной строки, определяет и запускает для каждого входного файла свои компиляторы нужного языка, запускает, если необходимо, ассемблер и компоновщик.
Компилятор каждого языка является отдельной программой, которая получает исходный текст и порождает вывод на языке ассемблера. Все компиляторы имеют общую внутреннюю структуру: front end, который производит синтаксический разбор и порождает абстрактное синтаксическое дерево, и back end, который конвертирует дерево в Register Transfer Language (RTL), выполняет различные оптимизации, затем порождает программу на языке ассемблера, используя архитектурно-зависимое сопоставление с образцом.
GCC почти полностью написан на Си, хотя значительная часть front-end для Ады написана на Ада.
Отладка программ, скомпилированных с помощью GCC
Главным инструментом для отладки программ, скомпилированных с помощью GCC, является GNU Debugger (gdb). Существуют также узкоспециализированные средства для отладки:
- Valgrind для поиска утечек памяти
- GNU Profiler (gprof) используется для того, чтобы определить, сколько времени уходит на выполнение той или иной части программы, как часто вызываются те или иные процедуры; для использования gprof необходимо компилировать программу со специальными опциями для включения «профилирования».
- gcov для анализа покрытия
Intel Threading Building Blocks (TBB)
Intel Threading Building Blocks (также известная как TBB) -- кроссплатформенная библиотека для параллельного программирования, реализованная на языке С++
Основные преимущества программы (рассматривается последняя версия TBB 3.0):
Повышенная продуктивность работы
В библиотеке Intel TBB используются абстракции на базе задач, упрощающие получение масштабируемых и надежных приложений с помощью нескольких строк кода. Алгоритмы на базе задач, контейнеры и примитивы синхронизации упрощают разработку параллельных приложений.
Слева показано сравнение с аналогичными функциями потоков Windows*, требующее значительно большее количество кода для правильной параллелизации программы двухмерной трассировки лучей Tachyon. Разработчики приложений для Linux* и Mac OS X* могут ожидать сходные результаты.
Универсальность
В библиотеку Intel TBB входят компоненты, упрощающие и ускоряющие разработку масштабируемых высокопроизводительных параллельных приложений. В частности, в нее включены параллельные алгоритмы, контейнеры, планы задач, выделение масштабируемой памяти и примитивы синхронизации. Кроме того, библиотека времени исполнения обеспечивает оптимальный размер пула потоков, дробление задач и планирование для оптимизации производительности, балансировку нагрузки посредством передачи задач, а также эффективное использование памяти и кэш-памяти. Текст, выделенный в таблице курсивом, означает "новая функция"
Приложения, готовые к потребностям будущего
Производительность приложений автоматически повышается при увеличении числа ядер процессора благодаря использованию абстрактных задач. Планировщик сложных задач динамически сопоставляет задачи и потоки для балансировки нагрузки среди доступных ядер, сохранения локальности кэш-памяти и максимального увеличения параллельной производительности.
Отличная масштабируемость и увеличенная производительность при использовании библиотеки Intel TBB вместо последовательной реализации. Разработчики приложений для Windows и Mac OS X могут ожидать сходных результатов.
Переносимость
Библиотека Intel TBB протестирована на совместимость и поддерживается при использовании на платформах Windows*, Linux* и Mac OS*. Также она поддерживает системы FreeBSD*, IA Solaris*, XBox* 360 и PowerPC через сообщество разработчиков ПО с открытым исходным кодом. Организации могут расширять свою базу клиентов, используя готовое открытое решение для параллелизма, поддерживающее разнообразные платформы.
Конкурс Acceler8 2011
В ноябре 2011 года компания Intel проводила конкурс параллельного программирования Acceler8 ориентированная на студентов и аспирантов ВУЗ'ов.
Коротко о задаче
Дана двумерная матрица значений, нужно найти в ней прямоугольную подматрицу с максимальной суммой элементов в ней среди всех подматриц.
Очевидно, что если все элементы матрицы положительны, то ответом является вся матрица. В связи с этим, чтобы задача была задачей, во входной матрице должны быть как положительные, так и нулевые и отрицательные элементы. Чтобы не читать матрицу из файла, вам нужно будет ее сгенерировать псевдослучайным алгоритмом:
Генерация матрицы
Каждый элемент прямоугольной матрицы размером N столбцов и M строк (индексация строк и столбцов начинается с нуля) должен генерироваться по следующему алгоритму:
int seed = seed0;
size_t dstSize = M * N;
long long sum = 0;
int mean, remainder;
/* initialize the destination array */
for (i = 0; i < dstSize; i += 1)
{
seed = PRNG(seed, a, b, m);
A[i] = seed;
/* make a sum of all elements */
sum += seed;
}
/* calculate the mean value. Avoid float logic when making rounding. */
mean = (int) (sum / (long long) dstSize); /* updated line */
remainder = (int) (sum % (long long) dstSize); /* updated line */
mean += (remainder * 2 > (signed) dstSize) ? (1) : (0); /* updated line */
/* correct the array to make sum of all elements near to zero */
for (i = 0; i < dstSize; i += 1)
{
A[i] -= mean;
}
Параметры a, b и seed0 даются программе на вход, как и размер генерируемой матрицы.
Функция PRNG выглядит так:
PRNG(seed, a, b, m)
{
return (a * seed + b) % m;
}
В коде выше первый цикл заполняет матрицу неотрицательными значениями, а второй цикл вычитает из всех элементов округленное среднее значение всех ее элементов. В результате этого в матрице появляются нулевые и отрицательные элементы.
Формулировка задачи
Написать параллельную программу для генерации матрицы целых значений и найти прямоугольную подматрицу с максимальной суммой элементов в ней. На вход программе дается один текстовый файл, содержащий размерность матрицы и параметры псевдослучайного алгоритма. Программа должны вывести в выходной файл координаты двух противоположных углов подматрицы с максимальной суммой элементов в ней.
Описание входных данных
Первый параметр командной строки -- имя входного файла, второй параметр -- имя выходного файла.
Во входном файле содержится несколько тестов. На первой строке входного файла дано число C -- количество тестов, которые нужно решить. Далее описываются C тестов. Для каждого из них в файле дана одна строка, содержащая 6 целых чисел через пробел.
Первые два числа (M и N) -- количество строк и столбцов в матрице, соответственно. Четыре следующих числа -- параметры псевдослучайного алгоритма seed0, a, b и m соответственно.
Ограничения для входных параметров:
1 ? C ? 1000
1 ? M, N, a, b, m, seed0 ? 20000
Входные параметры таковы, что сумма элементов в любой подматрице исходной матрицы убирается в int32.
Описание выходного файла
Для каждого теста в выходной файл нужно вывести строку "Case #x: ", за которой следуют 6 целых чисел (через пробел) и символ переноса строки.
Первые 4 числа -- две пары координат, задающих подматрицу с максимальной суммой элементов (в первой паре оба числа должны быть меньше или равны соответственным числам во второй паре, т.е. сначала описывается координаты левого верхнего, а потом правого нижнего угла). В каждой паре первое число -- номер строки, а второе число -- номер столбца (нумерация начинается с нуля). Если вы нашли несколько подматриц с одинаковой максимальной суммой элементов, выведите координаты любой из них.
Последние 2 числа -- сумма элементов в найденной подматрице и площадь этой подматрицы соответственно.
Весь вывод должен идти в выходной файл, имя которого задается вторым параметром командной строки.
Пример вызова вашей программы
./msp input.txt output.txt
Пример входного файла (input.txt):
2
4 3 10 3 4 17
14 31 11 4 5 18
Пример выходного файла (output.txt):
Case #1: 0 2 3 2 17 4
Case #2: 0 4 5 9 18 36
Объяснение вывода по первому тесткейсу:
Сгенерирована матрица размером 4x3:
-8 -4 8
-7 -1 0
3 -5 5
1 6 4
Координаты подматрицы с максимальной суммой элементов: [0][2] .. [3][2] (в этом примере это последний столбец исходной матрицы).
Сумма элементов подматрицы = 17
Площадь этой подматрицы = 4
О сервере
Все участники в течение конкурса могли протестировать свой код на 40 ядерном сервере лаборатории Manycore Testing Lab (MTL). Некоторые характеристики:
*40 ядра 80 узла нити
*Поддержка Linux и Microsoft windows OS
*Поддержка языка программирования Intel Cilk Plus
*Обновленные GCC и TBB
Так же хочу добавить отчет по работе на 32-ядерном сервере лаборатории Manycore Testing Lab (MTL) Владимира Полина, сотрудника компании Intel. Использовалась технология TBB 3.0.
*Несколько недель назад у меня появилась возможность поработать на 32-х ядерном сервере лаборатории Manycore Testing Lab (MTL), в то время, когда принимались заявки на машинное время и академическое сообщество не успело загрузить своими задачами все серверы. Использование лаборатории бесплатно для академического сообщества (Intel Academic community). Но, конечно, есть некоторые ограничения. Информацию и инструкции о серверах и доступе можно найти на странице проекта MTL http://software.intel.com/en-us/articles/intel-many-core-testing-lab/. Как можно видеть на этой странице, из российских вузов доступ уже есть у московского и новосибирского госуниверситетов.
В MTL на многоядерных серверах установлено новейшее программное обеспечение от Intel, в том числе и недавно выпущенный TBB 3.0. Доступ по ssh на сервер оказался не сложнее, чем на компьютер, установленный в соседней комнате. На форуме MTL можно найти подсказки, как использовать сервера более продуктивно, например, как назначить задачи на определенные ядра, отключить SMT, установить переменные окружения и т.д..
Когда наша команда работала над выпуском TBB 3.0, я собирал данные на сервере MTL по производительности TBB. И результаты были включены в документ “Intel® Threading Building Blocks 3.0 In-Depth”, который доступен по ссылке:
http://software.intel.com/sites/products/collateral/hpc/tbb/Intel_TBB3_InDepth.pdf. Я запустил большинство примеров из дистрибутива TBB 3.0. Исходя из начальных данных примеров и количества работы примеры показали различную масштабируемость, от очень плохого для примера Фибоначчи, который совсем не масштабируется и используется для показа функциональности TBB, до отличной масштабируемости для как для 64 потоков, а особенно для 32 потоков, которые распределены по физическим ядрам. Хочу немного написать про пример Судоку (Sudoku), который был добавлен в версии 3.0 для того чтобы показать работу с новым классом task_group. Этот пример не попал в официальные данные по масштабируемости, потому что он недостаточно оптимизирован по сравнению с лучшими последовательными версиями программ для решения судоку, но этот пример показывает отличную масштабируемость, которая наглядно продемонстрирована на графике ниже по тексту. Начальная таблица input4 была использована для запуска примера. Остальные параметры были использованы по-умолчанию. Командная строка для получения результатов для запуска используя потоки от 1 до 64:
$ for i in {1..64};do ./sudoku input4 $i 2; done
Рис.1
После выпуска TBB 3.0 он был установлен на сервера в MTL, и зарегистрированные пользователи лаборатории могут его использовать в том числе для получения похожего результата, как на картинке выше.*
параллельный программный язык intel
Вывод
Компания Intel стремительно развивается в области параллельного программирования.
Делая обзор реферата, я наткнулся на множество интересных статей отдельных специалистов, которые не могли уместиться в рамках данного проекта. Приложения разрабатываются как на начинающего пользователя в этой области, так и на специалиста. Хочу отметить так же конкурсы, которые помогают начинающим специалистам проверить свои силы в *боевых условиях*. Если говорить про Intel® Manycore Testing Lab, то компания предоставляют к нему бесплатный доступ различным институтам для решения возникших задач. Пример задачи описан в приложении. В данном реферате предоставлена актуальная информация на ноябрь 2011 г.
Список литературы:
1. Youtube.ru - Презентация сервера Intel Manycore Testing Lab.
2. Intel.com - информация о конкурсах и продукции Intel.
3. Wikipedia.org - Краткое описание продукции intel.
4. 1024cores.net - англоязычный сайт с актуальными проблемами и их решениями в ходе выполнения параллельных задач.
5. software.intel.com/file/38483 - описание технологии Intel® Cilk Plus
Приложение
Масштабируемость приложения для решения систем линейных алгебраических уравнений методом Монте-Карло с использованием технологии OpenMP
Мы исследовали масштабируемость нашего приложения на 32-ядерной системе. В приложении был реализован алгоритм поиска скалярного произведения заданного вектора h и вектора решения x системы линейных алгебраических уравнений: x=Ax+f методом Монте-Карло.
Метод Монте-Карло заключается в моделировании цепи Маркова, что можно представить как случайное блуждание по матрице коэффициентов. Матрица вероятностей перехода P строится по матрице коэффициентов следующим образом:
Оценка величины скалярного произведения для цепи длины N имеет вид:
где Wm - набор весов.
Для того, чтобы получить численную оценку одной компоненты решения, вектор h выбирается таким образом, чтобы он имел только одну ненулевую компоненту hj = 1. Начальные значения pj = 1, k0 = j, W0=hj / pj = 1.
Данный алгоритм допускает эффективное распараллеливание с помощью ОреnМР. Каждый поток при этом может использоваться для получения численной оценки одной компоненты решения.
Рис. 1. Схема вызова директив OpenMP
Анализ программы решения системы линейных алгебраических уравнений с помощью Intel Parallel Inspector позволил выявить и устранить ошибки выделения памяти, a Hot-Spot анализ с помощью Intel Parallel Amplifier - найти ресурсоемкие операции. Это позволило оптимизировать приложение.
Рис. 2: Результат работы Amplifier .
Проведено исследование масштабируемости программы на следующей многоядерной архитектуре:
Рис. 3: 32-ядерная платформа: 4 узла по 8 ядер
При замене генератора случайных чисел из стандартной библиотеки С rand () многопоточной реализацией генератора MCG-31, включенной в состав Intel Math Kernel Library, были получены хорошие результаты для матриц размером 400 х 400 и 2541 х 2541. Проведены расчеты с разными длинами марковской цепи и с использованием до 96 программных потоков:
Рис. 4: Зависимость ускорения от числа потоков, 1000 итераций.
Как видно из рисунка 4, ускорение наблюдается для 32 ядер, на которых могут быть эффективно задействованы до 64 потоков.
Размещено на Allbest.ru
Подобные документы
История развития фирмы INTEL. Развитие и выпуск процессоров INTEL. Обзор технологии ATOM. Обзор процессоров. Материнская плата Gigabyte GC230D. Ноутбуки на базе процессоров INTEL ATOM. Ноутбук MSI Wind U100-024RU, ASUS Eee 1000H, Acer One AOA 150-Bb.
курсовая работа [233,0 K], добавлен 24.11.2008Некоторые проблемы, испытываемые в последнее время Intel при разработке эффективных многоядерных процессоров. Традиционная процессорная FSB шина параллельного типа Quad Pumped, ее замена последовательным интерфейсом, используемым в процессорах AMD.
лабораторная работа [818,7 K], добавлен 22.03.2015Оценка временной сложности алгоритма. Механизм сортировки пузырьком и вставками. Основные положения технологии параллельного программирования Ореn MР. Оценка временной сложности некоторых классов алгоритма с помощью параллельного программирования.
дипломная работа [1,7 M], добавлен 27.10.2017Гнездовой или щелевой разъём центрального процессора для облегчения его установки. Стандартный слот типа Socket. История изменения и характеристики всех сокетов, используемых для установки процессоров Intel. Разработка новых интерфейсов компании Intel.
реферат [202,4 K], добавлен 01.10.2009Архитектура системных плат на основе чипсетов Intel 6 Series и Intel P67 Express. Технологии, используемые в Intel 6 Series: Smart Response, Intel Quick Sync Video, Технология Hyper-Threading, Технология Intel vPro. Ошибка в чипсетах Intel 6-й серии.
реферат [3,3 M], добавлен 11.12.2012Понятия языка программирования, разновидности и характеристика языков. Исторический обзор их создания и применения. Классификация, примеры использования. Характеристики языков программирования с точки зрения элементов объектной модели, их популярность.
реферат [463,6 K], добавлен 07.09.2009Описание языков программирования высокого уровня. Стандартные структуры данных, обзор принципов структурного программирования. Построение математической модели и выбор структуры данных для решения задачи. Тестирование и отладка программного кода.
курсовая работа [1,3 M], добавлен 05.12.2020История Intel, выпуск оперативной памяти для компьютера. Главные особенности построения бренда компании. Модели процессоров, выпускаемые корпорацией Intel. Виды подложек, используемых при производстве микросхем. Краткая история процессоров Pentium.
реферат [28,8 K], добавлен 13.02.2013Стратегия развития процессоров Intel. Структурная организация современных универсальных микропроцессоров. Особенности многоядерной процессорной микроархитектуры Intel Core, Intel Nehalem, Intel Westmere. Серверные платформы Intel c использованием Xeon.
реферат [36,5 K], добавлен 07.01.2015Разработка программы, реализующей расчёт двойного интеграла с применением средств параллельного программирования. Использование для решения задачи узла, содержащего два четырехядерных процессора и двух потоков, уменьшающих время ее выполнения в два раза.
лабораторная работа [2,1 M], добавлен 21.07.2012