УЧЕБНАЯ РАБОЧАЯ ПРОГРАММА Алгоритмические языки параллельного программирования "

реклама
УЧЕБНАЯ РАБОЧАЯ ПРОГРАММА по общему курсу
"Алгоритмические языки параллельного программирования"
для студентов, обучающихся по программе подготовки
бакалавров физико-математических наук по направлению
"Прикладная математика и информатика"
Курс третий
Семестр шестой
Практические и лабораторные занятия 36 часов
Зачет 6 семестр
Программа разработана профессором кафедры математического обеспечения ЭВМ
факультета
вычислительной
математики
и
кибернетики
Нижегородского
госуниверситета доктором технических наук В.П. Гергелем.
1. ЦЕЛИ И ЗАДАЧИ КУРСА
1. Цель преподавания курса
Использование
параллельных
вычислительных
систем
для
решения
вычислительно-трудоемких задач предполагает наряду со знанием математических
проблем параллельных вычислений практическое освоение средств разработки
параллельных программ. Эти средства обеспечивает целый спектр возможных
подходов к области параллельных вычислений от использования новых
специализированных языков параллельного программирования (например, языка
ОККАМ) до применения "обычных" последовательных языков С и Фортран, в которых
возможность разработки параллельных программ обеспечивается за счет
использования технологических (инструментальных) библиотек типа MPI и PVM.
Наличие такого широкого набора средств параллельного программирования
обуславливается прежде всего характерными особенностями вычислительнотрудоемких задач, с учетом которых разработка программ может быть проведена более
эффективно, и разнообразием существующих параллельных вычислительных систем
(прежде всего многопроцессорных систем с общей и распределенной памятью).
Как результат, изучение разных средств параллельного программирования в рамках
единого курса позволит получить знания по каждой конкретной технологии
программирования в отдельности, сопоставить единство и различие всех
рассматриваемых подходов и получить, тем самым, понимание общих принципов
разработки параллельных программ.
2. Задачи курса
Использование многопроцессорных вычислительных систем предполагает
практическое освоение следующих разделов параллельного программирования:
 Общая характеристика параллельных вычислительных систем,
 Принципы разработки параллельных алгоритмов и программ,
 Алгоритмический язык параллельного программирования ОККАМ,
 Алгоритмический язык Фортран HPF для параллельного программирования,
1
 Технология OpenMP для разработки параллельных программ для систем с общей
памятью,
 Разработка параллельных программ для систем с распределенной памятью с
использованием библиотеки MPI,
 Параллельные численные алгоритмы для решения вычислительно-трудоемких
