OpenCL na negociação - página 8

 

36. Instruções de execução no caminho de dados da CPU



36. Instruções de execução no caminho de dados da CPU

O vídeo explica como os cálculos são executados em um caminho de dados da CPU usando um exemplo de realização de operações de acumulação. O caminho de dados inclui unidades de carregamento e armazenamento para carregar e armazenar dados na memória usando endereços e unidades funcionais, como ALUs, para realizar operações. O vídeo ilustra o processo passo a passo, incluindo carregar dados da memória, realizar operações e armazenar os resultados de volta na memória. O palestrante também explica como o FPGA pode ser utilizado para implementar a mesma função, aproveitando ao máximo os recursos disponíveis no hardware.

  • 00:00:00 Nesta seção, o vídeo explica como os cálculos são mapeados em um PGA usando um exemplo de realização de operações de acumulação. Primeiro, o código de alto nível é convertido em linguagem assembly usando instruções da CPU e os valores intermediários são armazenados em registradores. A CPU é uma CPU de pipeline com unidades funcionais no caminho de dados, incluindo unidades de carregamento e armazenamento para carregar e armazenar dados na memória usando endereços. O caminho de dados é projetado para ser geral o suficiente para executar todos os tipos de instruções dentro de uma largura de dados fixa e número de operações, e um valor constante pode ser carregado em um registrador via ALU. O vídeo também traz um exemplo de como seis instruções são executadas na CPU, ilustrando o processo passo a passo.

  • 00:05:00 Nesta seção, o palestrante percorre várias instruções e explica como elas são executadas em um caminho de dados da CPU, incluindo o carregamento de dados da memória em arquivos de registro, usando diferentes unidades funcionais no caminho de dados para realizar operações como multiplicação e adição , e armazenando os resultados de volta na memória. O palestrante então explica como o FPGA pode ser usado para implementar a mesma função do kernel desenrolando o hardware da CPU e usando os recursos exatos necessários para a função, aproveitando ao máximo os recursos disponíveis no hardware do 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. Caminho de dados personalizado no FPGA


37. Caminho de dados personalizado no FPGA

O vídeo explica o uso de um FPGA para implementar a função do kernel para melhorar o desempenho ao desenrolar o hardware da CPU e personalizar o caminho de dados no FPGA. Ao remover unidades não utilizadas, carregar constantes e fios e reprogramar algumas operações, as operações de carregamento podem ser executadas simultaneamente para aumentar o desempenho. O design de caminhos de dados personalizados pode melhorar a taxa de transferência, reduzir a latência e o consumo de energia selecionando operações e dados necessários para uma função específica. O vídeo mostra um exemplo de adição de acordo com a demanda em dois vetores, com o resultado armazenado de volta na memória usando registros entre os estágios para permitir um pipeline eficiente e o lançamento de oito itens de trabalho para adições consecutivas.

  • 00:00:00 Nesta seção, é explicado o conceito de usar FPGA para implementar a função do kernel com melhor desempenho e utilização de recursos. A ideia é desenrolar o hardware da CPU e usar os recursos do FPGA para criar o design que implementa a função necessária enquanto usa os recursos que não são usados em todas as etapas da execução. Ao remover certas unidades não utilizadas, carregar constantes e fios e reprogramar algumas operações, as operações de carga podem ser executadas simultaneamente, aumentando o desempenho. A personalização do caminho de dados no FPGA pode atingir o mesmo resultado usando recursos dedicados especializados.

  • 00:05:00 Nesta seção, o palestrante discute o projeto de um caminho de dados personalizado no FPGA, selecionando as operações e dados necessários para uma função específica, tamanho da memória e configuração de uma forma que possa melhorar a taxa de transferência, reduzir a latência e aumentar a potência consumo, usando uma função de kernel que executa a adição conforme a demanda em dois vetores, com o resultado armazenado de volta na memória. Aproveitando os registros entre os estágios, o caminho de dados pode usar um pipeline eficiente e lançar oito itens de trabalho para adições consecutivas, permitindo que cada ciclo processe diferentes threads para evitar unidades ociosas.
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 e Kernel Paralelo de Dados



38. OpenCL para FPGA e Kernel Paralelo de Dados

