OpenCL na negociação - página 4

 

AMD Developer Central: visão geral técnica do OpenCL. Episódio 2: O que é OpenCL™? (contínuo)



AMD Developer Central: visão geral técnica do OpenCL. Episódio 2: O que é OpenCL™? (contínuo)

Neste vídeo, Justin Hensley discute os modelos de plataforma e memória do OpenCL, que são importantes para entender ao usar o OpenCL para acelerar aplicativos. Ele explica que um host está conectado a um ou mais dispositivos OpenCL, como GPUs ou processadores multi-core, que possuem unidades de computação que executam código em um modelo de dados múltiplos de uma única instrução. Os itens de trabalho têm memória privada, enquanto os grupos de trabalho têm memória local compartilhada, cada dispositivo tem memória global e constante e os desenvolvedores devem gerenciar explicitamente a sincronização de memória e os dados para obter desempenho máximo. Além disso, Hensley discute objetos OpenCL como dispositivos, contextos, filas, buffers, imagens, programas, kernels e eventos, que são usados para enviar trabalho a dispositivos, sincronizar e criar perfis de dados. Por fim, ele descreve como executar um programa OpenCL em três etapas fáceis: criação de programas e objetos de kernel, criação de objetos de memória e criação de filas de comandos com eventos para garantir a ordem adequada de execução do kernel.

  • 00:00:00 Nesta seção, Justin Hensley explica a plataforma e os modelos de memória do OpenCL, que é importante entender ao usar o OpenCL para acelerar aplicativos. Um host é conectado a um ou mais dispositivos OpenCL (GPU, DSP ou processador multi-core), que possuem unidades de computação que executam código em um modelo de dados múltiplos de instrução única. Em termos de memória, o processador host possui memória acessível apenas pela CPU, enquanto o dispositivo de computação possui memória global e constante (não sincronizada) e cada item de trabalho possui sua própria memória privada que somente ela pode acessar. Os grupos de trabalho têm uma memória local compartilhada e os desenvolvedores devem gerenciar explicitamente a sincronização de memória e os dados se quiserem obter o desempenho máximo de seus dispositivos. Por fim, Hensley discute objetos OpenCL, como dispositivos, contextos, filas, buffers, imagens, programas, kernels e eventos, que são usados para enviar trabalho a dispositivos, sincronizar e criar perfis de dados.

  • 00:05:00 Nesta seção, o palestrante explica como executar um programa OpenCL em três etapas fáceis. Primeiro, você cria objetos de programa para construir o código-fonte e objetos de kernel contendo o código a ser executado em vários dispositivos com argumentos. Em segundo lugar, você cria objetos de memória, imagens ou buffers. Em terceiro lugar, você cria filas de comandos e as utiliza para enfileirar trabalhos para diferentes dispositivos, mas a ordem de serviço pode estar dentro ou fora de ordem. Portanto, os eventos são usados para garantir que os kernels sejam executados na ordem necessária quando existem dependências.
Episode 2: What is OpenCL™? (continued)
Episode 2: What is OpenCL™? (continued)
  • 2013.05.27
  • www.youtube.com
In this video, you continue to learn about OpenCL™. We describe the details about the OpenCL™ platform and memory models. Topics covered include compute devi...
 

AMD Developer Central: visão geral técnica do OpenCL. Episódio 3: Configuração de recursos



AMD Developer Central: visão geral técnica do OpenCL. Episódio 3: Configuração de recursos

