#优化 #LLVM #中间表示 #性能 #应用 #运行时 #跨平台

weld

Weld 是一种用于提高数据密集型应用程序性能的语言和运行时。

5 个版本 (3 个重大更改)

0.4.0 2020年2月13日
0.3.1 2019年8月23日
0.3.0 2019年4月18日
0.2.0 2018年3月18日
0.1.0 2017年9月4日

#102 in 性能分析

BSD-3-Clause

1MB
21K SLoC

Weld

Build Status

文档

Weld 是一种用于提高数据密集型应用程序性能的语言和运行时。它通过使用通用的中间表示来表示库中的核心计算,并在每个框架中优化,从而优化跨库和函数的性能。

现代分析应用程序结合了来自不同库和框架的多个函数来构建复杂的流程。尽管单个函数可以在独立的情况下实现高性能,但由于函数之间的数据移动量很大,组合流程的性能通常远低于硬件限制。Weld 解决此问题的方法是懒加载整个流程的计算,并在需要结果时进行优化和评估。

您可以在我们的 Google 群组 上加入关于 Weld 的讨论,或在 [email protected] 上发布邮件列表。

目录

构建

要构建 Weld,您需要 最新稳定版本的 RustLLVM/Clang++ 6.0。

要安装 Rust,请按照 这里 的步骤进行。您可以通过在 shell 中输入 rustc 来验证 Rust 是否已正确安装在您的系统上。如果您已经安装了 Rust 和 rustup,则可以使用以下命令升级到最新稳定版本:

rustup update stable

MacOS LLVM 安装

要在 macOS 上安装 LLVM,首先安装 Homebrew。然后

brew install llvm@6

Weld 的依赖需要 llvm-config$PATH 中,因此您可能需要创建一个符号链接,以便选择正确的 llvm-config(注意,您可能需要在命令开始处添加 sudo

ln -sf `brew --prefix llvm@6`/bin/llvm-config /usr/local/bin/llvm-config

为确保正确安装,运行 llvm-config ---version。您应该看到 6.0.x

Ubuntu LLVM 安装

要在 Ubuntu 上安装 LLVM,获取 LLVM 6.0 源代码,然后运行 apt-get

在 Ubuntu 16.04(Xenial)上

wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-6.0 main"
sudo apt-get update
sudo apt-get install llvm-6.0-dev clang-6.0

在 Ubuntu 14.04(Trusty)上

wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-add-repository "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-6.0 main"

# gcc backport is required on 14.04, for libstdc++. See https://apt.llvm.org/
sudo apt-add-repository "deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty main"
sudo apt-get update
sudo apt-get install llvm-6.0-dev clang-6.0

Weld 的依赖需要 llvm-config,因此您可能需要创建一个符号链接,以便选择正确的 llvm-config。可能需要 sudo

ln -s /usr/bin/llvm-config-6.0 /usr/local/bin/llvm-config

为确保正确安装,运行 llvm-config ---version。您应该看到 6.0.x 或更高版本。

您还需要 zlib

sudo apt-get install zlib1g-dev

构建 Weld

安装好 LLVM 和 Rust 后,您可以构建 Weld。克隆此存储库,设置 WELD_HOME 环境变量,然后使用 cargo 构建

git clone https://www.github.com/weld-project/weld
cd weld/
export WELD_HOME=`pwd`
cargo build --release

Weld 构建了两个动态链接库(Linux 上的 .so 文件和 Mac 上的 .dylib 文件):libweldlibweldrt

最后,运行单元和集成测试

cargo test

文档

有关 Rust Weld 包 的文档请参阅此处

docs/ 目录包含 Weld 不同组件的文档。

  • language.md 描述了 Weld IR 的语法。
  • api.md 描述了与 Weld 接口的低级 C API。
  • python.md 提供了 Python API 的概述。
  • tutorial.md 包含了如何使用 Weld 构建小型向量库的教程。

Python 绑定

Weld 的 Python 绑定位于 python,示例位于 examples/python

Grizzly

Grizzly 是与 Weld 集成的 Pandas 的子集。有关如何使用 Grizzly 的详细信息,请参阅 python/grizzly。一些使用 Grizzly 的示例工作负载位于 examples/python/grizzly。要运行 Grizzly,还需要设置 WELD_HOME 环境变量,因为 Grizzly 需要通过此变量找到其自己的本地库。

测试

cargo test 运行单元和集成测试。可以使用测试名称子串过滤器运行测试的子集

cargo test <substring to match in test name>

工具

此存储库包含多个有用的命令行工具,这些工具是使用主Weld存储库自动构建的,包括用于检查和调试程序的交互式REPL。有关这些工具的更多信息,请参阅docs/tools.md

依赖项

~8.5MB
~150K SLoC