O vídeo explica como o OpenCL permite que engenheiros de FPGA usem recursos de engenharia de software para expandir o número de desenvolvedores de aplicativos de FPGA aproveitando os recursos de computação paralela em FPGAs. O modelo de programação do OpenCL permite a especificação do paralelismo usando funções paralelas de dados chamadas kernels, e cada kernel depende de identificadores especificados por "obter ID global" para executar computações paralelas em segmentos de dados independentes. É introduzido o conceito de threads e grupos de trabalho, onde os threads acessam diferentes partes do conjunto de dados, particionados em grupos de trabalho, com apenas threads dentro do mesmo grupo de trabalho capazes de compartilhar memória local. Com este modelo de programação, o OpenCL permite o processamento paralelo de dados eficiente.

  • 00:00:00 Nesta seção, o palestrante apresenta o OpenCL e sua importância no projeto de aplicativos baseados em FPGA. Embora haja menos programadores para FPGA do que CPUs padrão, o OpenCL como uma linguagem de programação de alto nível expande o número de desenvolvedores de aplicativos FPGA, permitindo que engenheiros de FPGA usem recursos de engenharia de software para aproveitar os recursos de computação paralela em FPGAs. OpenCL é um padrão da indústria para computação heterogênea e permite que os programadores usem APIs C ou C++ familiares para escrever programas para executar cargas de trabalho complexas com aceleradores de hardware, como processadores multi-core, GPUs e FPGAs. A grande ideia por trás do OpenCL é seu modelo de execução que permite que o paralelismo seja especificado explicitamente.

  • 00:05:00 Nesta seção, o modelo de programação do OpenCL para FPGA e kernel paralelo de dados é explicado. O vídeo descreve a estrutura de uma estrutura OpenCL com um host e um acelerador ou dispositivo executado em domínios de hardware separados. O host prepara os dispositivos e kernels e cria os comandos necessários para serem enviados a esses dispositivos. O código do acelerador é escrito em OpenCLC e o host se comunica com ele por meio de um conjunto de chamadas da API OpenCL, permitindo uma abstração da comunicação entre um processador host e os kernels executados no dispositivo. Kernels OpenCL são funções paralelas de dados usadas para definir vários encadeamentos paralelos de execução, cada um contando com identificadores especificados por "obter ID global". Esses IDs especificam os segmentos ou partições de dados nos quais um kernel deve funcionar, permitindo que cálculos paralelos sejam executados em pares de dados independentes.

  • 00:10:00 Nesta seção, é introduzido o conceito de threads e grupos de trabalho, onde os threads podem acessar diferentes partes do conjunto de dados e são particionados em grupos de trabalho. Somente threads dentro do mesmo grupo de trabalho podem compartilhar memória local. Cada encadeamento possui um ID local e global, e o ID global pode ser calculado usando o ID do grupo e o tamanho local. Este sistema permite um processamento paralelo de dados 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. OpenCL Host Side Programming: Contexto, filas, objetos de memória, etc.



39. OpenCL Host Side Programming: Contexto, filas, objetos de memória, etc.