No Episódio 3 da série de tutoriais do OpenCL, o palestrante se aprofunda na configuração e gerenciamento de recursos no OpenCL, abordando tópicos como objetos de memória, contexto, dispositivos e filas de comandos. O processo de acesso e alocação de memória para imagens também é discutido, com foco nas chamadas de leitura e gravação de imagens e nos formatos suportados. As características das operações de memória síncronas e assíncronas são examinadas, com uma explicação de como o sistema de gerenciamento de eventos OpenCL pode ser usado para garantir a conclusão da transferência de dados. Por fim, os usuários são aconselhados a consultar as informações do dispositivo com a chamada CL get device info para escolher o melhor dispositivo para seu algoritmo.

  • 00:00:00 Nesta seção, Justin Hensley da AMD discute a alocação de recursos em OpenCL, focando especificamente em objetos de memória e contexto e configuração de dispositivos. Ele explica como consultar o sistema para encontrar dispositivos disponíveis, criar um contexto compartilhado e configurar filas de comandos para falar com os dispositivos. Hensley também observa que vários núcleos de uma CPU são considerados um dispositivo OpenCL e que dispositivos em diferentes contextos não podem compartilhar dados. Para escolher o melhor dispositivo para um algoritmo, os usuários podem consultar o tempo de execução do OpenCL para obter informações do dispositivo com a chamada CL get device info para determinar o número de unidades de computação, frequência de clock, tamanho da memória e extensões suportadas. Finalmente, Hensley descreve os buffers como simples blocos de memória e as imagens como estruturas de dados formatadas em 2D e 3D opacas.

  • 00:05:00 Nesta seção, o vídeo explica como o OpenCL processa as imagens e como é necessário acessar as imagens por meio das chamadas read e write image. O formato e a amostra de dados para uma imagem também são discutidos e como a chamada de CL obter formatos de imagem suportados deve ser usada para determinar os formatos suportados. Para alocar um buffer de imagem, o formato e o tamanho são definidos e a chamada CL create buffer é usada para criar um objeto de buffer para dados de entrada e saída. CL in queue read e CL in queue right buffer são comandos usados para ler e gravar dados de e para objetos de memória, respectivamente. Se uma região de memória precisa ser mapeada
    para o espaço de endereço do host, o CL no buffer de mapa de fila é usado. Por fim, o buffer de cópia da fila CLN é usado para copiar a memória entre dois objetos de memória.

  • 00:10:00 Nesta seção, o palestrante explica que os dados só podem ser compartilhados com objetos de memória alocados dentro do mesmo contexto, e todas as operações podem ser feitas de forma síncrona ou assíncrona. As operações síncronas são executadas quando a chamada de bloqueio é definida como CL true, o que significa que a transferência de dados será bloqueada até que a operação de memória real ocorra. Isso pode demorar um pouco dependendo da localização da memória. Alternativamente, com CL false, será uma chamada assíncrona e é preciso usar o sistema de gerenciamento de eventos CL aberto para garantir que a memória seja completamente copiada antes de ser usada.
Episode 3: Resource Setup
Episode 3: Resource Setup
  • 2013.05.27
  • www.youtube.com
In this video, you learn about resource allocation, resource setup and how to setup the OpenCL™ runtime. Topics include choosing devices, creating contexts a...
 

AMD Developer Central: visão geral técnica do OpenCL. Episódio 4: Execução do Kernel



AMD Developer Central: visão geral técnica do OpenCL. Episódio 4: Execução do Kernel

Nesta seção, Justin Hensley aborda o tópico de execução do kernel no OpenCL, explicando que os objetos do kernel contêm uma função específica do kernel e são declarados com o qualificador do kernel. Ele divide as etapas para executar um kernel, incluindo definir argumentos do kernel e enfileirar o kernel. Hensley enfatiza a importância de usar eventos para gerenciar vários kernels e evitar problemas de sincronização, e ele sugere usar CL wait for events para esperar que eles sejam concluídos antes de prosseguir. O vídeo também detalha a criação de perfil do aplicativo para otimizar os kernels que levam mais tempo para serem executados.

  • 00:00:00 Nesta seção, Justin Hensley discute a execução do kernel no OpenCL. Ele explica que os objetos do kernel encapsulam uma função específica do kernel em um programa e são declarados com o qualificador do kernel. O objeto do programa encapsula a fonte do programa ou o binário pré-compilado do disco e uma lista de dispositivos. Depois que o objeto do programa é construído, o usuário pode compilá-lo para os dispositivos que possui em tempo de execução. Depois que o kernel foi construído, ele precisa ser executado com as duas etapas básicas para execução: definir os argumentos do kernel e enfileirar o kernel. Para definir os argumentos, o usuário usaria a função chamada "CL Set Kernel Arg" com o primeiro argumento sendo o kernel necessário para ser executado.

  • 00:05:00 Nesta seção, o vídeo explica como definir o tamanho dos argumentos e realmente executar o kernel. O exemplo usado é o processamento de imagens com um tamanho global definido para uma imagem com uma altura de imagem de um determinado tamanho. O vídeo explica que o tempo de execução do OpenCL em filas é executado de forma assíncrona, portanto, cabe ao programador usar eventos para rastrear o status da execução. O vídeo também explica diferentes maneiras de sincronizar comandos e sincronizar explicitamente entre filas usando eventos. O vídeo fornece exemplos de um dispositivo e uma fila e dois dispositivos e duas filas, explicando a importância do uso de eventos para evitar problemas de dependência explícita.

  • 00:10:00 Nesta seção, Justin Hensley discute como gerenciar kernels e eventos ao usar o OpenCL. Ele explica que o uso de eventos é importante ao gerenciar vários kernels e evitar problemas de sincronização. Ele sugere usar CL wait for events, que espera que todos os eventos sejam concluídos antes de continuar, e in queue wait for events, que enfileira um ponto de bloqueio para uso posterior pelo runtime OpenCL, permitindo que a aplicação continue rodando sem bloqueios. Além disso, CL get event profiling info pode ser usado para criar o perfil do aplicativo para que os desenvolvedores possam otimizar os kernels que estão levando mais tempo para serem executados.
Episode 4: Kernel Execution
Episode 4: Kernel Execution
  • 2013.05.27
  • www.youtube.com
In this video, you learn about the execution and synchronization of OpenCL™ kernels. Topics include program and kernel objects, compiling and executing kerne...
 

