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

 

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



16. Пример OpenCL: поворот изображения

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

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

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

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

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

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



17. Демонстрация поворота изображения в примере OpenCL

Учебное пособие «Пример вращения изображения OpenCL» охватывает исходный код демонстрации, который включает в себя различные папки, содержащие код C и файлы изображений, которые будет обрабатывать программа. Видео демонстрирует создание буферов для входных и выходных изображений, копирование исходного изображения в буфер устройства, настройку аргументов ядра, выполнение ядра с глобальным размером, определяемым как все изображение, и чтение выходных данных обратно на хост. Функция ядра принимает параметры поворота для вычисления новых координат каждого пикселя и копирования информации о пикселях в новое место с проверкой границ. Программа также включает в себя функцию сохранения повернутого изображения в формате BMP и освобождения всех ресурсов после завершения. Демо успешно считывает и вычисляет пиксели исходного изображения для создания повернутого изображения.

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

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

  • 00:10:00 В этом разделе спикер демонстрирует демонстрацию поворота изображения OpenCL в качестве примера с использованием платформы Avatar FPGA, которая берет исходное изображение кота и поворачивает его по часовой стрелке на 45 градусов, создавая новое изображение того же размера, которое сохраняется. с новым именем в папке ротации изображений. Демонстрация показывает, что он успешно считывает и вычисляет пиксели исходного изображения для создания повернутого изображения.
OpenCL Example Image Rotation Demo
OpenCL Example Image Rotation Demo
  • 2020.06.05
  • www.youtube.com
This video walks through the code of Image Rotation and demonstrates the results.
 

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



18. Пример OpenCL: свертка изображений

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

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

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

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

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

  • 00:20:00 В этом разделе видеоруководство демонстрирует, как обновить значения пикселей в свертке изображения OpenCL с помощью объекта изображения. После успешного запуска ядра следующим шагом будет использование CL в Q read image для обратного чтения образа. Эта функция принимает команду Q в качестве первого аргумента, объект выходного изображения и истинное значение, указывающее, что чтение должно быть заблокировано до завершения. Предоставляются параметры источника и региона, используемые для создания объекта изображения, а также буфер на стороне хоста, в котором хранятся данные изображения.
OpenCL Example: Image Convolution
OpenCL Example: Image Convolution
  • 2020.06.07
  • www.youtube.com
This video introduces the principles of image convolution and how to implement it in OpenCL.
 

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



19. Демонстрация: пример OpenCL — свертка изображений

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

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

  • 00:05:00 В этом разделе ведущий демонстрирует пример свертки изображений с помощью OpenCL. В презентации показаны необходимые шаги для выполнения фильтра на хосте, включая запуск ядра, сохранение данных пикселей в файл и создание необходимых заголовков для формата BMP, а также проверку результатов путем сравнения значений в двух буферах. Цель этого упражнения — создать отфильтрованное изображение, которое должно соответствовать идеальному результату с небольшим отклонением из-за плавающих вычислений. В целом, в презентации подчеркивается, как компилировать, запускать и проверять вывод функции ядра OpenCL.
Demo: OpenCL Example - Image Convolution
Demo: OpenCL Example - Image Convolution
  • 2020.06.07
  • www.youtube.com
This demonstrates the example of Image Convolution.
 

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



20. Лекция 5 Модель параллелизма OpenCL

Эта лекция посвящена среде выполнения OpenCL и модели параллелизма, включая несколько очередей команд, модель очередей, рабочие элементы ядра OpenCL и рабочие группы. Точки синхронизации используются для управления выполнением команд, а события ожидания используются для синхронизации команд в очереди команд на стороне устройства. В лекции подчеркивается важность асинхронных операций в OpenCL и объясняется использование событий для указания зависимостей между командами. Лектор также обсуждает использование функций обратного вызова для завершения события и подчеркивает важность профилирования для настройки производительности. Кроме того, в лекции рассматривается модель параллелизма OpenCL для нескольких устройств в системе, включая модели конвейера и параллельного выполнения. Наконец, лектор демонстрирует реализацию модели выполнения с использованием событий ядра, что позволяет параллельно выполнять различные ядра.

