Intel - logoCriando sistemas de memória heterogêneos em FPGA SDK para plataformas personalizadas OpenCL
Instruções

Criando sistemas de memória heterogêneos no Intel® FPGA SDK para plataformas personalizadas OpenCL

A implementação de memória heterogênea em uma plataforma personalizada permite mais largura de banda de interface de memória externa (EMIF), bem como acessos de memória maiores e mais rápidos. A combinação de acesso heterogêneo à memória com um otimizado
O kernel OpenCL ™(1) pode resultar em melhorias significativas de desempenho para seu sistema OpenCL.
Esta nota de aplicação fornece orientação sobre como criar sistemas de memória heterogêneos em uma plataforma personalizada para uso com o Intel® FPGA SDK para OpenCL(2). A Intel assume que você é um designer de FPGA experiente que está desenvolvendo plataformas personalizadas que contêm sistemas de memória heterogêneos.
Antes de criar os sistemas de memória heterogênea, familiarize-se com os documentos Intel FPGA SDK para OpenCL especificados abaixo.
Informações relacionadas

  • Intel FPGA SDK para guia de programação OpenCL
  • Guia de práticas recomendadas do Intel FPGA SDK para OpenCL
  • Intel FPGA SDK para OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide

1.1. Verificando a Funcionalidade da Placa FPGA e das Interfaces EMIF

Verifique cada interface de memória independentemente e, em seguida, instancie sua plataforma personalizada usando memória global.

  1. Verifique cada interface de memória usando projetos de hardware que possam testar a velocidade e a estabilidade de cada interface.
  2. Crie uma instância de sua plataforma personalizada usando memória global.
    1. Por exemploample, se você tiver três interfaces DDR, uma delas deve ser mapeada como memória heterogênea. Nesse caso, verifique a funcionalidade da pilha OpenCL com cada interface DDR independentemente.
      OpenCL e o logotipo OpenCL são marcas comerciais da Apple Inc. usadas com permissão do Khronos Group™.
    2.  O Intel FPGA SDK para OpenCL é baseado em uma Especificação Khronos publicada e passou no Processo de Teste de Conformidade Khronos. O status de conformidade atual pode ser encontrado em www.khronos.org/conformance.

Corporação Intel. Todos os direitos reservados. Intel, o logotipo Intel e outras marcas Intel são marcas comerciais da Intel Corporation ou de suas subsidiárias. A Intel garante o desempenho de seus produtos FPGA e semicondutores de acordo com as especificações atuais de acordo com a garantia padrão da Intel, mas se reserva o direito de fazer alterações em quaisquer produtos e serviços a qualquer momento sem aviso prévio. A Intel não assume nenhuma responsabilidade ou obrigação decorrente da aplicação ou uso de qualquer informação, produto ou serviço aqui descrito, exceto conforme expressamente acordado por escrito pela Intel. Os clientes da Intel são aconselhados a obter a versão mais recente das especificações do dispositivo antes de confiar em qualquer informação publicada e antes de fazer pedidos de produtos ou serviços. *Outros nomes e marcas podem ser reivindicados como propriedade de terceiros.
ISO 9001: 2015 registrado
Como alternativa, se você tiver duas interfaces DDR e uma interface quad data rate (QDR), verifique a funcionalidade da pilha OpenCL das duas interfaces DDR e da interface QDR independentemente.
A Intel recomenda que você use designs exclusivos PCI Express® – (PCIe® -) ou EMIF para testar suas interfaces de memória. Depois de verificar se cada interface de memória está funcionando e se o design do OpenCL funciona com um subconjunto das interfaces de memória, prossiga
para criar um sistema de memória heterogêneo totalmente funcional. 
1.2. Modificando o board_spec.xml File
Modifique o board_spec.xml file para especificar os tipos de sistemas de memória heterogêneos que estão disponíveis para os kernels OpenCL.
Durante a compilação do kernel, o Intel FPGA SDK para OpenCL Offline Compiler atribui argumentos do kernel a uma memória com base no argumento de localização do buffer que você especificar.
1. Navegue até board_spec.xml file no diretório de hardware de sua plataforma personalizada.
2. Abra o board_spec.xml file em um editor de texto e modifique o XML de acordo.
Por exemploample, se seu sistema de hardware tiver duas memórias DDR como memória global padrão e dois bancos QDR que você modela como memória heterogênea, modifique as seções de memória do board_spec.xml file para se parecer com o seguinte:
