AMD Developer Central: visão geral técnica do OpenCL. Episódio 5: Programando com OpenCL™ C



AMD Developer Central: visão geral técnica do OpenCL. Episódio 5: Programando com OpenCL™ C

Este vídeo discute vários recursos da linguagem OpenCL™ C, incluindo funções de item de trabalho, funções de grupo de trabalho, tipos de vetores e funções de sincronização incorporadas. O vídeo enfatiza a importância do uso de qualificadores de espaço de endereçamento corretos para escrita de código paralelo eficiente e compartilhamento de memória entre grupos de trabalho. O conceito de tipos vetoriais é discutido em detalhes junto com o uso do espaço de memória correto para argumentos de ponteiro do kernel, variáveis locais e variáveis globais do programa. Além disso, funções matemáticas integradas e funções de grupo de trabalho, como barreiras e memfences, são cobertas com uma sugestão para verificar essas funções em tempo de execução.

  • 00:00:00 Nesta seção, Dustin Hensley da AMD fala sobre os recursos da linguagem OpenCL™ C, que incluem funções de item de trabalho, funções de grupo de trabalho, tipos de vetores e funções de sincronização incorporadas. O OpenCL é baseado no ISO C99, com as restrições de nenhum cabeçalho C99 padrão, ponteiros de função, recursão, matrizes de comprimento variável e campos de bits. Com o OpenCL, existem qualificadores de espaço de endereço para permitir a escrita de código paralelo eficiente, além de permitir o compartilhamento de memória entre grupos de trabalho. Além disso, há acesso otimizado a imagens por meio de funções de imagem integradas e funções de tempo de execução integradas para acessar informações de tempo de execução. Hensley demonstrou um kernel paralelo de dados simples que usa funções de item de trabalho e mostrou como diferentes funções e variáveis do OpenCL podem ser usadas para construir esse kernel.

  • 00:05:00 Nesta seção, o conceito de tipos de vetor em OpenCL é discutido. Esses tipos de vetores são projetados para serem portáveis em diferentes tempos de execução e têm certas características que os tornam seguros, alinhados no comprimento do vetor e possuem funções integradas. O vídeo mostra vários exemplos de operações vetoriais, como criar um literal vetorial e selecionar componentes específicos do vetor. Além disso, observa-se que existem vários espaços de endereço diferentes no OpenCL e é importante usar o correto para argumentos de ponteiro do kernel, variáveis locais e variáveis globais do programa. A falha em especificar um espaço de memória pode levar ao padrão privado e causar problemas.

  • 00:10:00 Nesta seção, é explicado que a conversão de dados de espaços de memória global, local ou privada para outro espaço de memória usando ponteiros não é permitida no OpenCL. Copiar dados explicitamente é necessário para os espaços de memória necessários. Em relação à semântica e conversões, as regras C99 são seguidas para conversões escalares e de ponteiros, e nenhuma conversão implícita é permitida para tipos vetoriais. A importância de ser explícito é destacada pelo uso de funções específicas para determinar o tipo de arredondamento que está sendo realizado na operação, em vez de depender da máquina para lidar com isso. As funções matemáticas integradas do OpenCL, como a função de log, oferecem diferentes tipos, como precisão total, meia precisão e função nativa para lidar com casos de borda ambíguos da biblioteca C99 com mais eficiência, e diferentes métodos estão disponíveis para alternar entre diferentes tipos de dados usando esse tipo de sublinhado ou converter um tipo em outro tipo.

  • 00:15:00 Neste trecho, o palestrante discute as funções de grupo de trabalho integradas e extensões do OpenCL C. Essas funções incluem ferramentas de sincronização como barreiras e Memphis's que permitem a sincronização de memória. O palestrante também fala sobre a importância de usar todos os itens de trabalho em um grupo de trabalho para executar a mesma função, em vez de criar uma barreira que nem todos os itens atingirão. Além disso, o palestrante fala sobre as várias extensões, incluindo as funções atômicas e a seleção de modos de arredondamento em tempo de compilação. O palestrante recomenda ir até a especificação para ler mais sobre essas funções e extensões e verificá-las em tempo de execução.
Episode 5: Programming with OpenCL™ C
Episode 5: Programming with OpenCL™ C
  • 2013.05.27
  • www.youtube.com
In this video, you learn about the OpenCL™ C kernel language. Topics include work items and work groups, data types, vector operations, address spaces, type ...
 

Como usar OpenCL para trabalho de GPU



Como usar OpenCL para trabalho de GPU