Este tutorial em vídeo explora vários conceitos de programação do lado do host em OpenCL, com foco em contexto, filas e objetos de memória. Abrange as duas novas APIs em OpenCL, clCreateKernelsInProgram e clSetKernelArg, que são usadas para criar objetos de kernel e passar argumentos para funções de kernel. O tutorial também discute o uso da API clCreateImage para criar objetos de imagem e como os pixels da imagem são armazenados na memória usando a ordem e o tipo de canal. Ele explica como o OpenCL lida com imagens 2D e 3D, como os desenvolvedores podem coletar informações sobre objetos de memória usando APIs como clGetMemoryObjectInfo e como executar operações de objetos de memória, como leitura e gravação de buffer, mapeamento de objetos de memória e cópia de dados entre objetos de memória.

  • 00:00:00 Nesta seção, os conceitos de programação do lado do host do OpenCL são revistos. A seção enfoca contexto, filas e objetos de memória. Vários contextos podem ser construídos em uma plataforma física, mesmo que consista em dispositivos de diferentes fornecedores. Os objetos de memória na memória global podem ser compartilhados por várias filas, mas a sincronização apropriada precisa ser executada pelo aplicativo no lado do host. É possível ter vários contextos e várias filas de comandos dentro de um contexto. As diferentes plataformas OpenCL fornecidas pelos fornecedores não são necessariamente compatíveis e, portanto, não podem ser colocadas no mesmo contexto.

  • 00:05:00 Nesta seção, o vídeo discute duas novas APIs no OpenCL. A primeira API permite a criação de kernels para cada função em um programa OpenCL usando a função clCreateKernelsInProgram. Isso cria uma matriz de objetos do kernel que podem ser usados para verificar os nomes das funções do kernel e outras informações relacionadas usando a função clGetKernelInfo. A segunda API, clSetKernelArg, é usada para instanciar argumentos do kernel e usa o objeto do kernel e o índice do argumento como argumentos. O vídeo explica como usar essas APIs e como liberar objetos do kernel após o uso.

  • 00:10:00 Nesta seção, aprenderemos como a API pode passar valores de argumento para funções do kernel. Podemos passar um tipo de dado primitivo como um ponteiro para a função kernel, ou podemos passar um ponteiro para um objeto de memória ou um objeto de amostra contendo dados complexos. Objetos de imagem são um tipo especial de objeto de memória usado para armazenar dados de pixel. Podemos criar objetos de imagem usando os mesmos sinalizadores de configuração como objetos de buffer e com formatos definidos a partir de uma lista de formatos de imagem. A API clCreateImage é usada para criar objetos de imagem e seus parâmetros são semelhantes aos usados para criar objetos de buffer. O terceiro argumento identifica as propriedades de formato dos dados da imagem a serem alocados, enquanto o quarto argumento descreve o tipo e as dimensões da imagem.

  • 00:15:00 Nesta seção, o uso da API clCreateImage() é apresentado para identificar como os pixels da imagem são armazenados na memória. O formato de objeto de imagem é projetado para armazenar uma imagem na memória e consiste em dois fatores: ordem do canal e tipo de canal. A ordem do canal identifica como as informações do canal são armazenadas para cada pixel e é um tipo enumerado que contém cores básicas e informações alfa. Em contraste, o tipo de canal especifica como os canais de imagem são codificados em binário e usa valores diferentes para determinar a representação das informações de cor. Os níveis de bits são essenciais para especificar quantos bits usar para representar o valor da cor no canal. Além disso, é demonstrado o layout de memória dos formatos de imagem, de modo que, para cada pixel, a sequência RGBA é armazenada na memória, usando um byte para codificar as informações de cor para cada canal de cor.

  • 00:20:00 Nesta seção, o vídeo discute como o OpenCL lida com imagens 2D e 3D, que podem consistir em várias fatias empilhadas em outra dimensão. O descritor de imagem CL é usado para descrever como os objetos de imagem são dispostos e inclui parâmetros como largura, altura e profundidade da imagem em pixels, bem como a distância da linha de varredura em bytes. Além disso, a API clCreateImage() é usada para identificar o número de bytes necessários para descrever a imagem, o que pode exigir ajustes para preenchimento e alinhamento nas linhas e fatias.

  • 00:25:00 Nesta seção, o palestrante explica como coletar informações sobre objetos de imagem e memória em OpenCL usando APIs como clGetImageInfo e clGetMemoryObjectInfo. Essas APIs permitem que os desenvolvedores obtenham informações sobre coisas como formato de imagem, tamanho de pixel, largura de pixel, altura de pixel, profundidade e outras propriedades de objetos de memória. Além disso, eles podem usar EnqueueReadBuffer/EnqueueWriteBuffer para ler ou gravar dados em objetos de buffer e EnqueueReadImage/EnqueueWriteImage para acessar dados de objetos de imagem. O uso de origem, região, espaçamento de linha e espaçamento de fatia também são específicos para objetos de imagem, que são organizados em termos de linhas, fatias e imagens. Os desenvolvedores podem usar essas APIs para especificar o local exato de uma região que desejam acessar ou executar uma operação de cópia e para gerar eventos usando argumentos de evento CL.

  • 00:30:00 Nesta seção, o vídeo explica duas operações de objeto de memória no OpenCL: leitura e gravação de buffer rec e mapeamento de objetos de memória. Com o registro do buffer de leitura e gravação, o usuário especifica a origem e as informações de tamanho, permitindo que os dados sejam recuperados ou gravados em pontos específicos. O mapeamento de objetos de memória permite o mapeamento de um objeto de memória em um dispositivo para uma região de memória no host. Uma vez mapeados, os objetos de memória podem ser lidos e modificados no lado do host usando ponteiros obtidos por meio de APIs de mapeamento de memória. O vídeo também apresenta uma lista de operações de objetos de memória disponíveis no OpenCL para copiar dados entre objetos de memória, simplificando a programação no lado do host e melhorando o desempenho da operação de leitura e gravação.

  • 00:35:00 Nesta seção, o palestrante discute os vários objetos de memória no OpenCL e como eles podem ser usados para copiar dados de um local para outro. As funções de cópia incluem buffer de cópia, imagem de cópia, buffer de cópia retangular e assim por diante. O alto-falante mostra um sistema host-dispositivo e demonstra como copiar dados de um buffer para outro usando a função CL in queue copy buffer. Eles explicam como mapear o buffer para um espaço de memória usando cl enqueu map buffer e, em seguida, usar a cópia de memória para copiar a região mapeada para si mesma.
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. Fluxo de Projeto HDL para FPGA



