OpenCL en el trading - página 8

 

36. Ejecutar instrucciones en CPU Datapath



36. Ejecutar instrucciones en CPU Datapath

El video explica cómo se ejecutan los cálculos en una ruta de datos de la CPU usando un ejemplo de cómo realizar operaciones de acumulación. La ruta de datos incluye unidades de carga y almacenamiento para cargar y almacenar datos en la memoria usando direcciones y unidades funcionales como ALU para realizar operaciones. El video ilustra el proceso paso a paso, incluida la carga de datos de la memoria, la realización de operaciones y el almacenamiento de resultados en la memoria. El ponente también explica cómo se puede utilizar FPGA para implementar la misma función, aprovechando al máximo los recursos disponibles en el hardware.

  • 00:00:00 En esta sección, el video explica cómo se mapean los cálculos en un PGA utilizando un ejemplo de realización de operaciones de acumulación. Primero, el código de alto nivel se convierte en lenguaje ensamblador mediante instrucciones de la CPU y los valores intermedios se almacenan en registros. La CPU es una CPU de canalización con unidades funcionales en la ruta de datos, incluidas las unidades de carga y almacenamiento para cargar y almacenar datos en la memoria mediante direcciones. La ruta de datos está diseñada para ser lo suficientemente general como para ejecutar todo tipo de instrucciones dentro de un ancho de datos fijo y un número de operaciones, y se puede cargar un valor constante en un registro a través de la ALU. El video también proporciona un ejemplo de cómo se ejecutan seis instrucciones en la CPU, ilustrando el proceso paso a paso.

  • 00:05:00 En esta sección, el orador repasa varias instrucciones y explica cómo se ejecutan en una ruta de datos de la CPU, incluida la carga de datos de la memoria en archivos de registro, el uso de diferentes unidades funcionales en la ruta de datos para realizar operaciones como la multiplicación y la suma. y almacenar los resultados en la memoria. Luego, el orador continúa explicando cómo se puede usar FPGA para implementar la misma función de kernel desplegando el hardware de la CPU y usando los recursos exactos necesarios para la función, aprovechando al máximo los recursos disponibles en el hardware de 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...
 

37. Ruta de datos personalizada en FPGA


37. Ruta de datos personalizada en FPGA

El video explica el uso de un FPGA para implementar la función del kernel para mejorar el rendimiento al desenrollar el hardware de la CPU y personalizar la ruta de datos en el FPGA. Al eliminar unidades no utilizadas, cargar constantes y cables, y reprogramar algunas operaciones, las operaciones de carga se pueden realizar simultáneamente para aumentar el rendimiento. El diseño de rutas de datos personalizadas puede mejorar el rendimiento, reducir la latencia y el consumo de energía al seleccionar las operaciones y los datos necesarios para una función en particular. El video muestra un ejemplo de suma según la demanda en dos vectores, con el resultado almacenado en la memoria utilizando registros entre etapas para permitir una canalización eficiente y el lanzamiento de ocho elementos de trabajo para sumas consecutivas.

  • 00:00:00 En esta sección, se explica el concepto de usar FPGA para implementar la función del núcleo con un mejor rendimiento y utilización de recursos. La idea es desenrollar el hardware de la CPU y usar recursos de FPGA para crear el diseño que implemente la función requerida mientras usa los recursos que no se usan en cada paso de la ejecución. Al eliminar ciertas unidades no utilizadas, cargar constantes y cables y reprogramar algunas operaciones, las operaciones de carga se pueden realizar simultáneamente aumentando el rendimiento. La personalización de la ruta de datos en la FPGA puede lograr el mismo resultado utilizando recursos dedicados especializados.

  • 00:05:00 En esta sección, el orador analiza el diseño de una ruta de datos personalizada en FPGA mediante la selección de las operaciones y los datos necesarios para una función particular, el tamaño de la memoria y la configuración de una manera que podría mejorar el rendimiento, reducir la latencia y la potencia. consumo, utilizando una función kernel que realiza la suma según la demanda en dos vectores, con el resultado almacenado en la memoria. Al aprovechar los registros entre las etapas, la ruta de datos puede usar una canalización eficiente y lanzar ocho elementos de trabajo para adiciones consecutivas, lo que permite que cada ciclo procese diferentes subprocesos para evitar unidades inactivas.