O vídeo apresenta o OpenCL como uma ferramenta de padrão aberto que pode funcionar na maioria das novas placas gráficas no Windows com a instalação necessária de CUDA ou drivers gráficos específicos, dependendo da placa. O palestrante descreve um programa simples, o processo de criação de um kernel, buffers para dados, definição de argumentos do kernel e tamanho de trabalho global e execução da carga de trabalho no dispositivo em OpenCL, comparando-o com CUDA. Os parâmetros envolvidos na criação de um kernel em OpenCL para trabalho de GPU, buffer de leitura de enfileiramento, desalocação de memória foram explicados com códigos de amostra para verificar os cálculos. Ao apresentar um pequeno programa que aplica desfoque sutil a imagens em tons de cinza usando OpenCL, o apresentador destaca que OpenCL tem mais código padrão do que CUDA, mas é uma solução aberta e padrão aplicável a diferentes placas gráficas e pode ser reutilizada em diferentes sistemas, independentemente do fabricante.

  • 00:00:00 Nesta seção, o palestrante apresenta o OpenCL e discute como ele é um padrão aberto que pode funcionar com a maioria das placas gráficas mais recentes no Windows, com a necessidade de instalar o CUDA ou o driver gráfico específico dependendo da placa. O palestrante então fornece um programa simples e descreve como ele funciona no OpenCL, comparando-o com o CUDA. Eles passam pelo processo de criação de um kernel, criação de buffers para dados e definição de argumentos do kernel e tamanho de trabalho global antes de executar a carga de trabalho no dispositivo.

  • 00:05:00 Nesta seção, o palestrante explica os parâmetros envolvidos na criação de um kernel em OpenCL para o trabalho de GPU. O parâmetro de tamanho de trabalho global é o número de unidades com as quais você deseja trabalhar, enquanto o tamanho de trabalho local é quanto você deseja fazer em cada unidade. O tamanho do trabalho global precisa ser um múltiplo do tamanho do trabalho local e, embora você possa executar o trabalho sem especificar o tamanho do trabalho local global, é melhor definir ambos para saber em quais dimensões está trabalhando. O palestrante então explica o buffer de leitura de enfileiramento, como desalocar a memória e fornece um código de exemplo para verificar se todos os cálculos foram feitos corretamente. Por fim, o palestrante compara seu exemplo com uma carga de trabalho que desfoca uma imagem, mostrando os parâmetros e o uso de tuplas.

  • 00:10:00 Nesta seção, o palestrante explica as alterações de código em um exemplo anterior e apresenta um kernel que executará um desfoque sutil em uma imagem. Depois de criar ponteiros e buffers de tamanhos diferentes, o alto-falante define argumentos para o kernel antes de recuperar a memória e liberar os ponteiros. Por fim, o alto-falante lê as imagens em tons de cinza, define os pixels de volta ao resultado e grava a imagem em tons de cinza.

  • 00:15:00 Nesta seção, o apresentador apresenta um pequeno programa que aplica um desfoque sutil a uma imagem em tons de cinza usando o OpenCL. O apresentador observa que o OpenCL tem mais código clichê em comparação com o CUDA, recomendando o uso de uma classe ou objeto para manter organizados todos os programas do kernel e as variáveis da fila de comandos. No entanto, o apresentador destaca que o OpenCL é uma solução aberta e padrão que funciona em diferentes placas gráficas e pode ser reutilizada em diferentes sistemas sem se prender a uma marca ou fabricante específico. No geral, o apresentador fornece uma introdução útil ao uso do OpenCL para trabalho com GPU.
How to use OpenCL for GPU work
How to use OpenCL for GPU work
  • 2018.03.04
  • www.youtube.com
We use OpenCL to run workloads on GPU and try a simple blur filter.Git repositoryhttps://github.com/kalaspuffar/openclPlease follow me on Twitterhttp://twitt...
 

EECE.6540 Computação Heterogênea (Universidade de Massachusetts Lowell)



1. Breve introdução ao processamento paralelo com exemplos