Модель параллелизма OpenCL позволяет выполнять несколько рабочих элементов независимо для повышения производительности, используя рабочие группы с локальной синхронизацией для достижения параллелизма в выполнении, но слишком большое количество рабочих элементов может вызвать конкуренцию за ресурсы. Рабочие элементы отвечают за ведение своих собственных счетчиков программ, и понимание масштабов и размеров проблем важно для разработки рабочих элементов, использующих преимущества элементов обработки графического процессора. OpenCL использует барьеры рабочих групп для расширенной синхронизации между рабочими элементами, но никакие механизмы не поддерживают синхронизацию между рабочими элементами в разных рабочих группах одного и того же ядра. Для синхронизации рабочих элементов внутри одной рабочей группы используется барьерный API, а для синхронизации в глобальном масштабе используются события и события ожидания. Функция ядра использует указатели на объекты памяти в глобальной и локальной памяти, а локальная память, доступная для всех обрабатывающих элементов, может использоваться для обмена данными внутри рабочей группы. В лекции также рассматриваются нативные ядра, которые позволяют использовать функции C в качестве ядер на устройстве, не полагаясь на компиляторы OpenCL, передачу объектов памяти OpenCL в пользовательскую функцию с использованием встроенного в очередь нативного API ядра, а также встроенные функции ядра, такие как расширение оценки движения для OpenCL, используемое для обработки изображений для оценки движения между соседними кадрами в видео.

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

  • 00:05:00 В этом разделе лекция посвящена блокирующему аргументу чтения в QAPI и тому, как его можно использовать для настройки точки синхронизации. Установив для блокировки чтения значение true, этот API можно превратить в блокирующую операцию чтения, которая остановит другие операции с памятью до завершения операции чтения. В лекции также объясняется использование событий в QAPI для указания зависимостей между командами, что может быть полезно в сложных операциях, включающих несколько команд, передачу данных и вычисления. Кроме того, события могут предоставить больше информации о команде, чем сама команда, поскольку команды, отправленные с использованием Co в очереди, обрабатываются асинхронно и не могут возвращать условия ошибки или данные профилирования. Однако при создании события, связанного с командой, информацию о команде можно запросить с помощью API получения информации о событии CL.

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

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

  • 00:20:00 В этом разделе спикер обсуждает настройку функций обратного вызова для обработки завершения события. Установка функции обратного вызова сразу после объявления события завершения не является допустимым местом, поскольку с событием еще не связана команда. Действительное событие создается только после того, как с ним связана команда, например, когда ядро добавляется в очередь команд. Функции обратного вызова должны быть потокобезопасными, быстро выполняться и не вызывать дорогостоящие системные процедуры. Также важно включить профилирование, когда речь идет о настройке производительности, так как это помогает определить статус и время выполнения команды. Флаг включения профилирования clq используется для включения профилирования.

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

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

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

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

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

  • 00:50:00 В этом разделе мы узнаем о моделях конвейера и параллельного выполнения в OpenCL. В конвейерной модели данные распределяются между двумя ядрами, при этом ядро 0 запускается первым, а ядро 1 ожидает его завершения, прежде чем перейти к следующему вычислению. Мы видим реализацию этой модели с использованием событий и вызовов API. Напротив, параллельная модель используется, когда между задачами нет зависимостей, и ядра могут работать одновременно на разных устройствах. В приведенном примере есть три устройства: устройства GPU 0 и 1 и устройство CPU 2 с отдельными очередями команд для каждого. Ядро 0 и ядро 1 запускаются отдельно для параллельной работы, и после завершения может запускаться ядро ЦП 2.

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

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

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

  • 01:10:00 В этом разделе лектор объясняет функцию ядра, которая вычисляет адрес для использования с методом get global ID, чтобы получить номер ID в глобальном пространстве для вычислений. Затем функция ядра использует адрес как индекс массива, умножает результат на два и присваивает произведение другому буферу. Далее лектор объясняет, как глобальный идентификатор в нулевом измерении используется для определения элемента для вычисления, и как глобальный идентификатор в измерении один помогает определить, сколько строк уже обработано. Идея состоит в том, чтобы гарантировать, что каждый рабочий элемент выполняет вычисления для уникального элемента и что нет повторения вычислений для любого элемента, тем самым экономя циклы GPU или CPU.

  • 01:15:00 В этом разделе видео обсуждается, как работает синхронизация OpenCL и почему может быть сложно гарантировать аппаратное упорядочивание. OpenCL — это кроссплатформенная платформа API, которая не знает, где будет выполняться программа, поэтому она не может гарантировать аппаратное упорядочивание. OpenCL работает на устройствах, которые могут поддерживать многопоточность, но на таких устройствах нет отдельной операционной системы. Это означает, что нет мастера или ядра ОС для удаления потоков из очереди выполнения. В результате существует риск взаимоблокировки при использовании семафоров или подобных механизмов. Для выполнения расширенной синхронизации между рабочими элементами OpenCL использует барьер рабочей группы. Однако в OpenCL нет механизмов для поддержки синхронизации между рабочими элементами в разных рабочих группах одного и того же исполнения ядра. Для поддержки совместного использования данных внутри рабочей группы или на одном вычислении может использоваться локальная память, доступная для всех элементов обработки.

  • 01:20:00 В этом разделе мы узнаем об использовании операции барьера для синхронизации рабочих элементов в одной рабочей группе в OpenCL. API-интерфейс барьера используется в качестве точки синхронизации, и рабочие элементы не могут продолжать работу за барьером до тех пор, пока все другие рабочие элементы в рабочей группе также не достигнут барьера. Это гарантирует, что все рабочие элементы в группе будут иметь одинаковые данные перед продолжением. Используя строку глобальной синхронизации в OpenCL, можно использовать событие и событие ожидания для синхронизации в глобальном масштабе, но внутри рабочей группы на уровне рабочих элементов необходимо использовать операцию барьера для выполнения синхронизации.

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

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

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

  • 01:40:00 В этом разделе мы узнаем о встроенных функциях ядра, таких как собственное расширение оценки движения для OpenCL, которое используется для обработки изображений для оценки движения между соседними кадрами в видео. Это расширение обеспечивает аппаратное ускорение или встроенные функции встроенного ПО, и его можно изучить на веб-сайте OpenCL.