Customized Datapath on FPGA
Customized Datapath on FPGA
  • 2020.07.04
  • www.youtube.com
This video explains how to map OpenCL program onto a customized design in FPGA.Acknowledgement: the slides are from Intel's "OpenCL for FPGA" tutorial at ISC...
 

38. OpenCL para FPGA y núcleo paralelo de datos



38. OpenCL para FPGA y núcleo paralelo de datos

El video explica cómo OpenCL permite a los ingenieros de FPGA utilizar recursos de ingeniería de software para expandir la cantidad de desarrolladores de aplicaciones de FPGA aprovechando los recursos de cómputo paralelo en FPGA. El modelo de programación de OpenCL permite la especificación del paralelismo mediante el uso de funciones paralelas de datos llamadas núcleos, y cada núcleo se basa en identificadores especificados por "obtener ID global" para realizar cálculos paralelos en segmentos de datos independientes. Se introduce el concepto de subprocesos y grupos de trabajo, donde los subprocesos acceden a diferentes partes del conjunto de datos, divididos en grupos de trabajo, y solo los subprocesos dentro del mismo grupo de trabajo pueden compartir la memoria local. Con este modelo de programación, OpenCL permite un procesamiento paralelo de datos eficiente.

  • 00:00:00 En esta sección, el orador presenta OpenCL y su importancia en el diseño de aplicaciones basadas en FPGA. Aunque hay menos programadores para FPGA que para CPU estándar, OpenCL, como lenguaje de programación de alto nivel, amplía el número de desarrolladores de aplicaciones de FPGA al permitir que los ingenieros de FPGA utilicen recursos de ingeniería de software para aprovechar los recursos informáticos paralelos de las FPGA. OpenCL es un estándar de la industria para computación heterogénea y permite a los programadores usar las API de C o C++ familiares para escribir programas para ejecutar cargas de trabajo complejas con aceleradores de hardware como procesadores multinúcleo, GPU y FPGA. La gran idea detrás de OpenCL es su modelo de ejecución que permite especificar explícitamente el paralelismo.

  • 00:05:00 En esta sección, se explica el modelo de programación de OpenCL para FPGA y núcleo paralelo de datos. El video describe la estructura de un marco OpenCL con un host y un acelerador o dispositivo que se ejecuta en dominios de hardware separados. El host prepara los dispositivos y núcleos y crea los comandos necesarios para enviarlos a estos dispositivos. El código del acelerador está escrito en OpenCLC y el host se comunica con él a través de un conjunto de llamadas a la API de OpenCL, lo que permite una abstracción de la comunicación entre un procesador host y los núcleos ejecutados en el dispositivo. Los núcleos de OpenCL son funciones paralelas de datos que se utilizan para definir varios subprocesos de ejecución paralelos, cada uno de los cuales se basa en identificadores especificados por "obtener ID global". Estos ID especifican los segmentos o particiones de datos en los que se supone que debe trabajar un kernel, lo que permite realizar cálculos paralelos en pares de datos independientes.

  • 00:10:00 En esta sección, se introduce el concepto de subprocesos y grupos de trabajo, donde los subprocesos pueden acceder a diferentes partes del conjunto de datos y se dividen en grupos de trabajo. Solo los subprocesos dentro del mismo grupo de trabajo pueden compartir la memoria local. Cada subproceso tiene una identificación local y global, y la identificación global se puede calcular usando la identificación del grupo y el tamaño local. Este sistema permite un procesamiento paralelo de datos eficiente.
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
 

39. Programación del lado del host OpenCL: contexto, colas, objetos de memoria, etc.



39. Programación del lado del host OpenCL: contexto, colas, objetos de memoria, etc.

Este video tutorial explora varios conceptos de programación del lado del host en OpenCL, con un enfoque en el contexto, las colas y los objetos de memoria. Cubre las dos nuevas API en OpenCL, clCreateKernelsInProgram y clSetKernelArg, que se utilizan para crear objetos del kernel y pasar argumentos a las funciones del kernel. El tutorial también analiza el uso de la API clCreateImage para crear objetos de imagen y cómo los píxeles de la imagen se almacenan en la memoria utilizando el orden y el tipo de canal. Explica cómo OpenCL maneja imágenes 2D y 3D, cómo los desarrolladores pueden recopilar información sobre objetos de memoria usando API como clGetMemoryObjectInfo y cómo realizar operaciones de objetos de memoria como lectura y escritura de memoria intermedia, asignación de objetos de memoria y copia de datos entre objetos de memoria.

  • 00:00:00 En esta sección, se revisan los conceptos de programación del lado del host de OpenCL. La sección se centra en el contexto, las colas y los objetos de memoria. Se pueden construir varios contextos en una plataforma física incluso si consta de dispositivos de diferentes proveedores. Los objetos de memoria en la memoria global pueden ser compartidos por varias colas, pero la aplicación debe realizar la sincronización adecuada en el lado del host. Es posible tener múltiples contextos y múltiples colas de comandos dentro de un contexto. Las diferentes plataformas OpenCL proporcionadas por los proveedores no son necesariamente compatibles y, por lo tanto, no se pueden ubicar en el mismo contexto.

  • 00:05:00 En esta sección, el video analiza dos nuevas API en OpenCL. La primera API permite la creación de núcleos para cada función en un programa OpenCL usando la función clCreateKernelsInProgram. Esto crea una matriz de objetos del núcleo que se pueden usar para verificar los nombres de las funciones del núcleo y otra información relacionada mediante la función clGetKernelInfo. La segunda API, clSetKernelArg, se usa para instanciar argumentos del núcleo y toma el objeto del núcleo y el índice del argumento como argumentos. El video continúa explicando cómo usar estas API y cómo liberar objetos del kernel después de su uso.

  • 00:10:00 En esta sección, aprendemos cómo la API puede pasar valores de argumento a las funciones del kernel. Podemos pasar un tipo de datos primitivo como puntero a la función del núcleo, o podemos pasar un puntero a un objeto de memoria o un objeto de muestra que contiene datos complejos. Los objetos de imagen son un tipo especial de objeto de memoria que se utiliza para almacenar datos de píxeles. Podemos crear objetos de imagen utilizando los mismos indicadores de configuración que los objetos de búfer y con formatos definidos a partir de una lista de formatos de imagen. La API clCreateImage se usa para crear objetos de imagen y sus parámetros son similares a los que se usan para crear objetos de búfer. El tercer argumento identifica las propiedades de formato de los datos de imagen que se asignarán, mientras que el cuarto argumento describe el tipo y las dimensiones de la imagen.

  • 00:15:00 En esta sección, se presenta el uso de la API clCreateImage() para identificar cómo se almacenan los píxeles de la imagen en la memoria. El formato de objeto de imagen está diseñado para almacenar una imagen en la memoria y consta de dos factores: el orden del canal y el tipo de canal. El orden de los canales identifica cómo se almacena la información del canal para cada píxel y es un tipo enumerado que contiene colores básicos e información alfa. Por el contrario, el tipo de canal especifica cómo se codifican los canales de imagen en binario y utiliza diferentes valores para determinar la representación de la información de color. Los niveles de bits son esenciales para especificar cuántos bits usar para representar el valor de color en el canal. Además, se demuestra el diseño de la memoria de los formatos de imagen, de modo que para cada píxel, la secuencia RGBA se almacena en la memoria, utilizando un byte para codificar la información de color para cada canal de color.

  • 00:20:00 En esta sección, el video analiza cómo OpenCL maneja imágenes 2D y 3D, que pueden consistir en múltiples cortes apilados en otra dimensión. El descriptor de imagen CL se utiliza para describir cómo se distribuyen los objetos de la imagen e incluye parámetros como el ancho, la altura y la profundidad de la imagen en píxeles, así como el paso de la línea de exploración en bytes. Además, la API clCreateImage() se usa para identificar la cantidad de bytes necesarios para describir la imagen, lo que puede requerir ajustes para el relleno y la alineación dentro de las filas y los sectores.

  • 00:25:00 En esta sección, el orador explica cómo recopilar información sobre objetos de imagen y memoria en OpenCL usando API como clGetImageInfo y clGetMemoryObjectInfo. Estas API permiten a los desarrolladores obtener información sobre cosas como el formato de la imagen, el tamaño de píxel, el ancho de píxel, la altura de píxel, la profundidad y otras propiedades de los objetos de memoria. Además, pueden usar EnqueueReadBuffer/EnqueueWriteBuffer para leer o escribir datos en objetos de búfer y EnqueueReadImage/EnqueueWriteImage para acceder a datos de objetos de imagen. El uso del origen, la región, el paso de fila y el paso de corte también son específicos de los objetos de imagen, que se organizan en términos de filas, cortes e imágenes. Los desarrolladores pueden usar estas API para especificar la ubicación exacta de una región a la que desean acceder o realizar una operación de copia, y para generar eventos usando argumentos de eventos CL.

  • 00:30:00 En esta sección, el video explica dos operaciones de objetos de memoria en OpenCL: lectura y escritura de grabación de búfer y mapeo de objetos de memoria. Con lectura y escritura de búfer rec, el usuario especifica el origen y la información de tamaño, lo que permite que los datos se recuperen o escriban en puntos específicos. La asignación de objetos de memoria permite la asignación de un objeto de memoria en un dispositivo a una región de memoria en el host. Una vez mapeados, los objetos de memoria se pueden leer y modificar en el lado del host utilizando punteros obtenidos a través de las API de mapeo de memoria. El video también repasa una lista de operaciones de objetos de memoria disponibles en OpenCL para copiar datos entre objetos de memoria, simplificar la programación en el lado del host y mejorar el rendimiento de las operaciones de lectura y escritura.

  • 00:35:00 En esta sección, el orador analiza los diversos objetos de memoria en OpenCL y cómo se pueden usar para copiar datos de una ubicación a otra. Las funciones de copia incluyen copia de búfer, copia de imagen, copia de búfer rectangular, etc. El orador muestra un sistema de dispositivo host y demuestra cómo copiar datos de un búfer a otro utilizando la función de búfer de copia CL en cola. Explican cómo mapear el búfer a un espacio de memoria usando cl enqueu map buffer y luego usar la copia de memoria para copiar la región mapeada a sí misma.
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.
 

40. Flujo de diseño HDL para FPGA



40. Flujo de diseño HDL para FPGA

Este video explica el proceso de desarrollo de arreglos de puertas programables en campo (FPGA) utilizando el software de diseño Quartus.

Se explica la metodología de diseño y las herramientas de software para el desarrollo de FPGA. El flujo típico de diseño de lógica programable comienza con una especificación de diseño, pasa a la codificación RTL y luego a la simulación funcional RTL, a la que sigue la síntesis para traducir el diseño en primitivas específicas del dispositivo. Luego, los ingenieros asignan estas primitivas a ubicaciones específicas dentro de un FPGA particular y verifican las especificaciones de rendimiento a través del análisis de tiempo. Finalmente, el diseño se carga en una tarjeta FPGA y se pueden usar herramientas de depuración para probarlo en el hardware. Para los FPGA de Intel, el software de diseño Quartus se utiliza para realizar el flujo de diseño, comenzando con una descripción del sistema y pasando a la síntesis lógica, el lugar y la ruta, el análisis de tiempo y potencia, y la programación del diseño en los FPGA reales.

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

41. Tipos de datos OpenCL y memoria del dispositivo



41. Tipos de datos OpenCL y memoria del dispositivo

El video analiza los tipos de datos OpenCL y la memoria del dispositivo. Abarca los tipos booleanos, enteros y de coma flotante y explica los tipos de datos específicos que se utilizan para operar en direcciones de memoria como int-ptr, uint-ptr y ptrdiff-t. También explica los tipos de datos vectoriales, que son matrices que contienen varios elementos del mismo tipo que permiten aplicar operadores a todos los elementos al mismo tiempo, y cómo usarlos. El video proporciona varios ejemplos de cómo inicializar y acceder a elementos en un vector, incluido el uso de letras e índices numéricos, alto-bajo e impar. También explica la alineación de la memoria y cómo usar el argumento del kernel establecido y los argumentos del kernel privado.

  • 00:00:00 En esta sección, el video proporciona una descripción general de los tipos de datos que se pueden usar en la programación del núcleo OpenCL, que incluye tipos booleanos, enteros y de punto flotante. Los tipos de datos específicos como int-ptr, uint-ptr y ptrdiff-t se utilizan para operar en direcciones de memoria. El video señala que el tipo doble solo es compatible si el dispositivo objetivo es compatible con la extensión CL Cronus 14-point-64 CLCronus FP 64. Los desarrolladores pueden verificar esta extensión antes de usar el tipo doble en sus programas de núcleo OpenCL. El video también explica cómo habilitar la extensión de tipo doble y usarla en un programa del kernel.

  • 00:05:00 En esta sección del video, se analizan los tipos de datos de OpenCL y la memoria del dispositivo. El estándar OpenCL no exige el orden endian para los tipos de datos. Little-endian y big-endian son los dos tipos de endian opcionales que dependen de cómo una arquitectura de computadora define cómo se almacenarán las variables multiplicadas en la memoria. Los pedidos endian de un dispositivo se pueden averiguar utilizando el tipo de datos de vector de información de dispositivo de obtención de CR. Además, los tipos de datos vectoriales se introdujeron como matrices que contienen varios elementos del mismo tipo, tienen una longitud fija y permiten que los operadores se apliquen en todos los elementos al mismo tiempo. Los beneficios de usar tipos de datos vectoriales son que es más rápido y más simple que usar matrices. El video explica cómo usar tipos de datos vectoriales para realizar sumas por elementos en múltiples arreglos.

  • 00:10:00 En esta sección, aprendemos sobre los diferentes tipos de vectores que se pueden usar en OpenCL, que son muy similares a los tipos escalares. Sin embargo, los vectores requieren un número al final para indicar qué tan grande es el vector y qué tipo de elementos contiene. OpenCL también tiene dos tipos de datos especiales, tipo de datos doble y medio, que pueden o no ser compatibles con el dispositivo. Para conocer el tamaño de vector preferido para diferentes tipos, OpenCL proporciona una API que se puede usar para consultar el ancho de vector preferido de un dispositivo. Con base en esto, podemos establecer opciones para construir nuestro programa, como definir un vector de coma flotante para un tamaño preferido de 128 o definir un 8 de coma flotante si el tamaño de vector preferido es 256. Los vectores se pueden inicializar asignando valores iniciales dentro de paréntesis. Incluso podemos inicializar un vector usando vectores más pequeños, por ejemplo, si tenemos dos vectores de tamaño dos, A y B, ambos inicializados con valores escalares.

  • 00:15:00 En esta sección, el ponente explica cómo inicializar y acceder a elementos o componentes en un vector OpenCL. Los usuarios pueden inicializar un vector utilizando vectores más pequeños, una combinación de escalares y factores más pequeños, o asignando directamente los valores a elementos vectoriales. Se proporcionan ejemplos que muestran cómo usar la indexación de números, la indexación de letras y alto-bajo par-impar para acceder a elementos en el vector. Diferentes ejemplos demuestran cómo recuperar subconjuntos de elementos de un vector y asignar estos elementos a otras variables.

  • 00:20:00 En esta sección, el orador analiza varios métodos para indexar y modificar elementos vectoriales, incluido el uso de índices numéricos, letras (como X, Y, Z y W) para representar las diferentes dimensiones de un vector y combinaciones de letras e índices numéricos. También explican cómo usar alto-bajo y par-impar para seleccionar un subconjunto de componentes de vector en función de su posición en el vector. Estos métodos de indexación y modificación pueden ser útiles para trabajar con vectores de diferentes longitudes y dimensiones.

  • 00:25:00 En esta sección, aprendemos sobre diferentes métodos para acceder y modificar elementos en un vector, como la indexación uniforme alta-baja, que nos permite obtener la mitad superior o inferior de los elementos en un vector, o incluso -elementos indexados. También exploramos cómo se almacenan los vectores en un dispositivo little endian, donde el byte menos significativo de un entero se almacena en una dirección más baja que el byte más significativo. Esto significa que en un vector de enteros sin signo, los cuatro bytes de cada valor entero de 32 bits se almacenarán en orden del byte menos al más significativo, y cada elemento completo del vector ocupará 16 bytes.

  • 00:30:00 En esta sección, el orador analiza cómo los tipos de datos OpenCL y la memoria del dispositivo se almacenan en dispositivos little-endian versus big-endian. Muestran cómo un vector de cuatro elementos de tipo entero sin signo se almacena en la memoria en ambos tipos de dispositivos, señalando que el orden de los bytes es diferente debido a la forma en que los dispositivos little-endian y big-endian almacenan los menos significativos y los más significativos. bytes El orador también demuestra una función del kernel llamada "bytes vectoriales" que recupera bytes individuales de esta memoria usando punteros.

  • 00:35:00 En esta sección, se analiza el concepto de alineación de memoria en tipos de datos OpenCL. Se explica que la memoria generalmente se alinea en estructuras de 32 bits, como números enteros y puntos flotantes, que siempre se almacenan en direcciones de memoria que son múltiplos de cuatro. También se observa que las estructuras de 64 bits, como long y double, se almacenan en direcciones que son múltiplos de ocho, y la potencia más pequeña de dos mayor o igual que el tamaño de los datos establece la alineación de memoria de la estructura de datos. Además, se analiza el proceso de inicialización de argumentos de kernel privados y locales en OpenCL, y se explica que los argumentos de kernel en espacios privados y locales se pueden configurar mediante SetKernelArg, pero el valor del último parámetro no se puede establecer cuando el especificador es local. Además, se observa que los argumentos del kernel privado deben ser primitivas simples, como números enteros y puntos flotantes.

  • 00:40:00 En esta sección, el video explica cómo usar argumentos de kernel establecidos y argumentos de kernel privados en su programa OpenCL. Cuando se usa el argumento set kernel, el primer argumento debe ser el índice del tamaño entero del argumento, seguido de un puntero a la variable. Los argumentos privados del kernel también pueden ser vectores, como una matriz de cuatro flotantes, que solo se pueden usar en funciones del kernel y se pueden pasar usando el argumento set kernel.
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.
 

