triSYCL é um projeto de pesquisa para experimentar a especificação do padrão SYCL e dar feedback ao SYCL_committee do Grupo Khronos e também ao comitê ISO C++.
Mais recentemente, este projeto foi usado para experimentar programação C++ de alto nível para AMD AIE CGRA inspirada em alguns conceitos SYCL, conforme explicado em ACAP++ e AIE++: extensões C++ para arquitetura AMD Versal AIE CGRA.
Devido à falta de recursos esta implementação SYCL é muito incompleta e não deve ser usada por um usuário final normal. Felizmente, existem agora muitas outras implementações de SYCL disponíveis, incluindo algumas implementações fortes como DPC++ ou hipSYCL que podem ser usadas em vários alvos.
Esta implementação é baseada principalmente em recursos C++23 apoiados com OpenMP ou TBB para execução paralela na CPU, com Boost.Compute para a camada de interoperabilidade OpenCL de fonte não única e com uma versão experimental LLVM/Clang para o compilador de dispositivo (de 2017-2018, que agora está obsoleto), fornecendo experiência SYCL completa de fonte única, normalmente direcionada a um dispositivo SPIR. Como no SYCL há um substituto de host, esta implementação de CPU também pode ser vista como uma implementação desse substituto.
Desde cerca de 2018, a Intel tem se esforçado muito em seu próprio projeto oneAPI DPC++ SYCL para upstream SYCL em LLVM/Clang, há outro projeto sobre a fusão da implementação oneAPI DPC++ SYCL com triSYCL em https://github.com/triSYCL /sycl para proporcionar uma melhor experiência ao usuário para AMD FPGA em vez de usar nosso compilador de dispositivo experimental obsoleto e desajeitado. Mas isso ainda é muito experimental porque a cadeia de ferramentas da AMD é baseada em versões antigas e incompatíveis do LLVM/Clang e nada disso é suportado pelas equipes de produto da AMD.
triSYCL foi usado para experimentar e fornecer feedback para SYCL 1.2, 1.2.1, 2.2, 2020 e até mesmo para a linguagem de kernel OpenCL C++ 1.0 do OpenCL 2.2.
Isso é fornecido como está, sem qualquer garantia, com a mesma licença do LLVM/Clang.
Líder técnico: Ronan em Keryell Point FR. Os desenvolvimentos começaram primeiro na AMD, depois foram financiados principalmente pela Xilinx e agora novamente pela AMD, uma vez que a Xilinx foi adquirida pela AMD em 2022.
É possível fazer um estágio remunerado em torno do triSYCL, se você tiver algumas habilidades relacionadas a este projeto. Entre em contato com o líder técnico sobre isso. A AMD também está contratando nesta área... :-)
SYCL é um DSEL (Domain Specific Embedded Language) moderno de fonte única baseado em C++ e padrão aberto da Khronos que visa facilitar a programação de aceleradores heterogêneos, aproveitando conceitos existentes inspirados em OpenCL, CUDA, C++AMP, OpenMP...
Um kernel típico com seu lançamento se parece com este código C++ moderno e puro:
queue {}.submit([&](handler &h) {
auto accA = bufA. get_access < access ::mode:: read >(h);
auto accB = bufB. get_access < access ::mode:: write >(h);
h. parallel_for < class myKernel >(myRange, [=](item i) {
accA[i] = accB[i] + 1 ;
});
});
Veja, por exemplo, https://github.com/triSYCL/triSYCL/blob/master/tests/examples/demo_parallel_matrix_add.cpp para obter um exemplo completo.
O SYCL é desenvolvido dentro do comitê Khronos SYCL e, portanto, para obter mais informações sobre o SYCL, consulte https://www.khronos.org/sycl
Observe que mesmo que os conceitos por trás do SYCL sejam inspirados nos conceitos do OpenCL, o modelo de programação SYCL é um modelo de gráfico de tarefas assíncronas muito geral para computação heterogênea visando vários frameworks e APIs e não tem relação com o próprio OpenCL, exceto ao usar o modo de interoperabilidade da API OpenCL , como qualquer outro alvo.
Para o ecossistema SYCL, consulte https://sycl.tech
A maioria de nossos esforços atuais está focada em extensões, como AMD FPGA e Versal ACAP AIE CGRA, fornecendo uma maneira de programar CPU, GPU, FPGA e CGRA ao mesmo tempo em um programa C++ de fonte única.
Este projeto é um trabalho em andamento e atualmente visamos parcialmente apenas a primeira geração de dispositivos, AIE/AIE1, enquanto os modelos atuais de AMD RyzenAI, como o Ryzen 9 7940HS, possuem um AIE-ML/AIE2 como o XDNA/NPU/ UIP.
O modelo de programação de primeira geração, ACAP++, foi baseado em construções C++17/C++20.
Consulte https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/acap/test_aie_mandelbrot.cpp e ao redor, testes/acap e outros diretórios começando com acap para alguns exemplos de código em execução em C++ puro emulação de CPU da biblioteca com este projeto.
Consulte doc/acap.rst para saber mais sobre como instalar/usar o ambiente ACAP++.
O tempo de execução para emulação de CPU e dispositivo AIE é encontrado em include/triSYCL/vendor/Xilinx que também requer um compilador especial fornecido por https://github.com/triSYCL/sycl para rodar em placas VCK190.
O modelo de programação de segunda geração, AIE++, é baseado em construções C++23/C++26, permitindo uma sintaxe ainda mais concisa.
Consulte https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/aie/mandelbrot.cpp para obter alguns exemplos.
O tempo de execução para emulação de CPU e suporte a dispositivos AIE é encontrado em include/aie e o compilador para suporte a dispositivos é https://github.com/triSYCL/sycl
Outros projetos de código aberto relacionados ao AIE que são interessantes para programar o AIE:
Alguma documentação sobre AMD AIE CGRA:
Por favor veja sobre SYCL para ter algum contexto, uma lista de apresentações, alguns projetos relacionados.
SYCL é uma biblioteca de modelos, portanto nenhuma instalação real é necessária.
Existem alguns exemplos que você pode construir.
Consulte Teste.
A arquitetura do tempo de execução e compilador triSYCL descreve a base de código com alguns diagramas de alto nível, mas também como foi possível compilar e usar o compilador de dispositivo obsoleto em alguns FPGA AMD, por exemplo. Agora consulte https://github.com/triSYCL/sycl.
Alguns detalhes sobre a configuração e organização do CMake podem ser encontrados em CMake.
Sim, existem algumas macros usadas no triSYCL! Veja as macros de pré-processador usadas no triSYCL para descobrir algumas delas.
Consulte Variáveis de ambiente com triSYCL.
Consulte Futuros possíveis.
A documentação da implementação triSYCL em si pode ser encontrada em https://trisycl.github.io/triSYCL/Doxygen/triSYCL/html e https://trisycl.github.io/triSYCL/Doxygen/triSYCL/triSYCL-implementation-refman .pdf
ctest
e funciona no Windows 10 com Visual Studio 2017. Funciona também com Ubuntu WSL no Windows. :-) Mais informações