OCCA é uma estrutura de código aberto, portátil e neutra em termos de fornecedor para programação paralela em plataformas heterogêneas. A API OCCA fornece modelos unificados para conceitos de programação heterogêneos – como dispositivo, memória ou kernel – enquanto a OCCA Kernel Language (OKL) permite a criação de kernels de dispositivos portáteis usando uma extensão baseada em diretiva para a linguagem C.
Aplicações de ciência computacional e engenharia de missão crítica dos setores público e privado contam com o OCCA. Usuários notáveis incluem o Departamento de Energia dos EUA e a Shell.
Principais recursos
OCCA usa o sistema de compilação CMake. Confira o guia de instalação para uma visão geral abrangente de todas as configurações de compilação e instruções para compilação no Windows ou Mac OS.
Por conveniência, o script shell configure-cmake.sh
foi fornecido para conduzir a construção do CMake. Compiladores, sinalizadores e outros parâmetros de construção podem ser ajustados lá. Por padrão, esse script usa ./build
e ./install
para os diretórios de construção e instalação.
A seguir demonstramos uma sequência típica de comandos shell para construir, testar e instalar o occa:
$ ./configure-cmake.sh
$ cmake --build build --parallel < number-of-threads >
$ ctest --test-dir build --output-on-failure
$ cmake --install build --prefix install
Se as dependências estiverem instaladas em um local não padrão, defina a variável de ambiente correspondente para esse caminho.
Durante a instalação, o arquivo Env Modules <install-prefix>/modulefiles/occa
é gerado. Quando este módulo é carregado, os caminhos para os diretórios bin
, lib
e include
instalados são anexados a variáveis de ambiente como PATH
e LD_LIBRARY_PATH
.
Por conveniência, o OCCA fornece arquivos de pacote CMake que são configurados durante a instalação. Esses arquivos de pacote definem um destino importado, OCCA::libocca
, e procuram todas as dependências necessárias.
Por exemplo, o CMakeLists.txt de projetos downstream usando OCCA incluiria
find_package (OCCA REQUIRED)
add_executable (downstream-app ...)
target_link_libraries (downstream-app PRIVATE OCCA::libocca)
add_library (downstream-lib ...)
target_link_libraries (downstream-lib PUBLIC OCCA::libocca)
A interface da linha de comandos OCCA pode ser encontrada em <install-prefix>/bin/occa
. Esta ferramenta pode ser utilizada para consultar informações sobre hardware e configuração do OCCA em uma determinada plataforma.
Por exemplo, chamar occa info
disponibilizará backends OCCA e especificações de hardware relacionadas, enquanto occa env
exibirá os valores das variáveis de ambiente relacionadas ao OCCA. Para ver a lista de todas as opções disponíveis, ligue para occa --help
.
$ occa info
========+======================+=================================
CPU(s) | Processor Name | AMD EPYC 7532 32-Core Processor
| Memory | 251.6 GB
| Clock Frequency | 2.4 MHz
| SIMD Instruction Set | SSE2
| SIMD Width | 128 bits
| L1d Cache Size | 1 MB
| L1i Cache Size | 1 MB
| L2 Cache Size | 16 MB
| L3 Cache Size | 256 MB
========+======================+=================================
OpenCL | Platform 0 | NVIDIA CUDA
| ----------------------+---------------------------------
| Device 0 | NVIDIA A100-PCIE-40GB
| Device Type | gpu
| Compute Cores | 108
| Global Memory | 39.40 GB
========+======================+=================================
CUDA | Device Name | NVIDIA A100-PCIE-40GB
| Device ID | 0
| Memory | 39.40 GB
========+======================+=================================
Precisar de ajuda? Confira o wiki do repositório ou faça uma pergunta na categoria de discussões de perguntas e respostas.
Para fornecer feedback, inicie uma conversa nas categorias geral ou de discussão de ideias.
Este trabalho foi apoiado em parte por
OCCA está disponível sob uma licença do MIT