40. Fluxo de Projeto HDL para FPGA

Este vídeo explica o processo de desenvolvimento de Field Programmable Gate Arrays (FPGAs) usando o software de design Quartus.

A metodologia de projeto e as ferramentas de software para desenvolvimento de FPGA são explicadas. O fluxo típico de projeto de lógica programável começa com uma especificação de projeto, passa para a codificação RTL e, em seguida, para a simulação funcional RTL, que é seguida pela síntese para traduzir o projeto em primitivas específicas do dispositivo. Os engenheiros então mapeiam esses primitivos para locais específicos dentro de um FPGA específico e verificam as especificações de desempenho por meio da análise de tempo. Por fim, o projeto é carregado em uma placa FPGA e as ferramentas de depuração podem ser usadas para testá-lo no hardware. Para Intel FPGAs, o software de design Quartus é usado para executar o fluxo de design, começando com uma descrição do sistema e passando para a síntese lógica, localização e rota, análise de tempo e energia e programação do design nos FPGAs reais.

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 dados OpenCL e memória do dispositivo



41. Tipos de dados OpenCL e memória do dispositivo

O vídeo discute os tipos de dados OpenCL e a memória do dispositivo. Ele abrange tipos booleanos, inteiros e de ponto flutuante e explica tipos de dados específicos usados para operar em endereços de memória, como int-ptr, uint-ptr e ptrdiff-t. Ele também explica os tipos de dados vetoriais, que são matrizes contendo vários elementos do mesmo tipo que permitem que os operadores sejam aplicados a todos os elementos ao mesmo tempo e como usá-los. O vídeo fornece vários exemplos de como inicializar e acessar elementos em um vetor, incluindo o uso de letras e índices numéricos, alto-baixo e par-ímpar. Ele também explica o alinhamento da memória e como usar o argumento do kernel definido e os argumentos do kernel privado.

  • 00:00:00 Nesta seção, o vídeo fornece uma visão geral dos tipos de dados que podem ser usados na programação do kernel OpenCL, que inclui tipos booleanos, inteiros e de ponto flutuante. Tipos de dados específicos, como int-ptr, uint-ptr e ptrdiff-t, são usados para operar em endereços de memória. O vídeo observa que o tipo duplo é compatível apenas se o dispositivo de destino oferecer suporte à extensão CL Cronus 14 pontos-64 CLCronus FP 64. Os desenvolvedores podem verificar essa extensão antes de usar o tipo double em seus programas do kernel OpenCL. O vídeo também explica como ativar a extensão de tipo duplo e usá-la em um programa do kernel.

  • 00:05:00 Nesta seção do vídeo, são discutidos os tipos de dados OpenCL e a memória do dispositivo. O padrão OpenCL não exige a ordem endian para tipos de dados. Little-endian e big-endian são os dois tipos de endian opcionais que dependem de como uma arquitetura de computador define como as variáveis multiplicadas serão armazenadas na memória. As ordens endian de um dispositivo podem ser encontradas usando CR get device info vector type. Além disso, os tipos de dados vetoriais foram introduzidos como matrizes que contêm vários elementos do mesmo tipo, têm comprimento fixo e permitem que os operadores apliquem em todos os elementos ao mesmo tempo. Os benefícios de usar tipos de dados vetoriais são que é mais rápido e simples do que usar matrizes. O vídeo explica como usar tipos de dados vetoriais para executar a adição elementar em várias matrizes.

  • 00:10:00 Nesta seção, aprendemos sobre diferentes tipos de vetores que podem ser usados no OpenCL, que são muito semelhantes aos tipos escalares. No entanto, os vetores requerem um número no final para indicar o tamanho do vetor e que tipo de elementos ele contém. O OpenCL também possui dois tipos de dados especiais, tipo de dados double e half, que podem ou não ser suportados pelo dispositivo. Para saber o tamanho vetorial preferido para diferentes tipos, o OpenCL fornece uma API que pode ser usada para consultar a largura vetorial preferida de um dispositivo. Com base nisso, podemos definir opções para construir nosso programa, como definir um vetor de ponto flutuante para um tamanho preferencial de 128 ou definir um ponto flutuante 8 se o tamanho de vetor preferencial for 256. Os vetores podem ser inicializados atribuindo valores iniciais dentro parênteses. Podemos até inicializar um vetor usando vetores menores, por exemplo, se tivermos dois vetores de tamanho dois, A e B, ambos inicializados com valores escalares.

  • 00:15:00 Nesta seção, o palestrante explica como inicializar e acessar elementos ou componentes em um vetor OpenCL. Os usuários podem inicializar um vetor usando vetores menores, uma combinação de escalares e fatores menores ou atribuindo diretamente os valores aos elementos do vetor. Exemplos são fornecidos mostrando como usar a indexação de número, indexação de letra e alto-baixo par-ímpar para acessar elementos no vetor. Diferentes exemplos demonstram como recuperar subconjuntos de elementos de um vetor e atribuir esses elementos a outras variáveis.

  • 00:20:00 Nesta seção, o palestrante discute vários métodos para indexar e modificar elementos vetoriais, incluindo o uso de índices numéricos, letras (como X, Y, Z e W) para representar as diferentes dimensões de um vetor e combinações de letras e índices numéricos. Eles também explicam como usar alto-baixo e par-ímpar para selecionar um subconjunto de componentes de vetor com base em sua posição no vetor. Esses métodos de indexação e modificação podem ser úteis para trabalhar com vetores de diferentes comprimentos e dimensões.

  • 00:25:00 Nesta seção, aprendemos sobre diferentes métodos para acessar e modificar elementos em um vetor, como a indexação par alta-baixa, que nos permite obter a metade superior ou inferior dos elementos em um vetor, ou mesmo elementos indexados. Também exploramos como os vetores são armazenados em um dispositivo little endian, onde o byte menos significativo de um inteiro é armazenado em um endereço inferior ao do byte mais significativo. Isso significa que em um vetor de inteiros sem sinal, os quatro bytes de cada valor inteiro de 32 bits serão armazenados na ordem do byte menos significativo para o mais significativo, com cada elemento completo do vetor ocupando 16 bytes.

  • 00:30:00 Nesta seção, o palestrante discute como os tipos de dados OpenCL e a memória do dispositivo são armazenados em dispositivos little-endian versus big-endian. Eles mostram como um vetor de quatro elementos do tipo inteiro sem sinal é armazenado na memória em ambos os tipos de dispositivos, observando que a ordem dos bytes é diferente devido à maneira como os dispositivos little-endian e big-endian armazenam o menos significativo e o mais significativo bytes. O palestrante também demonstra uma função do kernel chamada "bytes vetoriais" que recupera bytes individuais dessa memória usando ponteiros.

  • 00:35:00 Nesta seção, o conceito de alinhamento de memória em tipos de dados OpenCL é discutido. É explicado que a memória normalmente se alinha em estruturas de 32 bits, como números inteiros e pontos flutuantes, que são sempre armazenados em endereços de memória que são múltiplos de quatro. Também é observado que estruturas de 64 bits, como long e double, são armazenadas em endereços que são múltiplos de oito, e a menor potência de dois maior ou igual ao tamanho dos dados define o alinhamento da memória da estrutura de dados. Além disso, o processo de inicialização de argumentos de kernel locais e privados em OpenCL é discutido e é explicado que argumentos de kernel em espaços locais e privados podem ser configurados usando SetKernelArg, mas o último valor de parâmetro não pode ser definido quando o especificador é local. Além disso, observa-se que os argumentos privados do kernel devem ser primitivos simples, como inteiros e pontos flutuantes.

  • 00:40:00 Nesta seção, o vídeo discute como usar o argumento do kernel definido e os argumentos do kernel privado em seu programa OpenCL. Ao usar o argumento set kernel, o primeiro argumento deve ser o índice do tamanho inteiro do argumento, seguido por um ponteiro para a variável. Os argumentos privados do kernel também podem ser vetores, como um array de float quatro, que só pode ser usado em funções do kernel e passados usando o argumento set do 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. Operações relacionais vetoriais OpenCL



