#opencl #hpc #cuda #back-end #computation

nightly parenchyma

高性能计算 (HPC) 框架

5 个版本

使用旧的 Rust 2015

0.0.33 2017年3月18日
0.0.32 2017年3月16日
0.0.3 2017年3月16日
0.0.2 2017年2月15日

#374科学

MIT/Apache

320KB
5K SLoC

parenchyma

Join the chat Project Status License parenchyma

Parenchyma 是从 Collenchyma (因此得名) 的一个硬分叉开始的,Collenchyma 是由 Autumn 团队 以及一群杰出的 贡献者 开发的一个可扩展的 HPC 框架。除了名称和整体设计外,这两个库在功能上相当不同(例如,自动同步(感谢 @alexandermorozov)和回退机制)。因此,在迁移之前,应仔细阅读文档,以免误用框架。如果不这样做,可能会导致 Parenchyma 开发者/贡献者不负责的不当行为。

许多用于文档目的的原始注释仍保留在代码库中,以及一些必要的添加/修改。

免责声明:Parenchyma 目前正在进行大规模的重构和改进。因此,原始 Collenchyma 项目中许多功能可能尚未在 Parenchyma 项目中可用。也可能有一些功能永远不会在 Parenchyma 项目中提供,因为目前正在考虑的不同方法可能比原始方法更好。

示例

Parenchyma 不包含任何扩展包。以下示例假设您已将 parenchyma 和 Parenchyma 扩展包 parenchyma-nn 添加到您的 Cargo 清单中。

extern crate parenchyma as pa;
extern crate parenchyma_nn as pann;

use pa::{Backend, BackendConfig, Native, OpenCL, SharedTensor};
use pa::HardwareKind::GPU;
use pann::NNPackage;

fn main() {
    let ref native: Backend = Backend::new::<Native>().unwrap();

    // Initialize an OpenCL or CUDA backend packaged with the NN extension.
    let ref backend = {
        let framework = OpenCL::new().unwrap();
        let hardware = framework.available_hardware.clone();
        let configuration = BackendConfig::<OpenCL, NNPackage>::new(framework, hardware, GPU);

        Backend::try_from(configuration).unwrap()
    };

    let data: Vec<f64> = vec![3.5, 12.4, 0.5, 6.5];
    let length = data.len();

    // Initialize two `SharedTensor`s.
    let ref x = SharedTensor::with(backend, length, data).unwrap();
    let ref mut result = SharedTensor::new(length);

    // Run the sigmoid operation, provided by the NN extension, on 
    // your OpenCL/CUDA enabled GPU (or CPU, which is possible through OpenCL)
    backend.sigmoid(x, result).unwrap();

    // Print the result: `[0.97068775, 0.9999959, 0.62245935, 0.9984988] shape=[4], strides=[1]`
    println!("{:?}", result.read(native).unwrap().as_native().unwrap());
}

许可证

双许可

依赖项

~2.5MB
~43K SLoC