1.3. Configurando vários divisores de memória no Qsys
Atualmente, o divisor de banco de memória OpenCL no design Qsys não suporta número de bancos de memória não-potência de 2, o que não é uma limitação para configurações típicas. No entanto, há cenários em que são necessárias interfaces de memória sem potência de 2. Para acomodar interfaces de memória sem potência de 2, use vários divisores de banco de memória OpenCL para criar sistemas de memória heterogêneos com bancos de memória sem potência de 2. Você deve criar vários divisores de banco de memória OpenCL quando tiver um sistema de memória verdadeiramente heterogêneo. Considere um sistema com uma interface de memória DDR e uma interface de memória QDR. Como os dois bancos têm diferentes topologias de memória, não é possível combiná-los em uma única memória global.
Figura 1. Diagrama de blocos de um sistema de memória heterogênea de três bancos
Este sistema de memória heterogênea contém duas interfaces de memória DDR e uma interface de memória QDR.Intel Criando Sistemas de Memória Heterogênea em SDK FPGA para Plataformas Personalizadas OpenCL - fig. 1Se você estiver usando a versão 16.0, 16.0.1 ou 16.0.2 do software Intel Quartus® Prime e o Altera SDK para OpenCL, o OpenCL Memory Bank Divider manipula incorretamente picos de memória nos limites de endereço. Para contornar esse problema conhecido, adicione uma ponte de pipeline com um tamanho de rajada de 1 e conecte seu mestre Avalon ®Memory-Mapped (Avalon-MM) à porta escravo do OpenCL Memory Bank Divider.
Observação:
Esse problema conhecido foi corrigido no software Intel Quartus Prime e no Intel FPGA SDK para OpenCL versão 16.1.
Figura 2. Diagrama de blocos de um sistema de memória heterogênea de três bancos com uma ponte de pipeline Intel Criando Sistemas de Memória Heterogênea em SDK FPGA para Plataformas Personalizadas OpenCL - fig. 21.4. Modificando o programa Boardtest e o código do host para sua solução de memória heterogênea
Use o kernel boardtest.cl que vem com o Intel FPGA SDK para OpenCL Custom Platform Toolkit para testar a funcionalidade e o desempenho de sua Custom Platform.
O programa boardtest é um kernel OpenCL que permite testar a largura de banda do host para o dispositivo, a largura de banda da memória e a funcionalidade geral de sua plataforma personalizada.

  1. Navegue até o diretório /board/custom_platform_toolkit/tests/boardtest.
  2. Abra o boardtest.cl file em um editor de texto e atribua um local de buffer para cada argumento de memória global.
    Por exemploampem:
    __kernel vazio
    mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
    Aqui, uint *src é atribuído à memória DDR e uint *dst é atribuído à memória QDR. O board_spec.xml file especifica as características de ambos os sistemas de memória.
  3. Para aproveitar sua solução de memória heterogênea em seu sistema OpenCL, modifique seu código de host adicionando o sinalizador CL_MEM_HETEROGENEOUS_INTELFPGA à sua chamada clCreateBuffer.
    Por exemploampem:
    ddatain = clCreateBuffer(contexto, CL_MEM_READ_WRITE | memflags
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
    A Intel recomenda enfaticamente que você defina o local do buffer como um argumento do kernel antes de gravar o buffer. Ao usar uma única memória global, você pode gravar os buffers antes ou depois de atribuí-los a um argumento do kernel. Em sistemas de memória heterogênea, o host define a localização do buffer antes de gravar o buffer. Em outras palavras, o host chamará a função clSetKernelArgument antes de chamar a função clEnqueueWriteBuffer.
    No código do host, invoque as chamadas clCreateBuffer, clSetKernelArg e clEnqueueWriteBuffer na seguinte ordem:
    ddatain = clCreateBuffer(contexto, CL_MEM_READ_WRITE | memflags |
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
    … status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
    … status = clEnqueueWriteBuffer(fila, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
    O arquivo ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file apresenta uma ordem semelhante dessas chamadas de função.
  4.  Depois de modificar o boardtest.cl file e o código do host, compile o código do host e do kernel e verifique sua funcionalidade.
    Ao compilar o código do kernel, você deve desabilitar o burst-interleaving de todos os sistemas de memória, incluindo o –no-interleaving opção no comando aoc.

Informações relacionadas
Desativando Intercalação em Rajada de Memória Global (–sem intercalação )

1.5. Verificando a funcionalidade de sua memória heterogênea Sistema
Para garantir que o sistema de memória heterogênea funcione corretamente, desmarque o sinalizador CL_CONTEXT_COMPILER_MODE_INTELFPGA em seu código de host.
Em sistemas OpenCL com memória homogênea, você tem a opção de definir o sinalizador CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 em seu código de host para desabilitar a leitura do .aocx file e a reprogramação do FPGA. Definir o sinalizador CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 é útil ao instanciar sua placa para verificar a funcionalidade de sua plataforma personalizada sem projetar a planta baixa e especificar as regiões LogicLock™.
Com sistemas de memória heterogêneos, o ambiente de tempo de execução deve ler os locais de buffer de cada buffer, descritos no arquivo .aocx file, para verificar a funcionalidade dos sistemas de memória. No entanto, talvez você queira verificar a funcionalidade de sua plataforma personalizada sem implementar os recursos finais do design da placa, como projetar a planta baixa e especificar as regiões do LogicLock.

  1. Verifique se o sinalizador CL_CONTEXT_COMPILER_MODE_INTELFPGA não está definido em seu código de host.
  2. Navegue até o quadro/ diretório /source/host/mmd de sua plataforma personalizada.
  3. Abra o dispositivo mapeado em memória acl_pcie_device.cpp (MMD) file em um editor de texto.
  4.  Modifique a função de reprogramação no acl_pcie_device.cpp file adicionando um retorno 0; linha, como mostrado abaixo:
    int ACL_PCIE_DEVICE::reprogram(void *dados, size_t data_size)
    {
    retornar 0;
    // assume falha
    int reprogram_failed = 1;
    // não assume rbf ou hash em fpga.bin
    int rbf_or_hash_not_provided = 1;
    // assume que os hashes de revisão de base e importação não correspondem
    int hash_mismatch = 1;

    }
  5. Recompile o acl_pcie_device.cpp file.
  6. Verifique se o sinalizador CL_CONTEXT_COMPILER_MODE_INTELFPGA permanece não definido.
    Atenção: Depois de adicionar, retorne 0; para a função reprogramar e recompilar o MMD file, o ambiente de tempo de execução lerá o arquivo .aocx file e atribua os locais de buffer, mas não reprogramará o FPGA. Você deve corresponder manualmente a imagem FPGA com o .aocx file. Para reverter esse comportamento, remova return 0; da função reprogramar e recompilar o MMD file.

1.6. Histórico de revisão do documento

Data Versão Mudanças
Dez-17 2017.12.01 • CL_MEM_HETEROGENEOUS_ALTERA renomeado para CL_MEM_HETEROGENEOUS_INTELFPGA.
Dez-16 2016.12.13 • CL_CONTEXT_COMPILER_MODE_ALTERA renomeado para CL_CONTEXT_COMPILER_MODE_INTELFPGA.

Intel - logoCriando sistemas de memória heterogêneos no Intel® FPGA SDK para OpenCL
Plataformas personalizadas
intel Criando sistemas de memória heterogêneos em FPGA SDK para plataformas personalizadas OpenCL - ícone 1 Enviar feedback
intel Criando sistemas de memória heterogêneos em FPGA SDK para plataformas personalizadas OpenCL - ícone Versão online
intel Criando sistemas de memória heterogêneos em FPGA SDK para plataformas personalizadas OpenCL - ícone 1 Enviar feedback
Identificação: 683654
Versão: 2016.12.13

Documentos / Recursos

Intel Criando sistemas de memória heterogêneos em FPGA SDK para plataformas personalizadas OpenCL [pdf] Instruções
Criação de sistemas de memória heterogênea em FPGA SDK para plataformas personalizadas OpenCL, Criação de sistemas de memória heterogêneas, SDK FPGA para plataformas personalizadas OpenCL

Referências

Deixe um comentário

Seu endereço de e-mail não será publicado. Os campos obrigatórios estão marcados *