42. Operações relacionais vetoriais OpenCL

O vídeo discute a programação do kernel OpenCL e seus operadores e funções integradas. O foco está nos operadores relacionais e em como eles trabalham com valores escalares e vetoriais. Um exemplo de função do kernel, "op test", é apresentado e executa uma operação AND elementar entre uma constante e um vetor privado. O vídeo explica como implementar um vetor com operações relacionais no OpenCL comparando elementos vetoriais específicos com um escalar usando operações lógicas. O vetor resultante pode ser usado em um loop while para criar um vetor de saída final que é atribuído ao objeto de memória de saída.

  • 00:00:00 Nesta seção, o vídeo apresenta a programação do kernel OpenCL e discute os operadores e funções incorporadas herdadas pela linguagem de outras linguagens de alto nível. Os operadores apresentados incluem aritmética, comparação e lógica, bit a bit e seleção ternária. Em particular, a seção enfoca os operadores relacionais e explica como eles funcionam com valores escalares e vetoriais. O segmento também fornece um exemplo de função do kernel chamada "op test", que emprega o operador relacional para executar uma operação AND elementar entre um vetor constante e um vetor privado inicializado com valores iniciais.

  • 00:05:00 Nesta seção, o palestrante explica como um vetor com operações relacionais pode ser implementado no OpenCL. Usando o exemplo de comparação de elementos específicos de um vetor com um valor escalar usando operações lógicas, o palestrante mostra como um vetor resultante pode ser criado com valores verdadeiros e falsos representados como -1 e 0, respectivamente. O vetor resultante pode então ser usado em um loop while em que os elementos individuais passam por outras operações lógicas para criar um vetor de saída final, que é atribuído ao objeto de memória de saída.
OpenCL vector relational operations
OpenCL vector relational operations
  • 2020.04.03
  • www.youtube.com
vector relational operations
 

43. Funções integradas do OpenCL: vloadn, select



43. Funções integradas do OpenCL: vloadn, select

O vídeo cobre duas funções internas importantes do OpenCL: vloadn e select. Vloadn permite inicializar lotes com valores de uma matriz escalar e recebe dois argumentos: deslocamento e um ponteiro para a matriz escalar. Selecionar, por outro lado, permite selecionar certos elementos de dois lotes e usá-los para criar um novo vetor. Ele pode conter valores inteiros assinados ou não assinados, e apenas o bit mais significativo nos elementos de máscara é importante. O tutorial demonstra como essas funções funcionam na prática.

  • 00:00:00 Nesta seção, aprenderemos sobre Vloadn, uma função interna usada para inicializar lotes usando valores de uma matriz escalar. Vloadn recebe dois argumentos: offset e um ponteiro para o array escalar. O deslocamento determina quais elementos da matriz são colocados no lote, dados em termos do tamanho do vetor. Além disso, aprendemos sobre a função Selecionar, que pode ser usada para selecionar certos elementos de dois lotes e usá-los para construir um novo vetor. Ele pode conter valores inteiros assinados ou não assinados, e apenas o bit mais significativo nos elementos de máscara é importante. Os bits mais significativos de um componente de máscara em Select determina qual lote usar para o elemento correspondente no vetor de saída.

  • 00:05:00 Nesta seção, o tutorial discute duas funções integradas do OpenCL: vloadn e select. Vloadn é usado para carregar elementos de um vetor especificado em um novo vetor e select é usado para selecionar elementos da primeira ou segunda entrada com base em uma máscara. O tutorial oferece exemplos de como essas funções funcionam na prática, incluindo como vloadn seleciona valores do primeiro vetor de entrada com base na máscara e como select funciona para escolher bits do primeiro ou segundo vetores 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. Introdução ao DPC++



44. Introdução ao DPC++

Este vídeo apresenta o DPC++, uma linguagem de alto nível para programação paralela de dados que transfere computação complexa para aceleradores como FPGAs e GPUs e faz parte da estrutura OneAPI. O DPC++ visa acelerar cargas de trabalho paralelas de dados usando C++ moderno e otimização de desempenho orientada para a arquitetura. O palestrante fornece um exemplo simples de DPC++ que demonstra como declarar variáveis de gerenciamento de dados e executar uma função de kernel em um dispositivo usando um comando e um acessador. O vídeo também explica como a função lambda pode receber argumentos e referências das variáveis declaradas fora dela.

  • 00:00:00 Nesta seção, o palestrante apresenta a programação DPC++, uma linguagem de alto nível para programação paralela de dados que transfere a computação complexa para aceleradores como FPGAs e GPUs. O DPC++ usa C++ moderno e tem como objetivo acelerar cargas de trabalho paralelas de dados analisando algoritmos, decompondo tarefas ou dados e usando otimização de desempenho orientada à arquitetura. O DPC++ faz parte da estrutura OneAPI e seu objetivo é permitir a programação com uma única linguagem que pode ser executada em qualquer CPU, FPGA ou GPU. O palestrante fornece um exemplo simples de DPC++ que declara variáveis, um buffer e uma fila de dispositivos para gerenciamento de dados.

  • 00:05:00 Nesta seção, o palestrante apresenta um exemplo de programa DPC++ que cria um comando e uma função lambda para definir uma função de kernel que será executada no dispositivo. O programa usa um acessador para associar um buffer ao comando e outro acessador para acessar o resultado. Por fim, o programa inclui um loop for para usar o acessador de resultado para acessar o conteúdo no buffer e imprimi-lo. A função lambda pode ter diferentes maneiras de levar argumentos para a função, como passar referências às variáveis declaradas fora da função.
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. Como pensar em paralelo?



45. Como pensar em paralelo?

O vídeo ensina sobre programação paralela usando a multiplicação de matrizes como exemplo. Ele destaca o paralelismo nessa computação, onde várias linhas e colunas podem ser calculadas independentemente. A implementação de um cálculo de elemento único na matriz C é mostrada usando uma função kernel que permite computação paralela. O uso de acessadores, intervalos e funções paralelas do kernel são explicados em detalhes. As etapas envolvidas na passagem do valor do intervalo para a função kernel são discutidas. Uma demonstração da multiplicação de matrizes usando a nuvem de desenvolvimento Intel FPGA também é demonstrada.

  • 00:00:00 Nesta seção, o vídeo apresenta a multiplicação de matrizes como um exemplo comumente usado para ensinar programação paralela. O vídeo explica que a multiplicação de matrizes envolve tirar linhas de uma matriz e colunas de outra para realizar a multiplicação e acumulação de elementos para produzir uma matriz resultante. O vídeo explica que há muito paralelismo nessa computação, pois diferentes linhas e colunas podem ser calculadas independentemente umas das outras. Uma implementação simples da multiplicação de matrizes é mostrada usando linguagem C ou C++ regular com loops for aninhados realizando a multiplicação e acumulação elementar.

  • 00:05:00 Nesta seção, aprendemos sobre a implementação do cálculo de um único elemento na matriz C, que é implementada como uma função kernel que permite a computação paralela. O ponto principal é que, para cada linha e coluna, o cálculo é o mesmo, com a única diferença sendo os números de linha e coluna. Os acessadores ajudam a acessar os buffers nos kernels, com acesso somente leitura para as matrizes A e B e acesso de gravação para a matriz C. O intervalo é usado como uma abstração para declarar várias dimensões, e o H.parallel4 ajuda a definir uma função paralela do kernel . A função kernel inclui uma função lambda, com o argumento sendo a variável para percorrer todos os valores em ambas as dimensões.

  • 00:10:00 Nesta seção, o palestrante explica as etapas envolvidas na passagem do valor do intervalo para a função kernel, que é uma função laminar. Eles discutem as duas dimensões da variável e como ela identifica cada variável. O palestrante mostra como a função lambda funciona e mostra como o tamanho do problema é definido pelo número de linhas e colunas nas quais executamos as funções do kernel. Eles usam o exemplo da multiplicação de matrizes, a notação tradicional C mais mais, e a multiplicação e acumulação elementar feita no loop for mais interno. Por fim, eles demonstram uma demonstração rápida da multiplicação de matrizes usando a nuvem de desenvolvimento 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.
Razão: