OCCA 是一个开源、可移植且供应商中立的框架,用于异构平台上的并行编程。 OCCA API 为异构编程概念(例如设备、内存或内核)提供统一模型,而 OCCA 内核语言 (OKL) 允许使用基于指令的 C 语言扩展来创建便携式设备内核。
公共和私营部门的关键任务计算科学和工程应用程序都依赖 OCCA。著名用户包括美国能源部和壳牌公司。
主要特点
OCCA 使用 CMake 构建系统。查看安装指南,全面了解所有构建设置以及在 Windows 或 Mac OS 上构建的说明。
为了方便起见,提供了 shell 脚本configure-cmake.sh
来驱动 CMake 构建。可以在那里调整编译器、标志和其他构建参数。默认情况下,此脚本使用./build
和./install
作为构建和安装目录。
下面演示了构建、测试和安装 occa 的典型 shell 命令序列:
$ ./configure-cmake.sh
$ cmake --build build --parallel < number-of-threads >
$ ctest --test-dir build --output-on-failure
$ cmake --install build --prefix install
如果依赖安装在非标准位置,请将相应的环境变量设置为此路径。
安装期间,会生成 Env 模块文件<install-prefix>/modulefiles/occa
。加载此模块时,已安装的bin
、 lib
和include
目录的路径将附加到环境变量(例如PATH
和LD_LIBRARY_PATH
中。
为了方便起见,OCCA 提供了在安装过程中配置的 CMake 包文件。这些包文件定义导入的目标OCCA::libocca
,并查找所有必需的依赖项。
例如,使用 OCCA 的下游项目的 CMakeLists.txt 将包括
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)
OCCA 命令行界面可以在<install-prefix>/bin/occa
中找到。该工具可用于查询给定平台上有关硬件和 OCCA 配置的信息。
例如,调用occa info
将获得 OCCA 后端和相关硬件规格,而occa env
将显示 OCCA 相关环境变量的值。要查看所有可用选项的列表,请调用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
========+======================+=================================
需要帮助吗?查看存储库 wiki 或在问答讨论类别中提出问题。
要提供反馈,请在一般或想法讨论类别中开始对话。
这项工作得到了部分支持
OCCA 可在 MIT 许可下使用