Este vídeo fornece uma breve introdução ao processamento paralelo com exemplos. O palestrante explica que a computação paralela envolve dividir uma tarefa maior em subtarefas menores para serem executadas em paralelo. Duas estratégias principais para alcançar isso são dividir e conquistar e espalhar e reunir. O vídeo fornece exemplos de aplicações naturais e artificiais que possuem inerentemente muito paralelismo, como sentidos humanos, carros autônomos e crescimento celular. O vídeo também discute os benefícios do processamento paralelo e demonstra como ele pode ser aplicado à classificação, multiplicação de vetores, processamento de imagens e localização do número de ocorrências de uma sequência de caracteres em um corpo de texto. Por fim, o vídeo apresenta o processo de redução, também conhecido como processo de soma, para coletar e processar os resultados obtidos de recursos paralelos.

  • 00:00:00 Nesta seção, o palestrante apresenta o conceito de computação paralela e explica que envolve a quebra de uma tarefa maior em subtarefas menores a serem executadas em paralelo. Duas estratégias principais para alcançar isso são dividir e conquistar e espalhar e reunir. O palestrante dá exemplos de aplicações naturais e artificiais que possuem inerentemente muito paralelismo, como sentidos humanos, carros autônomos e crescimento celular. Além disso, o palestrante fornece um exemplo de problema de classificação e explica como ele pode ser abordado usando a estratégia de dividir para conquistar.

  • 00:05:00 Nesta seção, o palestrante discute dois exemplos de processamento paralelo, começando com a classificação usando classificação por mesclagem como exemplo. As longas listas não classificadas de inteiros são divididas em subproblemas menores de dois inteiros por grupo, e quatro unidades de computação mapeiam e comparam os subproblemas para obter a sequência final classificada de inteiros. O segundo exemplo discutido é a multiplicação vetorial, que é inerentemente paralela aos dados, pois cada operação de multiplicação é independente das outras. Este problema possui baixa intensidade aritmética, tornando-o simples e rápido de executar. O palestrante também menciona brevemente o conceito de intensidade aritmética para destacar o trade-off entre computação e acesso à memória em diferentes tipos de problemas de processamento.

  • 00:10:00 Nesta seção, o palestrante discute os benefícios do processamento paralelo e como ele permite a utilização eficiente dos recursos de computação. Ele explica que com o processamento paralelo é possível realizar várias computações ao mesmo tempo, sem a necessidade de carregar e descarregar dados constantemente. O conceito de paralelismo de tarefas é introduzido, onde várias unidades de computação trabalham independentemente em dados diferentes. O exemplo de processamento de imagem é usado para ilustrar como os dados podem passar por um pipeline de várias unidades funcionais para maximizar a computação. Ao implementar o processamento paralelo, as unidades de computação podem trabalhar simultaneamente, reduzindo os tempos de espera e aumentando a velocidade da computação.

  • 00:15:00 Nesta seção, o conceito de processamento paralelo é explicado com mais detalhes usando um exemplo de localização do número de ocorrências de uma string de caracteres em um corpo de texto. O problema pode ser dividido em uma comparação de correspondências potenciais que pode ser feita por comparação de palavras individuais, que podem ser paralelizadas. A comparação também pode ser feita de forma ainda mais granular comparando cada letra em paralelo. O conjunto de dados é dividido em unidades menores para realizar a mesma operação em paralelo, tornando a tarefa de comparação altamente paralela.

  • 00:20:00 Nesta seção, aprendemos sobre o segundo estágio do processamento paralelo, que é o processo de redução, também conhecido como processo de soma. Aqui, a fase de coleta coleta os resultados de comparação de concorrentes individuais e os reúne para pós-processamento. O resultado final é produzido coletando resultados intermediários de recursos paralelos e somando-os. Se a saída das unidades de comparação mostrar uma correspondência, o número final obtido após a adição de todas essas saídas indica quantas vezes uma palavra ocorreu no texto original.
Brief Introduction to Parallel Processing with Examples
Brief Introduction to Parallel Processing with Examples
  • 2020.05.21
  • www.youtube.com
This video starts the series on Heterogeneous Computing. In this video we introduce the concept of parallel processing with some examples.If you are interest...
 

2. Simultaneidade, Paralelismo, Decomposições de Dados e Tarefas



2. Simultaneidade, Paralelismo, Decomposições de Dados e Tarefas

O vídeo investiga os conceitos de simultaneidade e paralelismo, bem como o uso de tarefas e decomposições de dados e as técnicas de decomposição de dados para paralelismo e simultaneidade. A Lei de Amdahl é explorada como um meio de calcular a aceleração teórica ao executar tarefas em vários processadores. A importância dos gráficos de dependência de tarefas é destacada na identificação das dependências entre tarefas ao dividir um problema em subtarefas. Métodos para decomposição de dados, como dados de entrada e particionamento de vetores de linhas, são indicados como úteis para a realização de cálculos. Operações atômicas e sincronização são descritas como vitais para gerar o resultado correto após a conclusão de todas as subtarefas.

  • 00:00:00 Nesta seção, o vídeo apresenta os conceitos de simultaneidade e paralelismo. A simultaneidade ocorre quando duas ou mais atividades estão acontecendo ao mesmo tempo, que podem estar em processadores diferentes ou até mesmo em um único processador empregando técnicas de compartilhamento de tempo. Paralelismo, por outro lado, significa estritamente que duas atividades são executadas simultaneamente em diferentes unidades de execução de hardware, como CPUs ou FPGAs. O vídeo também discute a Lei de Amdahl, que é usada para calcular a aceleração teórica ao executar tarefas em vários processadores. Apesar de algumas tarefas terem que permanecer em série, tarefas que podem ser redesenhadas para rodar em paralelo podem ser realizadas usando unidades de processamento, como GPUs, FPGAs ou processadores multicore.

  • 00:05:00 Nesta seção, o palestrante discute o conceito de computação paralela e como ela tem sido implementada nas arquiteturas de CPU, particularmente nos processadores Pentium da Intel. Eles explicam que na arquitetura de processador tradicional, o paralelismo em nível de instrução é frequentemente utilizado para executar instruções independentes simultaneamente, resultando em melhor desempenho. No entanto, em suas aulas, eles se concentram no paralelismo de tarefas e dados e em como esses paralelismos de nível superior podem ser explorados usando algoritmos e threads de software. Eles introduzem o conceito de decomposição de tarefas, que envolve dividir um algoritmo em tarefas individuais, e decomposição de dados, que envolve a divisão de um conjunto de dados em partes discretas que podem ser operadas em paralelo.

  • 00:10:00 Nesta seção, o vídeo discute o conceito de gráficos de dependência de tarefas e como eles são úteis para descrever relacionamentos entre tarefas ao decompor um problema em subtarefas. Caso as tarefas não possuam dependências, elas podem ser executadas em paralelo, o que permite um processamento mais eficiente. O vídeo também apresenta o conceito de decomposição de dados, que envolve dividir os dados em diferentes tarefas para computação. Os exemplos de convolução de imagens e multiplicação de matrizes demonstram como os dados de saída podem ser usados para determinar como os dados podem ser decompostos em diferentes grupos ou partições.

  • 00:15:00 Nesta seção, o palestrante discute diferentes técnicas de decomposição de dados para paralelismo e simultaneidade. A primeira técnica envolve o particionamento de dados em vetores de linha na matriz original para mapeamento um-para-um ou muitos-para-um. A segunda técnica envolve a decomposição de dados de entrada, que possui um dado de entrada que corresponde a vários dados de saída. Exemplos disso incluem histogramas tar gram e pesquisa de substrings. Para calcular o resultado final dessas partes intermediárias de dados, sincronização e operações atômicas podem ser necessárias para garantir que todas as subtarefas sejam concluídas e o resultado correto seja gerado.
Concurrency, Parallelism, Data and Task Decompositions
Concurrency, Parallelism, Data and Task Decompositions
  • 2020.05.21
  • www.youtube.com
This video compares concurrency with parallelism, and discusses decomposition methods to parallelize a task.
 

3. Computação Paralela: Software e Hardware



3. Computação Paralela: Software e Hardware

O vídeo discute diferentes abordagens para atingir altos níveis de paralelismo na computação. O palestrante descreve as técnicas de hardware e software usadas para executar computação paralela, incluindo paralelismo de nível de instrução (ILP), threads de software, CPUs multi-core, SIMD e processadores SPMD. O vídeo também explica a importância da densidade de paralelismo e o conceito de unidades de computação/processamento, que permitem uma computação paralela eficiente. Além disso, o palestrante discute os desafios de criar operações atômicas para fins de sincronização e a necessidade de reestruturar problemas para execução eficiente em GPUs.

  • 00:00:00 Nesta seção, o palestrante discute diferentes abordagens para atingir altos níveis de paralelismo. Durante os primeiros dias do projeto do processador, as pessoas confiavam no paralelismo de nível de instrução (ILP) e nos encadeamentos de software para obter o paralelismo. No entanto, esses projetos não são feitos automaticamente e o programador precisa ter experiência em projetar esses aplicativos de software. Em termos de hardware, existem diferentes tipos de processadores disponíveis para tarefas de computação paralela. As CPUs multi-core são projetadas para paralelismo de tarefas, enquanto os processadores SIMD são projetados para aproveitar o paralelismo de dados. As GPUs são melhores para tarefas de paralelismo de dados porque podem executar vários dados ao mesmo tempo em centenas ou até milhares de núcleos.

  • 00:05:00 Nesta seção, o palestrante discute os conceitos de SIMD e SPMD, que são comumente usados em computação paralela. SIMD significa Single Instruction Multiple Data, em que cada núcleo pode executar operações em diferentes dados ao mesmo tempo. Por outro lado, SPMD significa Single Program Multiple Data, em que várias instâncias do mesmo programa funcionam independentemente em diferentes porções de dados. Loop strip mining é uma técnica popular para dividir tarefas paralelas de dados entre processadores independentes, que podem utilizar a unidade vetorial para executar iterações ao mesmo tempo. O palestrante fornece um exemplo de adição de vetor usando SPMD com mineração de loop trip, onde cada programa é executado em diferentes partes dos dados.

  • 00:10:00 Nesta seção, o palestrante explica como diferentes processadores podem trabalhar em diferentes partes dos dados em computação paralela, usando o exemplo de execução de cada bloco de dados como um thread independente. O custo de criação de threads para GPUs é alto, então a computação esperada em cada processador deve ser maior, conhecida como densidade de paralelismo. Para FPGAs, a sobrecarga de criação de threads é muito baixa, portanto, pode haver um grande número de instâncias de execução SGMD. Dados múltiplos de instrução única (SIMD) permitem a execução de uma instrução em vários dados simultaneamente, com muitas unidades lógicas aritméticas (ALUs) executando a instrução juntas. Algoritmos paralelos podem reduzir a quantidade de fluxo de controle e outro hardware em favor das unidades ALU.

  • 00:15:00 Nesta seção, o palestrante explica o conceito de unidades de computação/processamento usadas em um chip para computação. Eles podem receber entradas de dados e executar operações simultaneamente, permitindo uma computação paralela eficiente. A arquitetura é baseada em SMID (Single Instruction Multiple Data) e é amplamente utilizada em hardware GPU. O palestrante destaca a importância das operações atômicas para fins de sincronização, mas alerta sobre o grande custo indireto dessas operações. Os problemas que são decompostos usando o particionamento de dados de entrada provavelmente precisarão ser reestruturados para uma execução eficiente em uma GPU.
Parallel Computing: Software and Hardware
Parallel Computing: Software and Hardware
  • 2020.05.21
  • www.youtube.com
This video introduces the general characteristics of parallel computing, the associated software and hardware methods.
 

4. Dois Documentos Importantes sobre Processadores Heterogêneos



4. Dois Documentos Importantes sobre Processadores Heterogêneos

O vídeo aborda vários artigos relacionados à computação heterogênea, incluindo tendências em design de processador e eficiência energética, os benefícios do uso de hardware personalizado e aceleradores especializados, a importância de balancear núcleos grandes e pequenos e os desafios da movimentação de dados e comunicação eficiente entre os núcleos. Os documentos também discutem a necessidade de entender o agendamento e a partição da carga de trabalho ao trabalhar com processadores heterogêneos e o uso de linguagens de programação e estruturas como OpenCL, CUDA e OpenMP. No geral, os documentos destacam os benefícios potenciais da utilização de vários núcleos e aceleradores para maximizar o desempenho e a eficiência energética em ambientes de computação heterogêneos.

  • 00:00:00 Nesta seção, o palestrante discute dois importantes artigos relacionados à computação heterogênea que foram publicados na última década. O primeiro artigo fala sobre a tendência de ir de um único núcleo de processador para múltiplos núcleos e a utilização eficiente de transistores unship para ganhar mais desempenho. O segundo artigo é um documento de pesquisa que fala sobre como arquitetos, programadores e pesquisadores de computadores estão adotando uma abordagem mais cooperativa no uso de CPU e GPU juntos para maximizar o desempenho e a utilização. O palestrante também fala sobre a tendência de ir de desempenho de núcleo único para desempenho de molécula ou desempenho de throughput usando núcleos e aceleradores heterogêneos. A transcrição também inclui um gráfico que mostra o aumento na contagem de transistores em um único chip de 1971 a 2009 e destaca os principais benefícios do uso da computação heterogênea.

  • 00:05:00 Nesta seção, o vídeo discute o dimensionamento do transistor e como ele pode permitir mais transistores em um único chip, levando a um melhor desempenho e eficiência energética. O vídeo apresenta um diagrama que mostra as diferentes técnicas usadas para projetar microprocessadores, como adicionar mais núcleos ou implementar a execução especulativa. Embora não haja um aumento significativo no desempenho a cada ano, a eficiência energética melhorou quase cinco vezes, permitindo que mais tarefas sejam executadas com um rendimento maior. O vídeo também apresenta a regra de Pollock, que é uma observação simples sobre o desempenho dos processadores.

  • 00:10:00 Nesta seção, o palestrante discute o aumento de desempenho dos processadores à medida que a área ou o número de transistores aumenta. A relação entre esses fatores é aproximadamente a raiz quadrada do número de transistores. Por outro lado, a densidade da DRAM quase dobra a cada dois anos, mas o desempenho em termos de velocidade de leitura/gravação não está acompanhando. O orçamento total de energia é plano, portanto, mesmo reduzindo o tamanho do transistor e aumentando o número de transistores, não melhoraria significativamente o desempenho. A potência de fuga torna-se predominante à medida que o tamanho do transistor diminui, o que significa que confiar apenas no aumento de frequência, redução na tensão de alimentação e capacitância de conexões e fios não pode atingir as metas de desempenho pretendidas, como terabit ou mais operações.

  • 00:15:00 Nesta seção, o palestrante discute o design de vários núcleos em processadores heterogêneos, destacando que pode não ser benéfico ter núcleos grandes e uniformes. Em vez disso, personalizar o hardware com aceleradores fixos ou programáveis e combinar a lógica com os núcleos pode levar a uma melhor utilização dos núcleos. O alto-falante apresenta um exemplo em que um projeto com 30 núcleos menores (5 milhões de transistores cada) supera um projeto com seis núcleos maiores (25 milhões de transistores cada) usando o mesmo número total de transistores (150 milhões). A compensação entre taxa de transferência e desempenho de núcleo único também pode ser otimizada mantendo um equilíbrio entre núcleos grandes e pequenos.

  • 00:20:00 Nesta seção, o palestrante discute o uso de processadores heterogêneos para hardware personalizado e os benefícios de usar núcleos personalizados menores em vez de núcleos de CPU de uso geral. Ao utilizar a lógica especializada para construir unidades funcionais como multiplicadores ou unidades FFT, os projetistas podem obter maior eficiência energética do que com projetos de uso geral. Além disso, o artigo fala sobre os desafios da movimentação de dados e a importância de ter hierarquias de memória eficientes e interconexões para uma comunicação eficiente entre os núcleos. O documento propõe uma divisão de 10% para aceleradores e núcleos especializados, em vez dos tradicionais 90% para a construção de processadores fora de ordem superescalares para obter melhor desempenho de thread único.

  • 00:25:00 Nesta seção, o vídeo discute dois artigos sobre processadores heterogêneos. O primeiro artigo fala sobre os desafios enfrentados na movimentação de dados e eficiência energética. Uma tendência de design é o escalonamento de tensão, permitindo a execução de diferentes núcleos em diferentes velocidades, o que pode reduzir bastante o consumo de energia, dependendo da carga de trabalho e do agendamento de tarefas. O segundo artigo discute a tendência de paralelismo em larga escala e núcleos heterogêneos com tamanhos variados e frequência e tensão flexíveis. Além disso, há um movimento no sentido de usar diferentes aceleradores de hardware embutidos no chip e focar no posicionamento eficiente de dados para reduzir a movimentação desnecessária de dados. O documento reconhece os pontos fortes exclusivos de diferentes arquiteturas de CPU e projeta algoritmos para corresponder aos recursos futuros da CPU.

  • 00:30:00 Nesta seção, o palestrante discute a importância de entender as técnicas de escalonamento e partição de carga de trabalho ao trabalhar com processadores heterogêneos, como CPU FPGA. O agendamento envolve decidir quando uma subtarefa deve ser executada em um processador específico, enquanto a partição da carga de trabalho lida com o particionamento de dados e tarefas. O palestrante também menciona várias linguagens de programação e frameworks como OpenCL, CUDA e OpenMP para diferentes tipos de processadores.
