Транспьютеры
What is Transputer ? Транспьютер (англ. transputer) элемент построения многопроцессорных систем, выполненный на одном кристалле большой интегральной схемыангл.процессорных интегральной схемы Transistor Computer. Goal was produce low cost low power chips to form a complete processor, just as transistors had earlier The first single chip computer designed for message-passing parallel systems, in 1980s, by the company INMOS (ныне подразделение STMicroelectronics). STMicroelectronics
Transputer Versions First generation 16 bit transputers: T212 T222 T bit transputers without a floating unit: T400 T414 T425 T bit transputers with a floating unit : T800 T801 T805 All have the same architecture, similar instruction sets and fully compatible communications links. Second Generation 64 bit transputer with a floating unit : T9000 Although general architecture much the same, it is a new design and is much more complex chip then its predecessors.
Транспьютер Т800 и коммутатор С004
Транспьютерная материнская плата МТБ-8
TRANSPUTER ARCHITECTURE
Transputer Memory Map
What is a GPU? A Graphics Processing Unit or GPU (also occasionally called Visual Processing Unit or VPU) is a dedicated graphics rendering device for a personal computer or game console. Modern GPUs are very efficient at manipulating and displaying computer graphics, and their highly-parallel structure makes them more effective than typical CPUs for a range of complex algorithms. - Definition from wikipedia.org Radeon 9800 Pro
History of GPUs The pre-GPU era – VGAs in the 80s 4 (or even 5) generations of GPUs in the last decade Fixed functions vs. programmability API support – OpenGL, Direct3D (v6.0 to v9.0) – Shader models (v1.0 – v3.0)
Предыстория к GPGPU Сопроцессор Видео- ускоритель Шейдеры GPU
Why shifting from CPU to GPU? Why not just keep increasing the CPU speed and leave the GPU to handle what is its best? CPU speed is reaching a bottle neck (how many transistors can be integrated on a chip) – Solution, in the future, nano technology, short term, dual core machines (double CPUs), clustered CPUs, …, even grid computing and supercomputing – GPU facing the same problem, but still have space to press on due to its task specific designs and parallelism paradigm
Существующие многоядерные системы Посмотрим на частоты CPU: – 2004 г. - Pentium 4, 3.46 GHz – 2005 г. - Pentium 4, 3.8 GHz – 2006 г. - Core Duo T2700, 2333 MHz – 2007 г. - Core 2 Duo E6700, 2.66 GHz – 2007 г. - Core 2 Duo E6800, 3 GHz – 2008 г. - Core 2 Duo E8600, 3.33 Ghz – 2009 г. - Core i7 950, 3.06 GHz
Мотивация: Вычислительная Мощность Courtesy Ian Buck, John Owens
An Aside: Вычислительная мощность Почему GPU становятся мощнее так быстро? – Арифметика : особенности архитектуры GPUs позволяют относительно просто использовать дополнительные транзисторы для вычислений, а не для кэша – Экономика : Многомиллиардная индустрия компьютерных игр вкладывает деньги в разработку все более совершенных GPU
Мотивация: Гибкость и Точность Современные GPUs хорошо программируемы – Программируемые пиксельные, вершинные, видео процессоры – Установившаяся поддержка высокоуровневых языков программирования Современные GPUs обеспечивают высокую точность вычислений – Аппаратная поддержка чисел с плавающей точкой одинарной точности (32 бита). Что достаточно много для многих(не всех) приложений
Мотивация: Потенциал GPGPU Кратко: – Гибкость и мощность GPUs делает их привлекательными для вычислений общего назначения – Сфера применения GPGPU очень широка – от алгоритмов компьютерной графики, таких как задача глобального освещения, до задач численных методов и ММС. – Цель: сделать доступными разработчикам недорогую вычислительную мощность GPU как вычислительного сопроцессора
Проблемы: Сложность использования GPUs разработаны для & направляемы компьютерными играми – Необычная модель программирования – Идиомы программирования связаны с компьютерной графикой – Среда программирования сильно ограничена Архитектура: – Высоко параллельная – Быстрое развитие Нельзя просто перенести CPU код на GPU!
Основы GPU :Классический Графический Конвейер Упрощенный графический конвейер – Отметим что конвейер варьируем – Кэши, Списки и многое другое не показано GPUCPU Приложение Трансформация & Свет Растериза- ция Растериза- ция Тени Память ВК (Текстуры) Память ВК (Текстуры) Освещенные вершины (2D) Graphics State Рендеринг в текстуру Сборка примитивов Сборка примитивов вершины (3D) Экранные треугольники (2D) Фрагменты (pre-pixels) Итоговые пиксели ( Цвет, Глубина )
GPU Transform CPU Приложение Растериза- ция Растериза- ция Shade Память ВК (Текстуры) Память ВК (Текстуры) Освещенный вершины (2D) Graphics State Рендеринг в текстуру Сборка Примитивов Сборка Примитивов Вершины (3D) Экранные треугольники (2D) Фрагменты (pre-pixels) Итоговые пиксели ( цвет, глубина ) Программируемый вершинный процессор! Программируемый фрагментный процессор! Основы GPU : Современный Графический Конвейер Вершинные Процессоры
GPU Конвейер: Преобразования Вершинный процессор (несколько параллельных) – Преобразования из глобальной системы координат в систему координат изображения – Повершенное вычисление света
GPUCPU Приложение Вершинный процессор Вершинный процессор Растериза- ция Растериза- ция Фрагментный Процессор Фрагментный Процессор Текстуры Xformed, Lit Vertices (2D) Graphics State Рендеринг в текстуру Вершины (3D) Screenspace triangles (2D) Фрагменты (pre-pixels) Итоговые пиксели ( Цвет, глубина) Программируемая сборка примитивов! Более гибкая адресация памяти! Графический Конвейер последнего поколения Assemble Primitives Геометрический процессор Геометрический процессор
GPU Конвейер: Растеризация Растеризатор – Перевод геометрического пр. (вершины) в плоское пр. (фрагменты) Фрагмент = фрагмент изображения – Пиксель + связанные с ним данные: цвет, глубина, трафарет, etc. – Интерполирование повершенных данных через пиксели
GPUCPU Приложение Вершинный процессор Вершинный процессор Растериза- ция Растериза- ция Фрагментный Процессор Фрагментный Процессор Текстуры Xformed, Lit Vertices (2D) Graphics State Рендеринг в текстуру Вершины (3D) Screenspace triangles (2D) Фрагменты (pre-pixels) Итоговые пиксели ( Цвет, глубина) Программируемая сборка примитивов! Более гибкая адресация памяти! Графический Конвейер последнего поколения Assemble Primitives Фрагментный процессор Фрагментный процессор
GPU Конвейер: Тени Фрагментный процессор (несколько параллельных) – Вычисление цвета для каждого пикселя – Возможность чтения из текстур (изображений)
GPUCPU Приложение Вершинный процессор Вершинный процессор Растериза- ция Растериза- ция Фрагментный Процессор Фрагментный Процессор Текстуры Xformed, Lit Vertices (2D) Graphics State Рендеринг в текстуру Вершины (3D) Screenspace triangles (2D) Фрагменты (pre-pixels) Итоговые пиксели ( Цвет, глубина) Программируемая сборка примитивов! Более гибкая адресация памяти! Графический Конвейер последнего поколения Assemble Primitives Пиксельный процессор Пиксельный процессор
Deep Pipelines Vertex Shader Triangle Setup Fragment Shader Fragment Blender Frame- Buffer(s) Deep Pipelines think assembly line conveyer belt
Wide Pipelines (many conveyor belts) Vertex Shader Triangle Setup Fragment Shader Fragment Blender Frame- Buffer(s) Deep Pipelines Wide Pipelines
Parallelism, Parallelism, Parallelism Deep/Wide pipelines allow memory latency to be hidden. – If one fragment(or vertex) is waiting on a memory fetch, go work on another element for a while. Dont need expensive huge caches (unlike CPUs) – Fill precious chip space with arithmetic logic units (ALU).
The Big Bandwidth Bugaboo L1 L2 Video Memory 6.4 GB/sec Main Memory AGP Mem CPUCPU GPUGPU Moving Data is expensive DMA
General Purpose Computing (GPGPU) Whats the GPU good for? – Everything you can get it to do efficiently for you!!! Physics Collision Detection AI And yes, graphics too… Skyworks, Mark Harris Cullide: Naga Govindaraju et. al
General Purpose Computing Texture Maps are arrays of data elements Fragment Program is an instruction Frame buffer holds the result of the SIMD operation Single Instruction Multiple Data/ Stream Processor n m m n n m Fragment Program 0,0 0,11,1 1,0 Screen Filling Quadrilateral Texture Maps (Multiple Data) Fragment Program (Single Instruction) Framebuffer
Квантовый компьютер Квантовый компьютер – гипотетическое вычислительное устройство, которое путем выполнения квантовых алгоритмов существенно использует при работе квантово механические эффекты, такие как квантовый параллелизм и квантовая запутанность.
Квантовый компьютер Основная идея квантового вычисления состоит в том, чтобы хранить данные в ядрах атомов, изменяя их ориентацию в пространстве. Элементарная ячейка такого компьютера получила название квантовый бит (quantum bit = кубит). В отличие от привычной нам единицы информации - бита (binary digits = bits), который может принимать только два значения или "0" или "1", квантовый бит в соответствии с принципом неопределенности, постулируемым квантовой механикой, может находиться одновременно в состоянии и "0", и "1".
Постановка задачи Кубит является основным рабочим элементом квантового компьютера, физически реализуется в виде двухуровневой квантовой системы, например фотона, атома, донора в полупроводнике, ядерного спина, серхпроводящего контура Важнейшей характеристикой кубита является время декогерентности Наиболее перспективные устройства для реализации квантового компьютера - кубиты на основе джозефсоновских переходов M. Nakahara and T. Ohmi Quantum computing: from linear algebra to physical realizations. – London, 2008 Проблемы: - измерение скоростей релаксации кубита - управление динамикой кубитов в сильном переменном поле - измерения состояния кубита в условиях шума
Что могут квантовые компьютеры Пока что самое сложное действие, доступное реально существующим квантовым компьютерам: разработке IBM 2001 года и двум недавним разработкам - это разложение числа 15 на простые множители. Но потенциально они могут гораздо больше. Первый алгоритм для квантовых компьютеров - разложение числа на простые множители - был разработан в 1994 году Питером Шором. Эту задачу умеют решать и классические компьютеры, но времени они на это требуют неизмеримо больше (квантовые же справляются с разложением за время, полиномиальное от раскладываемого числа).
Попытки выпуска первых квантовых компьютеров
Квантовый компьютер видео
54 Биологический Нейрон Мозг содержит 10 миллиардов нейронов Тысячи типов нейронов соединены между собой 100 триллионов связей Нейрон может находиться, либо в спокойном, либо возбуждённом состоянии Порог перехода
55 Математическая модель нейрона Рисунок 1. Математическая модель нейрона
56 Имитатор Нейрона x1x1 x2x2 x3x3.... xdxd w1w1 w2w2 w3w3 wdwd w i. x i Функция f(x) y входной массив X=(x1,x2,...,xd) вектор весов W =(w1,w2,w3,....,wd) Сумма входов вектора X с весами W Выход y
57 Многоуровневая нейронная сеть x1 x2 x3 xd Feature Vector Входной уровень Скрытый уровень Выходной уровень
58 Проблема обучения Обучение с готовыми ответами Обучение без ответов
59 Применение нейронных сетей Управление в реальном времен Распознавание образов Прогнозирование в реальном времени Оптимизация Обработка сигналов при наличии больших шумов Протезирование Психодиагностика
60 Схема нейровычислителя
61 Нейроускоритель МЦ 4.01
62
63
64 Преимущества нейрокомпьютеров Все алгоритмы нейроинформатики высокопараллельны Устойчивость нейросистем к помехам и разрушениям Устойчивые и надежные нейросистемы могут создаваться и из ненадежных элементов, имеющих значительный разброс параметров
65 Особенности нейрокомпьютеров Массовый параллелизм Распределённое представление информации и вычисления Способность к обучению и обобщению Адаптивность Свойство контекстуальной обработки информации Толерантность к ошибкам Низкое энергопотребление
Параллельное программирование Развитие фундаментальных и прикладных наук, технологий требует применения все более мощных и эффективных методов и средств обработки информации. В качестве примера можно привести разработку реалистических математических моделей, которые часто оказываются настолько сложными, что не допускают точного аналитического их исследования. Единственная возможность исследования таких моделей, их верификации (то есть подтверждения правильности) и использования для прогноза компьютерное моделирование, применение методов численного анализа. Другая важная проблема обработка больших объемов информации в режиме реального времени.
Применение
Задачи большого вызова (Kenneth G. Wilson, Cornell University, 1987) Вычислительная газовая динамика: – Создание летательных аппаратов, эффективных автомобильных двигателей – Предсказания погоды, и глобальных климатических изменений – Оптимизация нефтедобычи, … Молекулярная динамика: – Создание материалов с заданными свойствами – Разработка новых лекарственных соединений – Сверхпроводимость, Свойства веществ в экстремальных состояниях, … Символьные вычисления – Распознавание речи – Компьютерное зрение – Изучение сложных систем – Автономные системы управления Квантовая хромодинамика и теория конденсированных сред Управляемый термоядерный синтез, Геном человека, … 71
Области применения многопроцессорных систем Задачи большого вызова (HPC) Обработка больших объемов данных – Ускорители – Секвенаторы – Социальные сети, … – Космическая фотосъёмка Задачи реального времени – Железнодорожные станции – Управление технологическими процессами Системы высокой надёжности – Бортовые системы 72
Две модели программирования: последовательная и параллельная параллелизм данных и параллелизм задач ФОРТРАН-77, ФОРТРАН-90, С/С++, …
Две модели программирования: последовательная и параллельная параллелизм данных и параллелизм задач ФОРТРАН-77, ФОРТРАН-90, С/С++, … одна операция выполняется сразу над всеми элементами массива данных CM FORTRAN, HP FORTRAN, MPP FORTRAN (F90) и C*
Параллелизм данных 1.Обработкой данных управляет одна программа; 2.Пространство имен является глобальным, то есть для программиста существует одна единственная память, а детали структуры данных, доступа к памяти и межпроцессорного обмена данными от него скрыты; 3.Слабая синхронизация вычислений на параллельных процессорах, то есть выполнение команд на разных процессорах происходит, как правило, независимо и только лишь иногда производится согласование выполнения циклов или других программных конструкций - их синхронизация. Каждый процессор выполняет один и тот же фрагмент программы, но нет гарантии, что в заданный момент времени на всех процессорах выполняется одна и та же машинная команда; 4.Параллельные операции над элементами массива выполняются одновременно на всех доступных данной программе процессорах.
Базовый набор операций параллелизма данных операции управления данными; операции над массивами в целом и их фрагментами; условные операции; операции приведения; операции сдвига; операции сканирования; операции, связанные с пересылкой данных.
Базовый набор операций параллелизма данных операции управления данными; В определенных ситуациях возникает необходимость в управлении распределением данных между процессорами. Это может потребоваться, например, для обеспечения равномерной загрузки процессоров. Чем более равномерно загружены работой процессоры, тем более эффективной будет работа компьютера.
Базовый набор операций параллелизма данных операции управления данными; операции над массивами в целом и их фрагментами; Аргументами таких операций являются массивы в целом или их фрагменты (сечения), при этом данная операция применяется одновременно (параллельно) ко всем элементам массива. Примерами операций такого типа являются вычисление поэлементной суммы массивов, умножение элементов массива на скалярный или векторный множитель и т.д. Операции могут быть и более сложными - вычисление функций от массива, например.
Базовый набор операций параллелизма данных операции управления данными; операции над массивами в целом и их фрагментами; условные операции; Эти операции могут выполняться лишь над теми элементами массива, которые удовлетворяют какому-то определенному условию. В сеточных методах это может быть четный или нечетный номер строки (столбца) сетки или неравенство нулю элементов матрицы.
Базовый набор операций параллелизма данных операции управления данными; операции над массивами в целом и их фрагментами; условные операции; операции приведения; Операции приведения применяются ко всем элементам массива (или его сечения), а результатом является одно единственное значение, например, сумма элементов массива или максимальное значение его элементов
Базовый набор операций параллелизма данных операции управления данными; операции над массивами в целом и их фрагментами; условные операции; операции приведения; операции сдвига; Для эффективной реализации некоторых параллельных алгоритмов требуются операции сдвига массивов. Примерами служат алгоритмы обработки изображений, конечно-разностные алгоритмы и некоторые другие.
Базовый набор операций параллелизма данных операции управления данными; операции над массивами в целом и их фрагментами; условные операции; операции приведения; операции сдвига; операции сканирования; Элементы массива суммируются последовательно, а результат очередного суммирования заносится в очередную ячейку нового, результирующего массива, причем номер этой ячейки совпадает с числом просуммированных элементов исходного массива.
Базовый набор операций параллелизма данных операции, связанные с пересылкой данных. Это, например, операции пересылки данных между массивами разной формы (то есть имеющими разную размерность и разную протяженность по каждому измерению) и некоторые другие.
Две модели программирования: последовательная и параллельная параллелизм данных и параллелизм задач ФОРТРАН-77, ФОРТРАН-90, С/С++, … задача разбивается на несколько относительно самостоятельных подзадач и каждый процессор загружается своей собственной подзадачей MPI (Message Passing Interface) и PVM (Parallel Virtual Machines) библиотеки
Особенности параллелизма задач повышенная трудоемкость разработки программы и ее отладки; на программиста ложится вся ответственность за равномерную загрузку процессоров параллельного компьютера; программисту приходится минимизировать обмен данными между задачами, так как пересылка данных - наиболее "времяемкий" процесс; повышенная опасность возникновения тупиковых ситуаций, когда отправленная одной программой посылка с данными не приходит к месту назначения.
Этапы распараллеливания воспользоваться встроенными в транслятор (обычно с ФОРТРАНа или Си) средствами векторизации или распараллеливания. При этом никаких изменений в программу вносить не придется. Однако вероятность существенного ускорения (в разы или десятки раз) невелика ; анализ затрачиваемого времени разными частями программы и определение наиболее ресурсопотребляющих частей. Последующие усилия должны быть направлены именно на оптимизацию этих частей. В программах наиболее затратными являются циклы и усилия компилятора направлены прежде всего на векторизацию и распараллеливание циклов. Диагностика компилятора поможет установить причины, мешающие векторизовать и распараллелить циклы. Возможно, что простыми действиями удастся устранить эти причины ; замена алгоритма вычислений в наиболее критичных частях программы. Способы написания оптимальных (с точки зрения быстродействия) программ существенно отличаются в двух парадигмах программирования - в последовательной и в параллельной (векторной). Поэтому программа, оптимальная для скалярного процессора, с большой вероятностью не может быть векторизована или распараллелена.
Особенности языков программирования float x[100], a[100]; register float *xx = x, *aa = a; register int i; for( i=0; i
распараллеливание и векторизация сходство и различия параллелизм данных результаты действий над любой частью данных не должны зависеть от результатов действий над другой их частью. float x[100], a[100], b[100]; for( i=0; i
Две части программы - скалярная и векторная | 1 начало | | ---> | | | | | | 2 векторизуемая часть | | | | | | | 3 скалярная часть | | | | |
Пусть дан массив m длины 128, который надо заполнить по следующему алгоритму: do i=1, 128 m(i) = i enddo Приведенный цикл можно записать на ассемблере так: SETLEN #128 ; установить используемое число ; элементов в векторных регистрах (во всех) SETINC #4 ; установить смещение к последующему ; элементу массива в памяти (4 байта) SETNUM v0 ; записать в элементы векторного регистра v0 ; их номера начиная с нуля и кончая 127 ADD #1, v0 ; добавить 1 к каждому элементу регистра v0 SAVE v0, m ; записать элементы v0 в ОЗУ в последовательные ; слова (смещение = 4) начиная с адреса m 5 команд
Теперь увеличим размер массива и число повторений цикла до N: do i=1, N m(i) = i enddo Для правильной работы процессора мы обязаны установить число используемых элементов вектора не более, чем 128. Если N будет произвольным, то нам придется превратить данный одинарный цикл в двойной: 1 do inc=0, N-1, NN = min0( 128, N-inc ) 3 do i=1, NN m(inc+i) = inc+i enddo Цикл с меткой 1 выполняет "разбиение" массива на подмассивы длиной 128 элементов. Переменная inc имеет смысл смещения от первого элемента массива к очередному подмассиву: 0, 128, Переменная NN определяет длину подмассива. Обычно она равна 128, но последний подмассив может иметь меньшую длину, если N не кратно 128. Функция min0 выбора минимального значения в операторе с меткой 2 выдает значение не 128 только для последнего подмассива. Внутренний цикл с меткой 3 практически эквивалентен циклу из предыдущего примера.
SETLEN NN ; число элементов в векторных регистрах = NN SETINC #4 ; смещение к последующему элементу массива SETNUM v0 ; записать в элементы векторного регистра v0 ; их номера начиная с нуля и кончая 127 ADD #1, v0 ; добавить 1 к каждому элементу регистра v0 ADD inc, v0 ; добавить значение переменной inc MOVE inc, r0 ; записать в скалярный регистр r0 значение ; переменной inc - смещение от первого ; элемента массива к m(inc+1) MUL #4, r0 ; умножить на 4 - смещение в байтах ADD #m, r0 ; добавить адрес массива m, получается адрес ; элемента m(inc+1) SAVE ; записать элементы v0 в ОЗУ в последовательные ; слова (смещение = 4) начиная с адреса, ; хранящегося в регистре r0 Приведенный цикл можно записать на ассемблере так: добавились одна векторная и три скалярных команды. Однако это только внутренний цикл.
Ограниченное число векторных регистров do i=1, N x(i) = i y(i) = 0.0 z(i) = x(i)+1.0 enddo do i=1, N 1 x(i) = i 2 z(i) = x(i) y(i) = 0.0 enddo Во втором примере после векторизации i в операторе 1 и добавлении к этому вектору 1.0 в операторе 2 можно повторно использовать тот же векторный регистр для векторизации нуля в операторе 3. В этом варианте цикла один векторный регистр будет использован последовательно для разных целей.
Ограничения на используемые операторы в векторизуемых циклах Существенным ограничением на конструкции, которые могут применяться в векторизуемых циклах, является использование только операторов присваивания и арифметических выражений. Никакие команды перехода (условные ветвления, вызовы подпрограмм и функций, циклические операторы или безусловные переходы) не могут быть использованы в теле векторизуемого цикла. Из перечисленных запретов существует только два исключения. Первое - использование встроенных (INTRINSIC) в транслятор арифметических функций. Второе исключение - использование условного оператора присваивания: if( x(i).lt. 0.0 ) z(i) = 0.0
Параллельные ЭВМ и параллельные программы Рассмотрим такой фрагмент программы, который будет исполняться на 4-х процессорной ЭВМ: real x(4) 1 do i=1,4 x(i) = func(i) enddo 2 s = do i=1,4 s = s + x(i) enddo Все 4 элемента массива x можно вычислить параллельно в цикле с меткой 1. При этом вообще цикл не понадобится, т.к. у нас число процессов будет равно числу искомых элементов массива. Переменную s должен инициализовать только один процесс - это последовательный фрагмент программы. Цикл с меткой 3 должен также выполняться одним процессом. Для этого надо сначала передать этому процессу все значения x(i), i=1...4, из других процессов. Этот цикл не сможет начаться раньше, чем будет вычислен и передан последний (не по номеру, а по времени) элемент массива x. Т.е. главный процесс (проводящий суммирование) будет ожидать завершение передачи элементов массива всеми остальными процессами.
Параллельные ЭВМ и параллельные программы Рассмотрим такой фрагмент программы, который будет исполняться на 4-х процессорной ЭВМ: real x(4) 1 do i=1,4 x(i) = func(i) enddo 2 s = do i=1,4 s = s + x(i) enddo Все 4 элемента массива x можно вычислить параллельно в цикле с меткой 1. При этом вообще цикл не понадобится, т.к. у нас число процессов будет равно числу искомых элементов массива. Переменную s должен инициализовать только один процесс - это последовательный фрагмент программы. Цикл с меткой 3 должен также выполняться одним процессом. Для этого надо сначала передать этому процессу все значения x(i), i=1...4, из других процессов. Этот цикл не сможет начаться раньше, чем будет вычислен и передан последний (не по номеру, а по времени) элемент массива x. Т.е. главный процесс (проводящий суммирование) будет ожидать завершение передачи элементов массива всеми остальными процессами. 4 do i=1,4 x(i) = x(i)/s enddo
Средства распараллеливания в трансляторах и параллельные библиотеки HPF или HPC реализуют концепцию параллелизма данных. Приведем пример прагм на диалекте MPP Fortran для ЭВМ Cray-T3D: real x(1024) CDIR$ SHARED X(:BLOCK) CDIR$ DOSHARED (I) ON X(I) do i=1,1024 x(i) = func(i) enddo
Классы задач, которые можно эффективно векторизовать или распараллелить Обработка массивов Вычисления в узлах сеток и решеток
Классы задач, которые можно эффективно векторизовать или распараллелить Обработка массивов 1.Одномерные массивы. Если значения элементов массива определяются довольно сложным выражением, а вычислять их надо многократно, то векторизация или распараллеливание цикла для вычисления элементов массива может оказаться очень эффективным. 2.Двумерные массивы. При исполнении вложенных циклов эффективно распараллеливаются самые внешние циклы, а векторизуются только внутренние. Однако практически все действия с матрицами (сложение, умножение, умножение на вектор, прямое произведение) могут быть выполнены. Многие алгоритмы линейной алгебры (но не все) могут быть эффективно векторизованы и распараллелены.
Классы задач, которые можно эффективно векторизовать или распараллелить Обработка массивов Вычисления в узлах сеток и решеток Во многих областях знания встречаются задачи, которые сводятся к вычислению эволюции объектов, расположенных в дискретных точках и взаимодействующих с ближайшими соседями. Простейшей и, наверно, наиболее широко известной такой задачей является игра "жизнь".