42. Operaciones relacionales vectoriales de OpenCL



42. Operaciones relacionales vectoriales de OpenCL

El video analiza la programación del núcleo OpenCL y sus operadores y funciones integradas. La atención se centra en los operadores relacionales y cómo funcionan con valores escalares y vectoriales. Se presenta un ejemplo de función kernel, "op test", que realiza una operación AND de elementos entre una constante y un vector privado. El video explica cómo implementar un vector con operaciones relacionales en OpenCL comparando elementos vectoriales específicos con un escalar usando operaciones lógicas. El vector resultante se puede usar en un ciclo while para crear un vector de salida final que se asigna al objeto de memoria de salida.

  • 00:00:00 En esta sección, el video presenta la programación del núcleo OpenCL y analiza los operadores y las funciones integradas heredadas por el lenguaje de otros lenguajes de alto nivel. Los operadores presentados incluyen aritmética, comparación y lógica, bit a bit y selección ternaria. En particular, la sección se centra en los operadores relacionales y explica cómo funcionan con valores escalares y vectoriales. El segmento también proporciona una función kernel de ejemplo llamada "prueba de operación", que emplea el operador relacional para ejecutar una operación AND de elementos entre un vector constante y un vector privado inicializado con valores iniciales.

  • 00:05:00 En esta sección, el ponente explica cómo se puede implementar un vector con operaciones relacionales en OpenCL. Usando el ejemplo de comparar elementos específicos de un vector con un valor escalar usando operaciones lógicas, el orador muestra cómo se puede crear un vector resultante con valores verdaderos y falsos representados como -1 y 0, respectivamente. El vector resultante se puede usar en un ciclo while en el que los elementos individuales se someten a más operaciones lógicas para crear un vector de salida final, que se asigna al objeto de memoria de salida.
OpenCL vector relational operations
OpenCL vector relational operations
  • 2020.04.03
  • www.youtube.com
vector relational operations
 

43. Funciones integradas de OpenCL: vloadn, select



43. Funciones integradas de OpenCL: vloadn, select

El video cubre dos funciones integradas clave de OpenCL: vloadn y select. Vloadn le permite inicializar lotes con valores de una matriz escalar y toma dos argumentos: compensación y un puntero a la matriz escalar. Seleccionar, por otro lado, le permite seleccionar ciertos elementos de dos lotes y usarlos para crear un nuevo vector. Puede contener valores enteros con o sin signo, y solo importa el bit más significativo en los elementos de la máscara. El tutorial demuestra cómo funcionan estas funciones en la práctica.

  • 00:00:00 En esta sección, aprendemos sobre Vloadn, una función integrada que se usa para inicializar lotes usando valores de una matriz escalar. Vloadn toma dos argumentos: desplazamiento y un puntero a la matriz escalar. Offset determina qué elementos de la matriz se colocan en el lote, dado en términos del tamaño del vector. Además, aprendemos sobre la función Seleccionar, que se puede usar para seleccionar ciertos elementos de dos lotes y usarlos para construir un nuevo vector. Puede contener valores enteros con o sin signo, y solo importa el bit más significativo en los elementos de la máscara. Los bits más significativos de un componente de máscara en Seleccionar determinan qué lote usar para el elemento correspondiente en el vector de salida.

  • 00:05:00 En esta sección, el tutorial analiza dos funciones integradas de OpenCL: vloadn y select. Vloadn se usa para cargar elementos de un vector específico en un nuevo vector, y select se usa para seleccionar elementos de la primera o segunda entrada en función de una máscara. El tutorial ofrece ejemplos de cómo funcionan estas funciones en la práctica, incluido cómo vloadn selecciona valores del primer vector de entrada en función de la máscara y cómo funciona select para elegir bits del primer o segundo vector de entrada.
OpenCL built-in functions: vloadn , select
OpenCL built-in functions: vloadn , select
  • 2020.04.05
  • www.youtube.com
OpenCL built-in functions: vloadn , select
 

44. Introducción a DPC++



44. Introducción a DPC++

Este video presenta DPC++, un lenguaje de alto nivel para programación paralela de datos que descarga computación compleja a aceleradores como FPGA y GPU, y es parte del marco OneAPI. DPC ++ tiene como objetivo acelerar las cargas de trabajo paralelas de datos utilizando C ++ moderno y optimización del rendimiento orientada a la arquitectura. El disertante brinda un ejemplo simple de DPC++ que demuestra cómo declarar variables de administración de datos y ejecutar una función del núcleo en un dispositivo mediante un comando y un acceso. El video también explica cómo la función lambda puede tomar argumentos y referencias de las variables declaradas fuera de ella.

  • 00:00:00 En esta sección, el disertante presenta la programación DPC++, un lenguaje de alto nivel para la programación paralela de datos que descarga computación compleja a aceleradores como FPGA y GPU. DPC ++ usa C ++ moderno y tiene como objetivo acelerar las cargas de trabajo paralelas de datos mediante el análisis de algoritmos, la descomposición de tareas o datos y el uso de la optimización del rendimiento orientada a la arquitectura. DPC ++ es parte del marco OneAPI y su objetivo es permitir la programación con un solo lenguaje que se puede ejecutar en cualquier CPU, FPGA o GPU. Luego, el disertante brinda un ejemplo simple de DPC++ que declara variables, un búfer y una cola de dispositivos para la administración de datos.

  • 00:05:00 En esta sección, el orador presenta un ejemplo de un programa DPC++ que crea un comando y una función lambda para definir una función del núcleo que se ejecutará en el dispositivo. El programa utiliza un descriptor de acceso para asociar un búfer con el comando y otro descriptor de acceso para acceder al resultado. Finalmente, el programa incluye un ciclo for para usar el descriptor de acceso de resultados para acceder al contenido en el búfer e imprimirlo. La función lambda puede tener diferentes formas de incluir argumentos en la función, como pasar referencias a las variables declaradas fuera de la función.
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.
 

45. ¿Cómo pensar en paralelo?



45. ¿Cómo pensar en paralelo?

El video enseña acerca de la programación paralela utilizando la multiplicación de matrices como ejemplo. Destaca el paralelismo en este cálculo, donde varias filas y columnas se pueden calcular de forma independiente. La implementación de un cálculo de un solo elemento en la matriz C se muestra utilizando una función kernel que permite el cálculo paralelo. El uso de accesores, rango y funciones kernel paralelas se explican en detalle. Se analizan los pasos necesarios para pasar el valor del rango a la función kernel. También se muestra una demostración de la multiplicación de matrices utilizando la nube de desarrollo Intel FPGA.

  • 00:00:00 En esta sección, el video presenta la multiplicación de matrices como un ejemplo de uso común para enseñar programación paralela. El video explica que la multiplicación de matrices implica tomar filas de una matriz y columnas de otra para realizar una multiplicación y acumulación por elementos para producir una matriz resultante. El video explica que hay mucho paralelismo en este cálculo, ya que se pueden calcular diferentes filas y columnas independientemente unas de otras. Se muestra una implementación simple de la multiplicación de matrices utilizando lenguaje C o C++ normal con bucles for anidados que realizan la multiplicación y acumulación por elementos.

  • 00:05:00 En esta sección, aprendemos sobre la implementación de un cálculo de un solo elemento en la matriz C, que se implementa como una función del kernel que permite el cálculo paralelo. El punto clave es que para cada fila y columna, el cálculo es el mismo, con la única diferencia de los números de fila y columna. Los accesores ayudan a acceder a los búferes en los kernels, con acceso de solo lectura para las matrices A y B, y acceso de escritura para la matriz C. El rango se usa como una abstracción para declarar múltiples dimensiones, y H.parallel4 ayuda a definir una función de kernel paralelo . La función kernel incluye una función lambda, siendo el argumento la variable para iterar a través de todos los valores en ambas dimensiones.

  • 00:10:00 En esta sección, el orador explica los pasos necesarios para pasar el valor del rango a la función kernel, que es una función laminar. Discuten las dos dimensiones de la variable y cómo identifica cada variable. El orador explica cómo funciona la función lambda y muestra cómo el tamaño del problema se define por la cantidad de filas y columnas en las que ejecutamos las funciones del núcleo. Usan el ejemplo de la multiplicación de matrices, la notación tradicional C más más, y la multiplicación y acumulación por elementos realizada en el bucle for más interno. Finalmente, muestran una demostración rápida de la multiplicación de matrices utilizando la nube de desarrollo 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.