Two Important Papers about Heterogeneous Processors
Two Important Papers about Heterogeneous Processors
  • 2020.05.21
  • www.youtube.com
This video provides an overview of two important papers on the design and programming of heterogenous processors/systems.S. Borkar and A. Chien, The Future o...
 

5. Visão geral do hardware de computação



5. Visão geral do hardware de computação

O vídeo fornece uma visão geral do hardware de computação, discutindo tópicos como arquiteturas de processador, considerações de design, multithreading, cache, hierarquia de memória e design de lógica de controle. Também explica como um programa é um conjunto de instruções que um computador segue para executar uma tarefa e os diferentes tipos de programas, incluindo software de sistema e aplicativos. O vídeo enfatiza a importância dos componentes de hardware de um computador, como CPU e memória, que trabalham juntos para executar programas e realizar tarefas.

  • 00:00:00 Nesta seção, o palestrante apresenta os tópicos que serão abordados na aula, que incluem arquiteturas e inovações de processador, espaço de design arquitetônico, arquitetura de CPU e GPU e FPGA como uma arquitetura emergente de alto desempenho. O palestrante também fala sobre as origens do OpenCL e como ele foi gradualmente moldado por diferentes fornecedores com base nos processadores que fornecem, levando a um modelo de paradigma baseado em blocos de consistência relaxada que alcança a independência da plataforma. O desempenho dos programas OpenCL ainda depende da implementação, algoritmo e quão bem ele pode ser mapeado para a arquitetura de hardware. O design de diferentes processadores requer muitas considerações e compensações, como ter um processador de núcleo único ou vários processadores.

  • 00:05:00 Nesta seção, o vídeo explica algumas das considerações de projeto quando se trata de hardware de computação, como núcleos superescalares e programação de instruções. O vídeo também discute multi-threading como uma forma de aumentar a quantidade de trabalho útil que um processador pode manipular, bem como a importância do cache e da hierarquia de memória. A heterogeneidade nos processadores está se tornando mais comum, o que inclui CPUs com GPUs, FPGAs e núcleos grandes e pequenos. Por fim, o projeto da lógica de controle é crucial, permitindo o reordenamento das instruções para explorar o paralelismo no nível de instrução em fluxos de controle complexos.

  • 00:10:00 Nesta seção, o vídeo explica que um programa é um conjunto de instruções que um computador segue para realizar uma tarefa específica. O programa é composto de código escrito em uma linguagem de programação, que é então compilada ou interpretada em linguagem de máquina que o computador pode entender. O vídeo continua descrevendo os diferentes tipos de programas, incluindo software de sistema como sistemas operacionais e drivers de dispositivo, bem como aplicativos como processadores de texto e jogos. Os componentes de hardware do computador, como a CPU e a memória, trabalham juntos para executar esses programas e executar as tarefas desejadas.
Overview of Computing Hardware
Overview of Computing Hardware
  • 2020.05.22
  • www.youtube.com
This video introduces hardware tradeoffs and conventional CPU architecture.
Razão: