OpenCL в трейдинге - страница 8

 

EECE.6540 Гетерогенные вычисления (Массачусетский университет Лоуэлла)



36. Выполнение инструкций на пути данных ЦП

Видео объясняет, как выполняются вычисления на пути данных ЦП, на примере выполнения операций накопления. Путь данных включает блоки загрузки и хранения для загрузки и сохранения данных в память с использованием адресов и функциональные блоки, такие как ALU, для выполнения операций. Видео иллюстрирует процесс шаг за шагом, включая загрузку данных из памяти, выполнение операций и сохранение результатов обратно в память. Докладчик также объясняет, как можно использовать FPGA для реализации той же функции, максимально используя доступные аппаратные ресурсы.

  • 00:00:00 В этом разделе видео объясняет, как вычисления отображаются на PGA, на примере выполнения операций накопления. Сначала высокоуровневый код преобразуется в язык ассемблера с помощью инструкций процессора, а промежуточные значения сохраняются в регистрах. ЦП — это конвейерный ЦП с функциональными блоками в пути данных, включая блоки загрузки и хранения для загрузки и сохранения данных в памяти с использованием адресов. Путь данных спроектирован так, чтобы быть достаточно общим для выполнения всех видов инструкций в пределах фиксированной ширины данных и количества операций, а постоянное значение может быть загружено в регистр через АЛУ. В видео также представлен пример выполнения шести инструкций в ЦП, пошагово иллюстрирующий процесс.

  • 00:05:00 В этом разделе спикер проходит несколько инструкций и объясняет, как они выполняются в пути данных ЦП, включая загрузку данных из памяти в файлы регистров, использование различных функциональных блоков в пути данных для выполнения таких операций, как умножение и сложение. и сохранение результатов обратно в память. Затем выступающий объясняет, как можно использовать FPGA для реализации той же функции ядра, развернув аппаратное обеспечение ЦП и используя именно те ресурсы, которые необходимы для функции, максимально используя доступные ресурсы аппаратного обеспечения FPGA.
Execute Instructions on CPU Datapath
Execute Instructions on CPU Datapath
  • 2020.07.04
  • www.youtube.com
This video reviews how instructions are executed on a traditional CPU data path, which will be contrasted with the mapping to a customized FPGA design. Ackno...
 

EECE.6540 Гетерогенные вычисления (Массачусетский университет Лоуэлла)


37. Индивидуальный путь передачи данных на FPGA

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

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

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

EECE.6540 Гетерогенные вычисления (Массачусетский университет Лоуэлла)



38. OpenCL для FPGA и ядра параллельных данных

В видео показано, как OpenCL позволяет инженерам FPGA использовать ресурсы разработки программного обеспечения для увеличения числа разработчиков приложений FPGA за счет использования ресурсов параллельных вычислений на FPGA. Модель программирования OpenCL позволяет задавать параллелизм с помощью функций параллельных данных, называемых ядрами, и каждое ядро использует идентификаторы, указанные в параметре «получить глобальный идентификатор», для выполнения параллельных вычислений над независимыми сегментами данных. Вводится понятие потоков и рабочих групп, где потоки получают доступ к различным частям набора данных, разделенных на рабочие группы, и только потоки в одной рабочей группе могут совместно использовать локальную память. С помощью этой модели программирования OpenCL обеспечивает эффективную параллельную обработку данных.

  • 00:00:00 В этом разделе спикер представляет OpenCL и его значение для разработки приложений на базе FPGA. Хотя программистов для FPGA меньше, чем для стандартных процессоров, OpenCL как язык программирования высокого уровня расширяет число разработчиков приложений для FPGA, позволяя инженерам FPGA использовать ресурсы разработки программного обеспечения, чтобы воспользоваться преимуществами параллельных вычислительных ресурсов на FPGA. OpenCL — это отраслевой стандарт для гетерогенных вычислений, который позволяет программистам использовать знакомые API-интерфейсы C или C++ для написания программ для выполнения сложных рабочих нагрузок с аппаратными ускорителями, такими как многоядерные процессоры, графические процессоры и FPGA. Большой идеей OpenCL является его модель выполнения, которая позволяет явно указать параллелизм.

  • 00:05:00 В этом разделе объясняется модель программирования OpenCL для FPGA и ядра параллельных данных. В видео описывается структура платформы OpenCL с хостом и ускорителем или устройством, работающими на отдельных аппаратных доменах. Хост подготавливает устройства и ядра и создает команды, необходимые для отправки на эти устройства. Код ускорителя написан на OpenCLC, и хост взаимодействует с ним через набор вызовов API OpenCL, что позволяет абстрагироваться от связи между процессором хоста и ядрами, выполняемыми на устройстве. Ядра OpenCL — это функции параллельных данных, используемые для определения нескольких параллельных потоков выполнения, каждый из которых опирается на идентификаторы, указанные в параметре «получить глобальный идентификатор». Эти идентификаторы определяют сегменты или разделы данных, над которыми должно работать ядро, позволяя выполнять параллельные вычисления над независимыми парами данных.

  • 00:10:00 В этом разделе представлена концепция потоков и рабочих групп, где потоки могут получать доступ к различным частям набора данных и делятся на рабочие группы. Только потоки в одной рабочей группе могут совместно использовать локальную память. Каждый поток имеет локальный и глобальный идентификатор, а глобальный идентификатор можно рассчитать, используя идентификатор группы и локальный размер. Эта система обеспечивает эффективную параллельную обработку данных.
OpenCL for FPGA and Data Parallel Kernel
OpenCL for FPGA and Data Parallel Kernel
  • 2020.04.19
  • www.youtube.com
A recap of OpenCL for FPGA, how kernels identify data partition
 

EECE.6540 Гетерогенные вычисления (Массачусетский университет Лоуэлла)



39. Программирование на стороне хоста OpenCL: контекст, очереди, объекты памяти и т. д.

В этом видеоруководстве рассматриваются различные концепции программирования на стороне хоста в OpenCL с акцентом на контекст, очереди и объекты памяти. Он охватывает два новых API в OpenCL, clCreateKernelsInProgram и clSetKernelArg, которые используются для создания объектов ядра и передачи аргументов функциям ядра. В учебнике также обсуждается использование API clCreateImage для создания объектов изображения и то, как пиксели изображения сохраняются в памяти с использованием порядка каналов и типа канала. В нем объясняется, как OpenCL обрабатывает 2D- и 3D-изображения, как разработчики могут собирать информацию об объектах памяти с помощью таких API, как clGetMemoryObjectInfo, и как выполнять операции с объектами памяти, такие как чтение и запись в буфер, отображение объектов памяти и копирование данных между объектами памяти.

  • 00:00:00 В этом разделе повторно рассматриваются концепции программирования OpenCL на стороне хоста. В этом разделе основное внимание уделяется контексту, очередям и объектам памяти. На физической платформе можно построить несколько контекстов, даже если она состоит из устройств разных производителей. Объекты памяти в глобальной памяти могут совместно использоваться несколькими очередями, но соответствующая синхронизация должна выполняться приложением на стороне хоста. В одном контексте может быть несколько контекстов и несколько очередей команд. Различные платформы OpenCL, предоставляемые поставщиками, не обязательно совместимы и, следовательно, не могут быть помещены в один и тот же контекст.

  • 00:05:00 В этом разделе видео обсуждаются два новых API в OpenCL. Первый API позволяет создавать ядра для каждой функции в программе OpenCL с помощью функции clCreateKernelsInProgram. Это создает массив объектов ядра, которые можно использовать для проверки имен функций ядра и другой связанной информации с помощью функции clGetKernelInfo. Второй API, clSetKernelArg, используется для инстанцирования аргументов ядра и принимает в качестве аргументов объект ядра и индекс аргумента. Далее в видео объясняется, как использовать эти API и как освобождать объекты ядра после использования.

  • 00:10:00 В этом разделе мы узнаем, как API может передавать значения аргументов функциям ядра. Мы можем передать примитивный тип данных в качестве указателя на функцию ядра, или мы можем передать указатель на объект памяти или образец объекта, содержащий сложные данные. Объекты изображения — это особый тип объекта памяти, используемый для хранения данных пикселей. Мы можем создавать объекты изображения, используя те же флаги конфигурации, что и объекты буфера, и с форматами, определенными из списка форматов изображений. API clCreateImage используется для создания объектов изображения, и его параметры аналогичны параметрам, используемым для создания объектов буфера. Третий аргумент идентифицирует свойства формата выделяемых данных изображения, а четвертый аргумент описывает тип и размеры изображения.

  • 00:15:00 В этом разделе представлено использование API clCreateImage() для определения того, как пиксели изображения хранятся в памяти. Формат объекта изображения предназначен для хранения изображения в памяти и состоит из двух факторов: порядка каналов и типа канала. Порядок каналов определяет, как информация о канале хранится для каждого пикселя, и это перечисляемый тип, который содержит основные цвета и альфа-информацию. Напротив, тип канала указывает, как каналы изображения кодируются в двоичном формате, и использует разные значения для определения представления информации о цвете. Уровни битов необходимы для указания того, сколько битов использовать для представления значения цвета в канале. Кроме того, демонстрируется структура памяти форматов изображения, так что для каждого пикселя последовательность RGBA хранится в памяти, используя один байт для кодирования информации о цвете для каждого цветового канала.

  • 00:20:00 В этом разделе видео обсуждается, как OpenCL обрабатывает 2D- и 3D-изображения, которые могут состоять из нескольких фрагментов, сложенных вместе в другом измерении. Дескриптор изображения CL используется для описания расположения объектов изображения и включает такие параметры, как ширина, высота и глубина изображения в пикселях, а также шаг строки развертки в байтах. Кроме того, API clCreateImage() используется для определения количества байтов, необходимых для описания изображения, что может потребовать корректировки заполнения и выравнивания в строках и срезах.

  • 00:25:00 В этом разделе спикер объясняет, как собирать информацию об изображениях и объектах памяти в OpenCL с помощью таких API, как clGetImageInfo и clGetMemoryObjectInfo. Эти API позволяют разработчикам получать информацию о таких вещах, как формат изображения, размер пикселя, ширина пикселя, высота пикселя, глубина и другие свойства объектов памяти. Кроме того, они могут использовать EnqueueReadBuffer/EnqueueWriteBuffer для чтения или записи данных в объекты буфера и EnqueueReadImage/EnqueueWriteImage для доступа к данным объекта изображения. Использование исходной точки, области, шага строки и шага среза также характерно для объектов изображения, которые организованы в виде строк, срезов и изображений. Разработчики могут использовать эти API-интерфейсы для указания точного местоположения региона, к которому они хотят получить доступ, или для выполнения операции копирования, а также для создания событий с использованием аргументов событий CL.

  • 00:30:00 В этом разделе в видео объясняются две операции с объектами памяти в OpenCL: чтение и запись буфера записи и сопоставление объектов памяти. При записи буфера чтения и записи пользователь указывает источник и информацию о размере, что позволяет извлекать или записывать данные в определенных точках. Сопоставление объектов памяти позволяет отображать объект памяти на устройстве в область памяти на хосте. После сопоставления объекты памяти могут быть прочитаны и изменены на стороне хоста с помощью указателей, полученных через API сопоставления памяти. В видео также рассматривается список операций с объектами памяти, доступных в OpenCL, для копирования данных между объектами памяти, упрощения программирования на стороне хоста и повышения производительности операций чтения и записи.

  • 00:35:00 В этом разделе спикер обсуждает различные объекты памяти в OpenCL и то, как их можно использовать для копирования данных из одного места в другое. Функции копирования включают буфер копирования, копирование изображения, прямоугольный буфер копирования и т. д. Докладчик демонстрирует систему «хост-устройство» и демонстрирует, как копировать данные из одного буфера в другой, используя функцию CL в буфере копирования очереди. Они объясняют, как сопоставить буфер с областью памяти с помощью буфера карты cl enqueu, а затем использовать копирование памяти, чтобы скопировать сопоставленную область в себя.
OpenCL Host Side Programming: Context, queues, memory objects, etc.
OpenCL Host Side Programming: Context, queues, memory objects, etc.
  • 2020.03.27
  • www.youtube.com
OpenCL Host Side Programming: Context, queues, memory objects, etc.
 

EECE.6540 Гетерогенные вычисления (Массачусетский университет Лоуэлла)



40. Процесс проектирования HDL для FPGA

В этом видеоролике объясняется процесс разработки программируемых вентильных матриц (ПЛИС) с использованием программного обеспечения для проектирования Quartus.

Объяснены методология проектирования и программные средства для разработки ПЛИС. Типичный процесс разработки программируемой логики начинается со спецификации проекта, переходит к кодированию RTL, затем к функциональному моделированию RTL, за которым следует синтез для преобразования проекта в примитивы, специфичные для устройства. Затем инженеры сопоставляют эти примитивы с определенными местами внутри конкретной FPGA и проверяют характеристики производительности с помощью временного анализа. Наконец, проект загружается в карту FPGA, и инструменты отладки могут быть использованы для его тестирования на оборудовании. Для Intel FPGA программное обеспечение для проектирования Quartus используется для выполнения процесса проектирования, начиная с описания системы и переходя к логическому синтезу, размещению и маршрутизации, временному анализу и анализу мощности, а также к программированию проекта в реальных FPGA.

HDL Design Flow for FPGA
HDL Design Flow for FPGA
  • 2020.04.18
  • www.youtube.com
(Intel) FPGA Design Flow using HDL
 

EECE.6540 Гетерогенные вычисления (Массачусетский университет Лоуэлла)



41. Типы данных OpenCL и память устройства

В видео обсуждаются типы данных OpenCL и память устройства. Он охватывает логические, целочисленные типы и типы с плавающей запятой и объясняет конкретные типы данных, используемые для работы с адресами памяти, такие как int-ptr, uint-ptr и ptrdiff-t. В нем также объясняются типы векторных данных, которые представляют собой массивы, содержащие несколько элементов одного типа, которые позволяют применять операторы к каждому элементу одновременно, и как их использовать. В видео представлены различные примеры того, как инициализировать элементы в векторе и обращаться к ним, в том числе с использованием буквенных и числовых индексов, высокого-нижнего и четного-нечетного. Он также объясняет выравнивание памяти и как использовать заданный аргумент ядра и частные аргументы ядра.

  • 00:00:00 В этом разделе видео представлен обзор типов данных, которые можно использовать в программировании ядра OpenCL, включая логические типы, целочисленные типы и типы с плавающей запятой. Определенные типы данных, такие как int-ptr, uint-ptr и ptrdiff-t, используются для работы с адресами памяти. В видео отмечается, что тип double поддерживается только в том случае, если целевое устройство поддерживает расширение CL Cronus 14-point-64 CLCronus FP 64. Разработчики могут проверить это расширение, прежде чем использовать тип double в своих программах ядра OpenCL. В видео также объясняется, как включить расширение типа double и использовать его в программе ядра.

  • 00:05:00 В этом разделе видео обсуждаются типы данных OpenCL и память устройства. Стандарт OpenCL не требует порядка следования байтов для типов данных. Little-endian и big-endian — это два необязательных типа endian, которые зависят от того, как архитектура компьютера определяет, как перемножаемые переменные будут храниться в памяти. Порядок следования байтов устройства можно узнать, используя тип данных CR get device info vector. Кроме того, векторные типы данных были введены в виде массивов, содержащих несколько элементов одного типа, имеющих фиксированную длину и позволяющих операторам применяться к каждому элементу одновременно. Преимущества использования векторных типов данных заключаются в том, что это быстрее и проще, чем использование массивов. В видео объясняется, как использовать векторные типы данных для поэлементного сложения нескольких массивов.

  • 00:10:00 В этом разделе мы узнаем о различных векторных типах, которые можно использовать в OpenCL, которые очень похожи на скалярные типы. Однако векторам требуется число в конце, чтобы указать, насколько велик вектор и какой тип элементов он содержит. OpenCL также имеет два специальных типа данных, двойной и половинный тип данных, которые могут поддерживаться или не поддерживаться устройством. Чтобы узнать предпочтительный размер вектора для различных типов, OpenCL предоставляет API, который можно использовать для запроса предпочтительной ширины вектора устройства. Основываясь на этом, мы можем установить параметры для построения нашей программы, такие как определение вектора с плавающей запятой для предпочтительного размера 128 или определение 8 с плавающей запятой, если предпочтительный размер вектора равен 256. Векторы могут быть инициализированы путем присвоения начальных значений в пределах круглые скобки. Мы можем даже инициализировать вектор, используя меньшие векторы, например, если у нас есть два вектора размера два, A и B, оба инициализированы скалярными значениями.

  • 00:15:00 В этом разделе спикер объясняет, как инициализировать и получать доступ к элементам или компонентам в векторе OpenCL. Пользователи могут инициализировать вектор, используя меньшие векторы, комбинацию скаляров и меньших коэффициентов или напрямую присваивая значения элементам вектора. Приведены примеры, показывающие, как использовать числовую индексацию, буквенную индексацию и четность-нечетность для доступа к элементам вектора. Различные примеры демонстрируют, как извлекать подмножества элементов из вектора и назначать эти элементы другим переменным.

  • 00:20:00 В этом разделе докладчик обсуждает различные методы индексации и изменения элементов вектора, в том числе использование числовых индексов, букв (таких как X, Y, Z и W) для представления различных размеров вектора и комбинаций буквенных и числовых индексов. Они также поясняют, как использовать функции «больше-меньше» и «чет-нечет» для выбора подмножества компонентов вектора на основе их положения в векторе. Эти методы индексации и модификации могут быть полезны для работы с векторами различной длины и размеров.

  • 00:25:00 В этом разделе мы узнаем о различных методах доступа к элементам вектора и их модификации, таких как четная индексация по принципу «высокий-низкий», которая позволяет нам получить либо старшую, либо младшую половину элементов в векторе, или даже -индексированные элементы. Мы также исследуем, как векторы хранятся в устройстве с прямым порядком байтов, где младший значащий байт целого числа хранится в более низком адресе, чем самый значащий байт. Это означает, что в векторе целых чисел без знака четыре байта каждого 32-битного целочисленного значения будут храниться в порядке от младшего к старшему значащему байту, при этом каждый полный элемент вектора будет занимать 16 байтов.

  • 00:30:00 В этом разделе докладчик обсуждает, как типы данных OpenCL и память устройства хранятся в устройствах с обратным и прямым порядком байтов. Они показывают, как четырехэлементный вектор целочисленного типа без знака хранится в памяти на обоих типах устройств, отмечая, что порядок байтов отличается из-за того, как устройства с прямым порядком байтов и прямым порядком байтов хранят наименее значащие и наиболее значащие байт. Докладчик также демонстрирует функцию ядра под названием «векторные байты», которая извлекает отдельные байты из этой памяти с помощью указателей.

  • 00:35:00 В этом разделе обсуждается концепция выравнивания памяти в типах данных OpenCL. Объясняется, что память обычно выравнивается по 32-битным структурам, таким как целые числа и числа с плавающей запятой, которые всегда хранятся по адресам памяти, кратным четырем. Также отмечается, что 64-битные структуры, такие как long и double, хранятся по адресам, кратным восьми, и наименьшая степень двойки, превышающая или равная размеру данных, задает выравнивание структуры данных в памяти. Кроме того, обсуждается процесс инициализации локальных и частных аргументов ядра в OpenCL и объясняется, что аргументы ядра в локальных и частных пространствах можно настроить с помощью SetKernelArg, но значение последнего параметра нельзя установить, если спецификатор является локальным. Кроме того, отмечается, что частные аргументы ядра должны быть простыми примитивами, такими как целые числа и числа с плавающей запятой.

  • 00:40:00 В этом разделе видео обсуждается, как использовать набор аргументов ядра и частные аргументы ядра в вашей программе OpenCL. При использовании заданного аргумента ядра первым аргументом должен быть индекс целочисленного размера аргумента, за которым следует указатель на переменную. Частные аргументы ядра также могут быть векторами, такими как массив чисел с плавающей запятой четыре, которые могут использоваться только в функциях ядра и передаваться с использованием аргумента ядра set.
OpenCL data types and device memory
OpenCL data types and device memory
  • 2020.03.31
  • www.youtube.com
Data types specific to OpenCL kernel functions and their layout in device memory.
 

EECE.6540 Гетерогенные вычисления (Массачусетский университет Лоуэлла)



42. Векторные реляционные операции OpenCL

В видео обсуждается программирование ядра OpenCL, его операторы и встроенные функции. Основное внимание уделяется операторам отношения и тому, как они работают со скалярными и векторными значениями. Представлен пример функции ядра «op test», которая выполняет поэлементную операцию И между константой и частным вектором. В видео объясняется, как реализовать вектор с реляционными операциями в OpenCL, сравнивая определенные элементы вектора со скаляром с помощью логических операций. Результирующий вектор можно использовать в цикле while для создания конечного выходного вектора, который назначается выходному объекту памяти.

  • 00:00:00 В этом разделе видео знакомит с программированием ядра OpenCL и обсуждает операторы и встроенные функции, унаследованные языком от других языков высокого уровня. Представленные операторы включают арифметику, сравнение и логику, побитовый и тернарный выбор. В частности, в этом разделе рассматриваются операторы отношения и объясняется, как они работают как со скалярными, так и с векторными значениями. Сегмент также предоставляет пример функции ядра под названием «op test», которая использует оператор отношения для выполнения поэлементной операции И между постоянным вектором и частным вектором, инициализированным начальными значениями.

  • 00:05:00 В этом разделе спикер объясняет, как можно реализовать вектор с реляционными операциями в OpenCL. На примере сравнения конкретных элементов вектора со скалярным значением с помощью логических операций докладчик показывает, как можно создать результирующий вектор со значениями true и false, представленными как -1 и 0 соответственно. Результирующий вектор затем можно использовать в цикле while, где отдельные элементы подвергаются дальнейшим логическим операциям для создания окончательного выходного вектора, который назначается выходному объекту памяти.
OpenCL vector relational operations
OpenCL vector relational operations
  • 2020.04.03
  • www.youtube.com
vector relational operations
 

EECE.6540 Гетерогенные вычисления (Массачусетский университет Лоуэлла)



43. Встроенные функции OpenCL: vloadn, выберите

Видео охватывает две ключевые встроенные функции OpenCL: vloadn и select. Vloadn позволяет инициализировать пакеты значениями из скалярного массива и принимает два аргумента: смещение и указатель на скалярный массив. Select, с другой стороны, позволяет вам выбирать определенные элементы из двух пакетов и использовать их для создания нового вектора. Он может содержать целочисленные значения со знаком или без знака, и имеет значение только старший бит в элементах маски. В учебнике показано, как эти функции работают на практике.

  • 00:00:00 В этом разделе мы узнаем о Vloadn, встроенной функции, используемой для инициализации пакетов с использованием значений из скалярного массива. Vloadn принимает два аргумента: смещение и указатель на скалярный массив. Смещение определяет, какие элементы массива помещаются в пакет, заданный с точки зрения размера вектора. Кроме того, мы узнаем о функции Select, которую можно использовать для выбора определенных элементов из двух пакетов и использования их для построения нового вектора. Он может содержать целочисленные значения со знаком или без знака, и имеет значение только старший бит в элементах маски. Старшие биты компонента маски в Select определяют, какой пакет использовать для соответствующего элемента в выходном векторе.

  • 00:05:00 В этом разделе учебника обсуждаются две встроенные функции OpenCL: vloadn и select. Vloadn используется для загрузки элементов из указанного вектора в новый вектор, а select используется для выбора элементов из первого или второго ввода на основе маски. Учебник предлагает примеры того, как эти функции работают на практике, в том числе, как vloadn выбирает значения из первого входного вектора на основе маски и как работает select для выбора битов из первого или второго входных векторов.
 

EECE.6540 Гетерогенные вычисления (Массачусетский университет Лоуэлла)



44. Введение в DPC++

В этом видео представлен DPC++, язык высокого уровня для параллельного программирования данных, который переносит сложные вычисления на ускорители, такие как FPGA и GPU, и является частью платформы OneAPI. DPC++ направлен на ускорение рабочих нагрузок, связанных с параллельными данными, с помощью современного C++ и оптимизации производительности, ориентированной на архитектуру. Лектор предоставляет простой пример DPC++, демонстрирующий, как объявить переменные управления данными и выполнить функцию ядра на устройстве с помощью команды и средства доступа. В видео также объясняется, как лямбда-функция может принимать аргументы и ссылки от переменных, объявленных вне ее.

  • 00:00:00 В этом разделе лектор знакомит с программированием DPC++, языком высокого уровня для параллельного программирования данных, который переносит сложные вычисления на ускорители, такие как FPGA и GPU. DPC++ использует современный C++ и направлен на ускорение параллельной обработки данных за счет анализа алгоритмов, декомпозиции задач или данных и использования оптимизации производительности, ориентированной на архитектуру. DPC++ является частью платформы OneAPI, и его цель — обеспечить возможность программирования на одном языке, который можно выполнять на любых ЦП, ПЛИС или графических процессорах. Затем лектор приводит простой пример DPC++, в котором объявляются переменные, буфер и очередь устройств для управления данными.

  • 00:05:00 В этом разделе докладчик представляет пример программы DPC++, которая создает команду и лямбда-функцию для определения функции ядра, которая будет выполняться на устройстве. Программа использует метод доступа, чтобы связать буфер с командой, и другой метод доступа, чтобы получить доступ к результату. Наконец, программа включает в себя цикл for для использования средства доступа к результату для доступа к содержимому в буфере и его вывода на печать. У лямбда-функции могут быть разные способы передачи аргументов в функцию, например, передача ссылок на переменные, объявленные вне функции.
Intro to DPC++
Intro to DPC++
  • 2021.04.07
  • www.youtube.com
This videos give a brief introduction to DPC++ and go through a simple DPC++ example source code.
 

EECE.6540 Гетерогенные вычисления (Массачусетский университет Лоуэлла)



45. Как мыслить параллельно?

В видео рассказывается о параллельном программировании на примере умножения матриц. Это подчеркивает параллелизм в этом вычислении, когда несколько строк и столбцов могут быть вычислены независимо. Реализация вычисления одного элемента в матрице C показана с использованием функции ядра, которая позволяет выполнять параллельные вычисления. Подробно объясняется использование методов доступа, диапазона и параллельных функций ядра. Обсуждаются шаги, связанные с передачей значения диапазона в функцию ядра. Также демонстрируется демонстрация матричного умножения с использованием облака разработки Intel FPGA.

  • 00:00:00 В этом разделе видео представляет умножение матриц как часто используемый пример для обучения параллельному программированию. В видео объясняется, что умножение матриц включает в себя взятие строк из одной матрицы и столбцов из другой для выполнения поэлементного умножения и накопления для получения результирующей матрицы. Видео объясняет, что в этом вычислении много параллелизма, так как разные строки и столбцы могут вычисляться независимо друг от друга. Показана простая реализация матричного умножения с использованием обычного языка C или C++ с вложенными циклами for, выполняющими поэлементное умножение и накопление.

  • 00:05:00 В этом разделе мы узнаем о реализации вычисления одного элемента в матрице C, которая реализована как одна функция ядра, позволяющая выполнять параллельные вычисления. Ключевым моментом является то, что для каждой отдельной строки и столбца вычисления одинаковы, с той лишь разницей, что это номера строк и столбцов. Аксессоры помогают получить доступ к буферам в ядрах с доступом только для чтения для матриц A и B и доступом для записи для матрицы C. Диапазон используется в качестве абстракции для объявления нескольких измерений, а H.parallel4 помогает определить параллельную функцию ядра. . Функция ядра включает лямбда-функцию, аргументом которой является переменная для перебора всех значений в обоих измерениях.

  • 00:10:00 В этом разделе спикер объясняет шаги, связанные с передачей значения диапазона в функцию ядра, которая является ламинарной функцией. Они обсуждают два измерения переменной и то, как она идентифицирует каждую переменную. Докладчик рассказывает, как работает лямбда-функция, и показывает, как размер задачи определяется количеством строк и столбцов, на которых мы выполняем функции ядра. Они используют пример матричного умножения, традиционную нотацию C plus plus, а также поэлементное умножение и накопление, выполняемое в самом внутреннем цикле for. Наконец, они демонстрируют быструю демонстрацию умножения матриц с использованием облака разработки Intel FPGA.
How to Think In Parallel ?
How to Think In Parallel ?
  • 2021.04.07
  • www.youtube.com
This video use matrix multiplication example to introduce how to think in parallel with design data parallel algorithms.