задач.
Выполнение практических заданий по разработке параллельных алгоритмов и
программ осуществляется на высокопроизводительном вычислительном кластере
Нижегородского университета.
3. Дисциплины, изучение которых необходимо при освоении данного курса
Изложение курса опирается на основные курсы "ЭВМ и программирование" и
"Многопроцессорные вычислительные системы и параллельное программирование".
Предполагается наличие у обучаемых общих сведений по курсам "Архитектура ЭВМ",
"Методы вычислений", "Операционные системы". При выполнении практических и
лабораторных заданий обучаемые должны владеть методами программирования на
алгоритмическом языке С.
2. СОДЕРЖАНИЕ ДИСЦИПЛИНЫ
1. Общая характеристика параллельных вычислительных систем
1.1. Архитектура высокопроизводительных ЭВМ
Функциональные вычислительные устройства. Многоуровневая и модульная
память. Конвейерные и векторные вычисления. Процессорные матрицы.
Многопроцессорные вычислительные системы с общей и распределенной памятью
(мультипроцессоры и мультикомпьютеры). Микропроцессорные системы.
Схемы коммутации (полная коммутация - общая память, перекрестные
коммутаторы, локальные схемы коммутации - общая шина, решетки, кластеры).
Анализ параллельных алгоритмов и типовые топологии схем коммутации – кольцо,
линейка, решетки, полный граф, гиперкуб, тор, дерево. Аппаратная реализация и
программная эмуляция топологий.
1.2. Классификация многопроцессорных вычислительных систем
СуперЭВМ.
Многопроцессорные
вычислительные
комплексы
(МВС).
Многомашинные вычислительные комплексы. Сети ЭВМ. Высокопроизводительные
вычислительные кластеры.
Примеры современных высокопроизводительных вычислительных систем.
Суперкомпьютерные вычислительные системы в России.
Систематика Флинна. Потоки данных (команд). Конкретизация видов
многопроцессорных систем: векторные компьютеры, симметричные мультипроцессоры
(SMP), массивно-параллельные компьютерные системы (MPP), кластеры.
2. Принципы разработки параллельных алгоритмов и программ
2.1. Оценка эффективности параллельных вычислений
Показатель
эффекта
распараллеливания
(ускорение).
Эффективность
использования вычислительной системы. Способы оценки показателей. Основные
характеристики вычислительной системы, влияющие на величины ускорения и
2
эффективности (архитектура, количество процессоров, топология каналов передачи
данных).
2.2. Оценка коммуникационной трудоемкости параллельных алгоритмов
Характеристики топологий сети передачи данных. Алгоритмы маршрутизации.
Методы передачи данных.
Анализ трудоемкости основных операций передачи данных. Передача данных
между двумя процессорами сети. Одиночная и множественная рассылка сообщений.
Операция циклического сдвига.
Методы логического представления топологии коммуникационной среды.
Отображение кольцевой топологии и топологии решетки на гиперкуб.
2.3. Общие принципы построения параллельных алгоритмов и программ
Распараллеливание вычислений на уровне команд, выражений, программных
модулей, отдельно выполняемых заданий.
Выбор параллельного алгоритма. Реализация алгоритма в виде параллельной
программы. Построение исполняемой программы для параллельной вычислительной
системы. Параллельное исполнение машинной программы. Частные постановки: выбор
оптимального алгоритма для конкретной вычислительной системы, нахождение
наилучшей топологии вычислительной системы для решения определенной задачи,
распараллеливание существующего алгоритма.
Декомпозиция алгоритма на параллельно исполняемые блоки вычислений.
Распределение заданий по процессорам и балансировка. Организация взаимодействия.
Синхронизация и взаимоисключение. Передача данных между процессорами.
2.6. Средства разработки параллельных программ
Использование специализированных языков параллельного программирования
(ОККАМ). Применение параллельных расширений существующих алгоритмических
языков (HPF). Построение параллельного программного обеспечения на основе
существующих
последовательных
программ
с
использованием
средств
предкомпиляции
(технология
OpenMP).
Использование
технологических
(инструментальных) библиотек параллельного программирования (библиотеки MPI и
PVM). Языки параллельного программирования на основе разделенного глобальноадресуемого пространства (UPC, CAF, Chapel, X10). Технология DVM и язык
программирования T++.
Технологии разработки параллельных программ для графических процессоров
(CUDA, OpenCL).
Организация параллельных вычислений в математических пакетах (на примере
MatLab).
Общая характеристика проблемы тестирования и отладки параллельных программ.
3. Алгоритмический язык параллельного программирования ОККАМ
3.1. Общая характеристика теории процессов Хоара
Понятие процесса и его описание при помощи протоколов. Операции над
протоколами. Последовательные и параллельные процессы. Моделирование
недетерминизма. Описание взаимодействия процессов. Понятие разделяемых ресурсов.
3
3.2. Общая характеристика транспьютерных систем
Особенности архитектуры транспьютера. Каналы связи. Аппаратная поддержка
разделения времени между процессами. Общая структура мультитранспьютерных
систем.
3.2. Язык параллельного программирования ОККАМ
Концепция процесса в ОККАМ. Элементарные и составные процессы. Методы
конструирования агрегированных процессов (последовательное и параллельное
исполнение, условие, выбор и селекция процессов, цикл и репликация). Принципы
передачи данных между процессами при помощи каналов.
Типы данных. Описание каналов. Процедуры и функции. Работа с внешними
устройствами.
Примеры программ на алгоритмическом языке ОККАМ: умножение матрицы на
вектор, быстрая сортировка данных.
4. Алгоритмический язык Фортран HPF для параллельного программирования
Базовые типы данных. Операторы описания. Выражения. Указатели.
Конструирование производных типов данных.
Структура программы. Понятие подпрограммы. Модули и интерфейсы.
Массивы. Сечения. Динамические массивы. Конструкторы. Оператор WHERE.
Директивы распределения данных DISTRIBUTE и ALIGN. Распределение
многомерных и динамических массивов.
Управление параллельными вычислениями. Оператор FORALL. Директива
INDEPENDENT.
Учебный пример: матричное умножение
5. Технология OpenMP для разработки параллельных программ для систем с общей
памятью
5.1. Общая характеристика технологии
Технология OpenMP как стандарт параллельного программирования для
многопроцессорных систем с общей памятью (SMP, NUMA и др.). История развития
стандарта. Международные организации стандартизации технологии.
Общая характеристика подхода. Разработка параллельных программа на основе их
последовательных прототипов. Внесение указаний о распараллеливании в виде
директив препроцессора. Положительные стороны технологии: поэтапность
разработки, единство последовательного и параллельного кода, стандартизованность,
возможность применения для наиболее распространенных языков программирования С
и Фортран.
Формат записи директив. Области видимости директив. Статический и
динамический контекст. Отделенные директивы.
5.2. Управление параллельными областями
Пульсирующий (fork-join) принцип организации параллелизма. Создание
параллельных областей. Директива PARALLEL.
Разделение вычислительной нагрузки между потоками. Директивы DO/FOR и
SECTIONS. Балансировка вычислений.
4
5.3. Управление разделяемыми данными
Общие (разделяемые) и локальные данные потоков. Необходимость
синхронизации. Директивы CRITICAL, ATOMIC и BARRIER. Параметры SHARED и
PRIVATE директивы PARALLEL.
Синхронизированные версии выполнения операций (редукция данных). Параметры
REDUCTION директивы PARALLEL.
Взаимоисключение доступа к общим переменным. Семафоры (замки). Функции
INIT_LOCK, SET_LOCK и UNSET_LOCK.
5.4. Общая характеристика среды выполнения
Функции и переменные окружения. Сравнительная характеристика компиляторов,
обеспечивающих поддержку технологии OpenMP.
5.5. Учебно-практическая задача численного решения дифференциальных
уравнений в частных производных
Постановка задачи. Задача Дирихле для уравнения Пуассона. Конечно-разностная
аппроксимация задачи и алгоритм Гаусса-Зейделя.
Использование OpenMP для организации параллелизма. Проблема синхронизации
параллельных вычислений. Возможность неоднозначности вычислений в параллельных
программах. Проблема взаимоблокировки. Исключение неоднозначности вычислений.
Волновые схемы параллельных вычислений. Балансировка вычислительной нагрузки
процессоров. Результаты вычислительных экспериментов.
6. Разработка параллельных программ для систем с распределенной памятью с
использованием библиотеки MPI
6.1. Общая характеристика подхода
Модель организации параллельных вычислений в виде одновременного
выполнения одной и той же программы на нескольких процессорах (single program
multiple data - SPMD). Организация взаимодействия параллельно выполняемых
программ при помощи передачи сообщений (message passing interface - MPI). Стандарт
спецификаций процедур передачи данных как основа разработки мобильных
(переносимых) параллельных программ для разнородных многопроцессорных
вычислительных систем. История развития стандарта MPI. Международные
организации стандартизации технологии.
Общая характеристика подхода: процессы, сообщения, типы данных,
коммуникаторы, топологии. Формат записи команд вызова функций библиотеки MPI.
Структура программы и минимально необходимый набор функций.
Общая характеристика среды выполнения. Определение состава используемых
процессоров. Команда запуска на выполнение mpirun. Учебный пример.
Положительные стороны технологии: инкапсуляция низкоуровневых проблем
передачи данных, возможность предварительной подготовки параллельных программ
на однопроцессорных компьютерах, стандартизованность, применимость для наиболее
распространенных языков программирования С и Фортран.
6.2. Управление обменом сообщений между процессами
Функции передачи сообщений MPI_Send и MPI_Recv. Описание пересылаемых
данных. Идентификация процессов и сообщений.
5
Коллективные операции передачи данных. Передача данных всем процессам
(функция MPI_Bcast). Операции редукции данных (функция MPI_Reduce).
Синхронизация вычислений (функция MPI_Barrier).
Учебный пример: численное интегрирование.
Режимы передачи сообщений (блокирующий, синхронный, буферизуемый, по
готовности). Попарный обмен сообщений. Общая характеристика дополнительных
операций передачи данных.
6.3. Управление данными
Базовые типы данных в MPI. Понятие производного типа данных. Карта и
сигнатура типа.
Методы конструирования производных типов данных: непрерывный, векторный,
Н-векторный, индексный, Н-векторный, упакованный. Общий способ определения
производного типа данных.
Учебный пример: ленточная схема разделения данных при умножении матриц.
6.4. Управление процессами
Понятие группы процессов и коммуникатора. Функции для управления группами и
коммуникаторами.
Учебный пример: моделирование топологии взаимодействия процессов в виде
прямоугольной решетки.
Функции MPI для работы с виртуальными топологиями взаимодействия процессов.
6.5. Общая характеристика среды выполнения
Функции и переменные окружения. Сравнительная характеристика реализаций
библиотеки MPI.
6.6. Учебно-практическая задача численного решения дифференциальных
уравнений в частных производных
Способы разделения данных. Обмен информацией между процессорами.
Коллективные операции обмена информацией. Организация волны вычислений.
Блочная схема разделения данных. Оценка трудоемкости операций передачи данных.
7. Языки параллельного программирования на основе разделенного глобальноадресуемого пространства
7.1. Язык параллельного программирования UPC
Модель параллельного программирования Unified Parallel C (UPC). Понятие UPCпрограммы. Модель представления памяти. Управление распределением данными.
Синхронизация вычислений в UPC. Коллективные операции. Оценка эффективности.
Примеры.
7.2. Язык параллельного программирования CAF
Модель параллельного программирования Co-Array Fortran (CAF). Понятие
исполнителей (images). Понятие распределенных массивов (co-arrays). Синхронизация
параллельных вычислений. Оценка эффективности CAF-программ. Развитие: от CAF
1.0 к CAF 2.0. Примеры.
7.3. Язык параллельного программирования Chapel
6
Модель разделенного глобально-адресуемого пространства – язык
Chapel.
Элементы языка. Параллелизм задач. Расширенные возможности работы с данными.
Понятие исполнителя (locale). Управление распределением данных. Примеры.
7.4. Язык параллельного программирования X10
Основные понятия X10. Понятие исполнителей (places). Понятие активности
(activities). Поддержка параллелизма в X10. Управление распределением данных.
Примеры.
8. Технология разработки параллельных программ DVM
Абстрактная модель распараллеливания.
Распределение данных. Директивы DISTRIBUTE и REDISTRIBUTE.
Локализация данных. Директивы ALIGN и REALIGN.
Распределение витков параллельного цикла. Директива PARALLEL.
Удаленные данные. Их типы и спецификация.
Локализация данных. Директивы SHADOW, ACROSS, REMOTE, REDUCTION.
Копирование секций массивов.
Многомерные массивы.
Процедуры.
Ввод/вывод.
Ограничения на использование языка СИ.
Методика отладки DVM-программ. Примеры.
9. Язык параллельного функционального программирования T++
Язык T++ — расширение C++. Т-переменные, Т-функции, Т-указатели. Структура
программы на языке Т++.
Готовые и неготовые величины. Ожидание готовности. Функции tdrop и twait.
Гранулы параллелизма. Использование глобальных переменных. Использование Cуказателей в Т-переменных.
Общая память (суперпамять). Передача значений с узла на узел.
Поддержка отказоустойчивости исполнения Т-приложений.
Особенности разработки Т-программ в операционной системе Windows.
Примеры.
10. Технологии разработки параллельных программ для процессоров новых
архитектур
10.1. Технология CUDA
Возможные преимущества вычислений на графическом процессоре. Средства
разработки для графического процессора.
Использование технологии CUDA для вычислений на графических процессорах.
Модель программирования. Модель исполнения и иерархия потоков. Иерархия
памяти.
Интерфейс программирования CUDA. Спецификаторы типов переменных и
функций. Встроенные переменные.
7
Конфигурирование исполнения ядер. Синхронизация. Управление устройствами.
Управление памятью.
Общие принципы вычислений на базе технологии CUDA.
Исследование производительности технологии CUDA на примере задачи N тел.
10.2. Язык параллельного программирования графических процессоров на
основе стандарта OpenCL
Использование OpenCL для вычислений на графических процессорах.
Архитектура OpenCL. Модель платформы. Модель исполнения. Модель памяти.
Модель программирования.
Общие принципы вычислений на базе OpenCL.
Перенос приложения CUDA на OpenCL.
Исследование производительности технологии на примере задачи N тел.
10.3. Технологии разработки параллельных программ для процессора Cell
Обзор архитектуры Cell BE. Процессорные элементы. Шина EIB. Контроллер
памяти MIC. Интерфейс Cell BE. PowerPC Processor Element. Synergistic Processor
Elements.
Модели программирования для Cell BE (выгруженные функции, обслуживание
устройств, ускорение вычислений, потоковая и конвейерная обработка,
многопроцессорная обработка с общей памятью, асимметричное выполнение потоков).
Разработка и адаптация приложений для архитектуры Cell BE (последовательная
реализация для PPE, перенос выполнения вычислений на SPE, векторизация
вычислений на SPE, параллельная реализация для нескольких SPE, оптимизация SPEкода).
Исследование производительности технологии на примере задачи N тел.
10.4. Технологии разработки параллельных программ для процессора –
ускорителя вычислений ClearSpeed
Технические
характеристики
процессора
ClearSpeed
Advance.
Общая
характеристика среды разработки (Cn SDK, ClearSpeed Visual Profiler, CSX600
Simulators, FLEXlm Server, CSXL и CSDFT Libraries).
Модель исполнения. Иерархия памяти. Разработка приложений.
Особенности языка Cn . Типы данных. Спецификаторы mono и poly. Типы
указателей. Перемещение данных между poly- и mono-памятью
.
Кэширование
данных и семафоры. Функции редукции.
Исследование производительности технологии на примере задачи N тел.
11. Организация параллельных вычислений в математических пакетах (на примере
MatLab)
Режим вычисления pmode. Понятие параллельной задачи и параллельного задания.
Примеры: матричное умножение, решение систем линейных уравнений.
12. Параллельные численные алгоритмы для решения вычислительно-трудоемких
задач
12.1. Параллельные численные алгоритмы линейной алгебры
8
Способы разбиения матриц (горизонтальная, вертикальная, блочные схемы).
Методы вычисления произведения матриц с использованием разных схем разбиения
матриц. Блочные алгоритмы Фокса и Кэннона. Обеспечение предельно допустимого
параллелизма. Обращение матриц. Параллельные методы решения систем линейных
уравнений.
12.2. Параллельная сортировка данных
Параллельное обобщение базовой операции сортировки. Пузырьковая сортировка.
Сортировка Шелла. Быстрая сортировка.
12.2. Параллельная обработка графов
Нахождение минимально охватывающего дерева (параллельный вариант алгоритма
Прима). Поиск кратчайших путей (параллельный вариант алгоритма Дейкстры).
Лабораторный практикум (подлежит расширению)
Часть 1. Методы параллельного программирования для вычислительных систем с
распределенной памятью
1. Разработка параллельных программ с использованием интерфейса
передачи сообщений MPI - 2 часа
Мини-MPI (старт, финиш, передача и прием сообщений).
Пример 1: Начальная параллельная программа (печать идентификаторов
процессов) - запуск (локальный, распределенный). Оценка времени выполнения
программы, синхронизация, коллективные операции.
Пример 2: Численное интегрирование- создание проекта на основе готового
исходного текста программы, настройка опций, компиляция, запуск.
Пример 3: Скалярное произведение векторов (самостоятельное задание 1).
2. Практикум по разработке параллельных алгоритмов и программ для
решения задач вычислительной математики - 6 часов
Обзор библиотеки MPI: установка, настройка, схема функционирования.
Пример 4: Решение задач распознавания образов (выполнение задания под
руководством преподавателя).
Пример 5. Умножение матриц, ленточный алгоритм (самостоятельное задание 2).
Пример 6. Умножение матриц, блочные схемы распределения данных (алгоритмы
Фокса и Кеннона).
Часть 2. Методы параллельного программирования для вычислительных систем с
общей памятью
3. Разработка параллельных программ с использованием технологии ОрепМР
- 2 часа
Общая характеристика технологии ОрепМР: потоки, параллельные области,
распределение вычислений между потоками.
Пример 7: Скалярное произведение векторов. Глобальные и локальные данные
потоков. Критические секции доступа к разделяемым данным. Синхронизация.
Пример 8. Умножение матриц (варианты распараллеливания вложенных циклов,
самостоятельное задание 3).
9
4. Практикум по разработке параллельных алгоритмов и программ для
решения вычислительно-трудоемких задач - 6 часов
Пример 9. Параллельная сортировка: алгоритмы пузырьковой сортировки,
сортировки Шелла и быстрой сортировки (выполнение задания под руководством
преподавателя).
Пример 10. Задачи обработки графов: построение минимального охватывающего
дерева, поиск кратчайших путей (самостоятельное задание 4)
УЧЕБНО-МЕТОДИЧЕСКИЕ МАТЕРИАЛЫ ПО ДИСЦИПЛИНЕ
Основная литература
1. Гергель В.П. Теория и практика параллельных вычислений. – М.: Бином.
Лаборатория знаний, Интернет-университет информационных технологий, 2007.
2. Богачев К.Ю. Основы параллельного программирования. - М.: БИНОМ.
Лаборатория знаний, 2003.
3. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВПетербург, 2002.
4. Немнюгин
С.,
Стесик
О.
Параллельное
программирование
для
многопроцессорных вычислительных систем — СПб.: БХВ-Петербург, 2002.
5. Корнеев В.В. Параллельное программирование в MPI. Москва-Ижевск:
Институт компьютерных исследований, 2003.
6. Оленев Н.Н., Печенкин Р.В., Чернецов А.М. Параллельное программирование в
Matlab и его приложения. – М.: ВЦ РАН, 2007.
7. Крюков В.А. Параллельное программирование на языке C-DVM. – М.: МГУ,
2002.
8. Абрамов С.М. OpenTS. Состояние работ и перспективы. – ПереславльЗалесский: ИПС РАН, 2006.
9. El-Ghazawi, T., Yelick K., Carlson W., Sterling T. UPC: Distributed Shared-Memory
Programming, Wiley, 2005.
10. http://www.co-array.org
11. http://chapel.cray.com/
12. http://x10-lang.org/
13. Introductory Programming Manual for 3.1 (ClearSpeed Support Site).
http://support.clearspeed.com/resources/documentation/Release3.1Docs/
SDK_Introductory_Programming_Manual_3.1_Rev2.J.pdf
14. http://www.nvidia.ru/object/cuda_home_new_ru.html
15. http://opencl.ru/
10
Дополнительная литература
16. Джоунз Г. Программирование на языке ОККАМ. - М.: Мир, 1989.
17. Сырков Б.Ю., Матвеев С.В. Программное обеспечение мультитранспьютерных
систем. - М.: Диалог-МИФИ, 1992.
18. Хоар Ч. Взаимодействующие последовательные процессы. - М.: Мир, 1989.
19. Chandra, R., Menon, R., Dagum, L., Kohr, D., Maydan, D., McDonald, J. Parallel
Programming in OpenMP. - Morgan Kaufinann Publishers, 2000
20. Geist G.A., Beguelin A., Dongarra J., Jiang W., Manchek В., Sunderam V. PVM:
Parallel Virtual Machine - A User's Guide and Tutorial for Network Parallel
Computing. MIT Press, 1994.
21. Group W, Lusk E, Skjellum A. Using MPI. Portable Parallel Programming with the
Message-Passing
Interface.
MIT
Press,
1994.(htp://www.mcs.anl.gov/mpi/index.html)
22. Kumar V., Grama A., Gupta A., Karypis G. Introduction to Parallel Computing. - The
Benjamin/Cummings Publishing Company, Inc., 1994
23. Pacheco, S. P. Parallel programming with MPI. Morgan Kaufmann Publishers, San
Francisco. 1997.
Информационные ресурсы сети Интернет
24. Информационно-аналитические материалы по параллельным вычислениям
(http://www.parallel.ru)
25. Информационные
материалы
Центра
компьютерного
моделирования
Нижегородского университета (http://www.software.unn.ac.ru/ccam)
26. Информационные материалы по MPI (http://www.mpi-forum.org)
27. Информационные материалы по OpenMP (http://www.openmp.org)
Оценка состояния разработки курса на 27.08.2010
№
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Язык, технология
OCCAM
HPF
MPI
OpenMP
UPC
CAF
Chapel
X10
DVM
Т++
MatLab
CUDA
OpenCL
Cell
ClearSpeed
Разработанные материалы
Лекции Презентации Лаб. работы
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
11
Скачать