#bindings-generator #futhark #generate #interact #exported #file #function

bin+lib genfut

生成 Futhark 的绑定

15 个版本

0.5.0 2023 年 1 月 28 日
0.4.3 2022 年 6 月 15 日
0.4.2 2021 年 9 月 3 日
0.4.1 2020 年 11 月 14 日
0.3.0 2020 年 7 月 13 日

#3 in #exported

每月 31 下载
用于 neptune-triton-generator

ISC 许可证

35KB
860

Genfut

这是一个用于生成与 Futhark 文件中导出函数交互的 Rust 库的工具。

用法

作为可执行二进制文件

genfut <Rust lib name> <futhark_file.fut>

请注意,使用 bindings 模块可能不一定具有通用性。请谨慎使用。

作为库

build.rs

use genfut::{genfut, Opt};

fn main() {
    genfut(Opt {
        name: "matmul".to_string(),
        file: std::path::PathBuf::from("matmul.fut"),
        author: "Name <[email protected]>".to_string(),
        version: "0.1.0".to_string(),
        license: "YOLO".to_string(),
        description: "Futhark matrix multiplication example".to_string(),
    })
}

使用 genfut 生成的库的示例

use matmul::{Array_i32_2d, Error, FutharkContext};

fn main() -> Result<(), Error> {
    let a = vec![1, 2, 3, 4];
    let b = vec![2, 3, 4, 1];

    let mut ctx = FutharkContext::new()?;

    let a_arr = Array_i32_2d::from_vec(ctx, &a, &vec![2, 2])?;
    let b_arr = Array_i32_2d::from_vec(ctx, &b, &vec![2, 2])?;

    let res_arr = ctx.matmul(a_arr, b_arr)?;

    let res = &res_arr.to_vec()?;

    for i in 0..4 {
        print!("{} ", res.0[i]);
        if i == 1 {
            print!("\n");
        }
    }
    print!("\n");
    println!("{:?}", res.0);
    Ok(())
}

MacOS

由于整个工具链的怪癖,目前不支持 MacOS。生成的库可以在 MacOS 上构建,并且不需要安装 OpenCL。但是,在运行时调用任何 API 函数可能会导致错误,因此该库的用户应避免在 MacOS 上这样做。

依赖关系

~9MB
~170K SLoC