Lecture 5 OpenCL Concurrency Model
Lecture 5 OpenCL Concurrency Model
  • 2018.10.13
  • www.youtube.com
OpenCL Runtime and Concurrency Model (please refer to Chapter 5 of textbook)
 

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



21. Концепция уменьшения карты

В этом видео объясняется концепция MapReduce, которая включает в себя разбиение больших проблем на более мелкие подзадачи с использованием фазы сопоставления, за которой следует фаза сокращения. Этот подход используется Google для обработки огромных объемов данных на своих компьютерах в центрах обработки данных. Видео представляет собой пример того, как процессоры работают независимо, назначая процессорам некоторые данные для обработки, которые по завершении создают пары ключ-значение. Затем пары ключ-значение обрабатываются группой различных процессоров, чтобы получить окончательный результат на этапе сокращения. Такой подход позволяет эффективно обрабатывать большие наборы данных, распределяя рабочую нагрузку между несколькими машинами.

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

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

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

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

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



22. Пример сокращения карты: WordCount и веб-ссылка

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

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

  • 00:05:00 В этом разделе спикер объясняет, как можно использовать MapReduce для анализа большого количества URL-адресов веб-страниц и их ссылок, чтобы построить график, показывающий взаимосвязь между ними. Процесс сопоставления включает в себя группировку кортежей в более мелкие фрагменты и назначение их процессорам сопоставления для создания пары ключ-значение с URL-адресом в качестве ключа и списком веб-страниц в качестве значений, которые будут связаны с ключом. Затем на этапе сокращения несколько ключей могут обрабатываться разными процессорами, и пара ключ-значение используется для построения окончательной карты и отображения взаимосвязи между веб-страницами.
Map Reduce Example: WordCount and Weblink
Map Reduce Example: WordCount and Weblink
  • 2020.06.14
  • www.youtube.com
This video introduce MapReduce concept with two examples: word count and web link relationship.
 

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



23. Особенности MapReduce на устройстве OpenCL

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

  • 00:00:00 В этом разделе основное внимание уделяется тому, чем MapReduce на устройствах OpenCL отличается от традиционных сред ЦП. Основное отличие заключается в структуре памяти, которая является иерархической и состоит из частной, локальной и глобальной памяти, каждая из которых имеет разные размеры и видимость данных. Частная память видна только самому рабочему элементу, а локальная память видна всем рабочим элементам в вычислительной единице, но не между единицами. С другой стороны, глобальная память видна всем рабочим элементам. Использование большого количества элементов обработки на устройствах OpenCL дает возможность, но необходимо учитывать структуру памяти.

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

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

  • 00:15:00 В этом разделе спикер обсуждает пять шагов для MapReduce на устройствах OpenCL. На первом этапе группа рабочих элементов выполняет процесс сопоставления и часть этапа локального сокращения. Второй шаг включает в себя выполнение локального барьера для синхронизации рабочих элементов перед выполнением сокращений. На третьем этапе рабочий элемент с локальным идентификатором с нулевым идентификатором в каждой группе выполняет предварительную обработку пар ключ-значение, созданных другими рабочими элементами. Четвертый шаг включает в себя выполнение глобального барьера для предотвращения дальнейшего выполнения, пока все рабочие не закончат работу. Наконец, пятый шаг включает в себя объединение результатов каждой рабочей группы для получения окончательного результата, гарантируя, что все рабочие элементы будут завершены до того, как это будет сделано.
Considerations of MapReduce on OpenCL device
Considerations of MapReduce on OpenCL device
  • 2020.06.14
  • www.youtube.com
This video introduces specifics of implementing MapReduce on OpenCL devices.
 

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



24. Пример MapReduce: поиск строк с демонстрацией

Видео демонстрирует различные аспекты программирования OpenCL и MapReduce, уделяя особое внимание реализации поиска по строкам. Докладчик объясняет, как объявлять и выделять память с помощью локального квалификатора, и указывает, что динамическое выделение памяти не разрешено в функции ядра. Они также представляют векторные типы данных и демонстрируют, как они могут упростить поэлементное сложение и доступ к памяти. Основное внимание уделяется реализации поиска строк с помощью MapReduce, где вводимый текст делится на рабочие элементы и назначается функции карты для поиска ключевого слова. Каждый рабочий элемент выполняет этот процесс, сравнивая фрагменты текста с вектором шаблона. Локальные результаты получаются путем атомарного приращения для предотвращения коллизий, а окончательный результат получается путем агрегирования результатов каждого рабочего элемента. Докладчик также дает подробное объяснение функции ядра, включая необходимые аргументы и то, как она инициализируется.

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

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

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

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

  • 00:20:00 В этом разделе спикер описывает реализацию MapReduce для выполнения поиска строки с помощью демонстрации. Входные данные делятся на рабочие элементы, и каждому рабочему элементу назначается функция карты для поиска ключевого слова в фрагменте текста. Докладчик демонстрирует, как куски текста загружаются в память и перемещается окно символов для поиска ключевого слова. Для сравнения используется вектор, загруженный 16 символами, а результат сохраняется в другом векторе для фрагмента. Этот процесс повторяется для каждого рабочего элемента, и окончательный результат получается путем агрегирования результатов каждого рабочего элемента.

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

  • 00:30:00 В этом разделе спикер объясняет, как работает пример String Search MapReduce. Код состоит из нескольких рабочих групп, каждая из которых проверяет определенные ключевые слова в тексте, разделенном на блоки. Цель состоит в том, чтобы найти, существует ли какое-либо из ключевых слов в каждом блоке. Если результат истинен, комментарий увеличивается с использованием атомарного приращения для предотвращения коллизий. После проверки всех ключевых слов в блоке используется барьер, чтобы гарантировать, что любая операция, которая обращается к глобальной памяти, была завершена. Затем цикл сдвигает окно вправо для проверки следующего набора из 16 букв, и процесс повторяется для каждой рабочей группы. Наконец, локальный счетчик результатов добавляется к глобальному результату с помощью атомарного добавления для предотвращения коллизий.

  • 00:35:00 В этом разделе спикер объясняет реализацию примера MapReduce для поиска строк с демонстрацией. Объясняется функция ядра, где инициализируется локальная память, сбрасываются счетчики, и программа использует идентификатор папы для вычисления смещения и загрузки 16 байтов за раз в текстовый вектор. Затем функция сравнивает результаты и выполняет глобальное сокращение, используя функцию «в первую очередь» и «сокращение». Показан пример кода на GitHub, а выступающий описывает аргументы, такие как шаблоны, коэффициент текста, текстовый буфер, символ для элемента, общая длина исходного текста и размер изображения. Наконец, он говорит о том, как глобальный размер зависит от доступных ресурсов и формальной науки, вовлеченной в процесс поиска нужной строки.

  • 00:40:00 В этом разделе лектор объясняет пример использования MapReduce для поиска определенных слов в заданном текстовом файле. Цель состоит в том, чтобы подсчитать появление четырех определенных слов в текстовом файле. Лектор предлагает просмотреть исходный код и среду выполнения для лучшего понимания процесса.
 

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



25. Пример OpenCL: сортировка по основанию

В этом видео представлена концепция сортировки по основанию, которая включает в себя разделение более крупной задачи сортировки на более мелкие подмножества на основе числового представления, а не фактических значений сортируемых элементов. Докладчик демонстрирует на примере сортировки восьми чисел, отсортированных по младшей значащей цифре в шестнадцатеричном представлении. Функции OpenCL shuffle и shuffle2 используются для эффективной перестановки элементов в процессе сортировки. В видео также объясняется, как выполнить операцию перемешивания с помощью OpenCL и как использовать инструкции перемешивания в функции ядра для сортировки по основанию. Кроме того, в видео исследуется функция ядра под названием сортировка по основанию восемь, сортировка восемь, которая эффективно сортирует массивы в OpenCL, разбивая входной вектор на группы нулей и единиц на основе значений в его двоичных цифрах.

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

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

  • 00:10:00 В этом разделе объясняется использование функции shuffle и функции shuffle2 в OpenCL. Функция перемешивания создает выходной вектор, который сдвигает или перемешивает исходные значения из входных векторов на основе заданной маски для создания нового выходного вектора. Функция shuffle2 аналогична, но принимает два входных вектора вместо одного. Размер и тип данных маски должны соответствовать коэффициенту возврата, а тип данных должен быть целым числом без знака. Кроме того, возвращаемый фактор будет иметь тот же тип данных и количество компонентов, что и входной вектор, и только выбранное количество битов в компонентах вектора маски будет значимым. Значение K в shuffle2 зависит от количества компонентов во входном векторе.

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

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

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

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

  • 00:35:00 В этом разделе спикер объясняет, как работает сортировка по основанию, которая включает сортировку значений в наборе данных в соответствии с их соответствующей цифрой в каждой позиции. Процесс начинается с младшей значащей цифры и движется к старшей значащей цифре. Докладчик использует пример, чтобы показать, как значения, оканчивающиеся на единицы и нули, разделяются на разные массивы перед выполнением операции перемешивания для создания окончательного выходного вектора. Процесс повторяется для других цифр, а окончательный результат сохраняется в глобальном буфере.
OpenCL Example: Radix Sort
OpenCL Example: Radix Sort
  • 2020.03.26
  • www.youtube.com
OpenCL Example: Radix Sort using Shuffle Function