Halide源码编译

Halide编译安装与基本数据结构 Overview Halide是为了在现代计算机上编写更高性能的图像处理代码而设计的一种编程语言。目前只吃的目标为: CPU架构:X86, ARM, MIPS, Hexagon, PowerPC 操作系统:Linux, Windows, macOS, Andriod, IOS, Qualcomm QuRT GPU计算API: CUDA,OpenGL, OpenCL, Apple Metal, Microsoft Direction X 12 Halide不是独立的一种编程语言,而是嵌入在C++中,这 阅读详情

Halide

  Halide 算是一种编程模式,主要用于在现代机器上来进行高性能的图像和数组处理。其寄生在C++编程语言中,作为DSL编程语言(特定域语言)来实现高性能计算。
  目前Halide的支持情况如下所示:

  • CPU架构:X86, ARM, MIPS, Hexagon, PowerPC, RISC-V
  • 操作系统:Linux, Windows, macOS, Android, iOS, Qualcomm QuRT
  • GPU并行编程支持:CUDA, OpenCL, OpenGL Compute Shaders, Apple Metal, Microsoft Direct X 12
    支持的编译特性如下所示:
  • 能够使用Halide的C++接口在C++代码中在内存上构建Pipeline表达式
  • 能够编译表达式,持久化编译好的表达式
  • 能够运行时编译(JIT-Compile)
  • 提供了Python接口
  • 要求使用C++17标准

为何要源码编译?

  理由千奇百怪,但是人类折腾不止。那么我所能够想到的理由如下所示:

  1. 不希望使用vcpkg包管理工具(尤其是不会用vcpkg的同志,比如我);
  2. 有开发工具洁癖的人,不想要使用到那么多的编译工具(比如我);
  3. 想要把Halide编译出可以随意搬动的第三库(尤其是在跨机器上开发的时候,更是如此);
  4. 官方发布编译好的Halide二进制包不符合自己的开发环境(比如Ubuntu18.04-x84_64就不存在);

  实际上,可能大部分的人是因为没有适合自己机器环境的情况下,才会选择从源码开始编译

源码编译LLVM库

  Halide要求比较新的LLVM库,所以我们可以遵循以下的操作来一步一步进行编译和环境设置:

# 1.下载LLVM源码文件,保存为llvm.zip
curl -o llvm.zip https://codeload.github.com/llvm/llvm-project/zip/refs/tags/llvmorg-13.0.0
# 2.解压
unzip llvm.zip
# 3.编译
cd llvm-project-llvmorg-13.0.0
# 3.1.创建安装和编译目录文件
if [ ! -d "./llvm-build" ]; then
 	mkdir llvm-build
fi
if [ ! -d "./llvm-install" ]; then
 	mkdir llvm-install
fi
# 3.2.进行编译
cmake -DCMAKE_BUILD_TYPE=Release \
        -DLLVM_ENABLE_PROJECTS="clang;lld;clang-tools-extra" \
        -DLLVM_TARGETS_TO_BUILD="X86;ARM;NVPTX;AArch64;Mips;Hexagon;WebAssembly" \
        -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_ASSERTIONS=ON \
        -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_BUILD_32_BITS=OFF \
        -S llvm -B llvm-build
cmake --build llvm-build -j32
cmake --install llvm-build --prefix llvm-install
# 4.环境配置
echo "export LLVM_ROOT=`pwd`/llvm-install" >> ~/.bashrc
echo 'export LLVM_CONFIG=$LLVM_ROOT/bin/llvm-config' >> ~/.bashrc
echo 'export PATH=$PATH:$LLVM_ROOT/bin' >> ~/.bashrc

源码编译Halide

  Halide官网链接: https://github.com/halide/Halide.
  上述链接中,虽然说明了如何进行安装,但是在实际操作的时候会发现非常多的问题,目前我所遇到的问题就是:

  • pybing11无法git clone,而且因为是在cmake中进行设置,所以更难绕过这个步骤
  • 后端中的opencl无法正确编译

  而我对应的解决思路就是:

  • 不编译Halide的python接口
  • 不编译opencl这个后端

  可能你遇到的问题同我一样,那么将会非常幸运,但是如果你遇到的不一样的问题,就需要自行根据CMakeLists.txt的内容去关闭或者打开某些开关,或者是去设置某些第三方库路径等操作了。
  具体的编译命令如下所示:

# 1.下载Halide的源码
curl -o Halide.zip https://codeload.github.com/halide/Halide/zip/refs/heads/main
# 2.解压文件
unzip Halide.zip
# 3.编译
if [ ! -d "./build" ]; then
 	mkdir build
fi
cd build
# 关闭python_bindings和target_opencl开关
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_DIR=$LLVM_ROOT/lib/cmake/llvm -DWITH_PYTHON_BINDINGS=OFF -DTARGET_OPENCL=OFF -S ..
cmake --build . -j32
# 4.默认安装在/usr/local下面
make install -j32

测试Halide是否编译成功

  最好的办法就是运行教程示例,而因为Halide自带的教程需要使用到gcc编译命令,十分繁琐。因此我们可以直接从网上克隆一个可使用的教程示例,同时进行一键运行编译:

git clone https://github.com/pengzhikang/Halide-Learning.git
cd Halide-Learning/tutorial
chmod +x build.sh

  如果没有问题,我们将会看到如下所示的内容:

<----------------------------------Begin Run Test------------------------------------->
Evaluating gradient
Begin pipeline gradient.0()
Tag gradient.0() tag = "func_type_and_dim: 1 0 32 1 2 0 8 0 8"
......省略.......

Evaluating sin(x) + cos(y), and printing cos(y) at a single pixel
-0.399985 <- this is cos(y) at x, y == (37, 42)

Evaluating sin(x) + cos(y), and printing whenever cos(y) < 0
-0.416147 cos(y) < 0 at y == 2
-0.416147 cos(y) < 0 at y == 2
-0.416147 cos(y) < 0 at y == 2
-0.416147 cos(y) < 0 at y == 2
-0.989992 cos(y) < 0 at y == 3
-0.989992 cos(y) < 0 at y == 3
-0.989992 cos(y) < 0 at y == 3
-0.989992 cos(y) < 0 at y == 3
Printing a complex Expr: ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((1 + 2) + fizz) + 4) + buzz) + fizz) + 7) + 8) + fizz) + buzz) + 11) + fizz) + 13) + 14) + (fizz*buzz)) + 16) + 17) + fizz) + 19) + buzz) + fizz) + 22) + 23) + fizz) + buzz) + 26) + fizz) + 28) + 29) + (fizz*buzz)) + 31) + 32) + fizz) + 34) + buzz) + fizz) + 37) + 38) + fizz) + buzz) + 41) + fizz) + 43) + 44) + (fizz*buzz)) + 46) + 47) + fizz) + 49) + buzz) + fizz) + 52) + 53) + fizz) + buzz) + 56) + fizz) + 58) + 59) + (fizz*buzz)) + 61) + 62) + fizz) + 64) + buzz) + fizz) + 67) + 68) + fizz) + buzz) + 71) + fizz) + 73) + 74) + (fizz*buzz)) + 76) + 77) + fizz) + 79) + buzz) + fizz) + 82) + 83) + fizz) + buzz) + 86) + fizz) + 88) + 89) + (fizz*buzz)) + 91) + 92) + fizz) + 94) + buzz) + fizz) + 97) + 98) + fizz)
Success!
<----------------------------------End       Test------------------------------------->

  至此,我们从源码编译Halide算是成功了。

Halide: 一种用于优化图像处理管道中的并行性、局部性和重新计算的语言和编译器 Halide: A Language and Compiler for Optimizing Parallelism, Locality, and Recomputation in Image Processing Pipelines 他人笔记:https://blog.csdn.net/tiaozhanzhe1900/article/details/102812485 Halide简介:https://blog.csdn.net/weixin_42261213/article/details/10003 阅读详情

相关推荐

windows安装Halide

https://github.com/halide/Halide/releases 下载Halide压缩包,解压 添加环境变量,C:\Opencv3.4\halide\Debug;C:\Opencv3.4\halide\Release ①Linker>general>Adiditional Library Directories release C:\lib\halide\Releas...

勉強 1711

【ubuntu编译安装Halide】

安装编译halide

JKANG94的博客 1299

Halide-10.0.0-x86-64-windows.zip

halide Windows_64 库

halide编程技术指南(连载七)

本文是halide编程指南的连载,已同步至公众号 第11章 交叉编译 // 本课演示如何使用Halide作为交叉编译器,从任何平台生成任何平台的代码。 // 在linux平台, 你可以像这样编译和运行它: // g++ lesson_11*.cpp -g -std=c++11 -I <path/to/Halide.h> -L <path/to/libHalide.so> -lHalide -lpthread -ldl -o lesson_11 // LD_LIBRARY_P

Aoulun的博客 799

MIPI转LVDS芯片调试实战:从Kernel到UEFI的完整点亮流程

本文详细解析了MIPI转LVDS芯片调试的全流程,从Kernel驱动开发到UEFI早期初始化,涵盖I2C通信、电源时序控制等核心挑战。通过LT9211芯片实战案例,提供设备树配置、电源时序优化及显示异常排查等实用技巧,助力工程师高效完成屏幕调试工作。

weixin_30314813的博客 450

深入浅出ISP:用RKISP2.x Tuner工具理解AWB、AE、HDR等核心模块的实战调参

本文深入解析RKISP2.x Tuner工具在ISP图像处理中的实战应用,重点探讨AWB、AE、HDR等核心模块的调参技巧。通过环境搭建、调试工具使用和实际案例,帮助开发者掌握如何在不同光照条件下优化图像质量,实现精准的白平衡、曝光控制和动态范围处理。

weixin_26802933的博客 487

Halide编译与构建指南:从源码到可执行程序

本文详细介绍了Halide高性能图像和数组处理语言的完整编译与构建流程。内容涵盖Halide的核心编译依赖与环境要求,包括LLVM版本兼容性策略、各平台(Linux、macOS、Windows)的具体环境配置、可选功能依赖以及环境验证步骤。同时深入解析了LLVM集成与构建配置机制,包括CMake配置选项详解、链接配置策略和多目标架构支持。最后提供了跨平台构建策略与实践指南,以及常见构建问题的解决方

gitblog_00446的博客 523

别再死磕SPWM了!手把手教你用STM32实现SVPWM驱动PMSM电机(附代码)

本文详细介绍了如何使用STM32实现SVPWM驱动PMSM电机,对比传统SPWM方案,SVPWM在电压利用率、电流THD、转矩脉动和稳态温升等方面均有显著提升。通过克拉克变换优化、扇区快速判断和矢量作用时间补偿等核心算法,结合STM32硬件加速技巧,实现高效电机控制。附代码示例,助力开发者快速掌握SVPWM技术。

weixin_28733777的博客 273

Halide学习笔记----Halide tutorial源码阅读7

Halide入门教程07// Halide tutorial lesson 7: Multi-stage pipelines // Halide教程第七课: 多阶段流水线// On linux, you can compile and run it like so: // 在linux平台,按如下方式编译执行 // g++ lesson_07*.cpp -g -std=c++11 -I ../inc

luzhanbo207的博客 1592

11. TI MSPM0G3507 DMA传输实战:ADC数据自动搬运与电压采集

本文以TI MSPM0G3507为例,详细讲解了如何利用DMA(直接存储器访问)实现ADC数据的自动搬运与电压采集。通过实战演示,解放CPU资源,提升系统实时性与效率,适用于电赛备赛及嵌入式开发中的数据采集场景。

weixin_42465140的博客 131

ADS新手必看:用Filter DesignGuide快速搞定一个4GHz LC低通滤波器(附保姆级避坑指南)

本文为ADS新手提供了4GHz LC低通滤波器的完整设计流程,重点介绍了如何使用Filter DesignGuide避免参数设置陷阱、正确解读仿真结果以及解决实际电路与理论值的偏差问题。通过真实工程案例,详细讲解了工程创建、Filter DesignGuide配置、电路优化、仿真设置及实际工程中的进阶技巧,帮助工程师快速掌握LC滤波器设计。

weixin_30878501的博客 300

Halide 环境配置--ubuntu

参考第二篇, 直接操作, 无bug.clone Halide源码。

luoganttcc的博客 254

Multisim14.0仿真应用设计(三十九)74LS183 高速全加器应用仿真

74LS183是一种高速全加器,可以同时执行四位二进制数的加法运算。它的输入端包括两个4位二进制数和一个进位信号,输出端则为一个4位二进制数和一个进位信号。

zhusl6688的博客 3851

为Halide安装opencl支持

打开TargetOpenCL开关,我们可以看到使用opencl进行推理的时候,计算时调用的openclapi是如何的。展示的测速结果如下所示,这里可以看出来,虽然都是使用了cpu进行计算,但是还是intel-cpu-opencl速度更快些。compile_jit进行处理操作。查看主机平台支持的设备平台。设置kernel参数。...

Pengcode的博客 715

AI在保险产品定价优化中的创新应用

在当今保险市场中,准确合理的产品定价是保险公司实现可持续发展的关键因素之一。传统的保险产品定价主要基于经验数据和精算模型,但这种方式往往存在数据处理效率低、对复杂风险因素考虑不足等问题。本文的目的在于深入探讨AI技术如何在保险产品定价中进行创新应用,以提高定价的准确性、效率和灵活性,更好地满足市场需求和客户个性化需求。本文的范围涵盖了AI技术在保险产品定价各个环节的应用,包括风险评估、费率计算、产品设计等方面。同时,还会涉及到相关的核心算法、数学模型以及实际应用案例等内容。

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 982

深度学习在传感器数据分析中的创新应用

传感器是物理世界与数字世界的“接口”,其生成的高维、时序、多源数据蕴含着设备状态、环境变化、用户行为等关键信息。传统传感器数据分析依赖手工特征工程与简单机器学习模型,难以应对复杂场景下的非线性、长程依赖与实时性需求。深度学习通过自动特征提取非线性建模与端到端学习,成为传感器数据处理的革命性工具。本文从概念基础理论框架架构设计实现机制到实际应用,系统拆解深度学习与传感器数据的融合逻辑,结合工业预测维护医疗健康监测智能交通等场景,揭示其技术边界与未来演化方向。

大数据洞察的博客 568

在Ubuntu18.04上构建Halide

build halide on ubuntu18.04 下载Halide https://github.com/halide/Halide 使用LLVM和Makefile构建Halide 1.打开 http://releases.llvm.org/download.html 2.选择适合你机型的prebuilte库 3.在环境变量中添加LLVM export LLVM_CONFIG=<pa...

gaussrieman123的博客 1584

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Halide Python 绑定完全指南:安装、构建、JIT/AOT 编译与 Generator 实战

本篇技术指南以 Halide 官方文档 [doc/Python.md](https://link.gitcode.com/i/e0aff5673403b6f290668e919a1dd84b) 为核心骨架,系统讲解 Halide 的 Python 绑定(Python bindings):从 PyPI 安装与源码构建、与 C++ API 的差异,到用 Python 直接编写 JIT 图像处理代码,以

gitblog_00905的博客 196

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Tx2 NX编译Halide13.0.1

1,安装依赖:llvm13(Release LLVM 13.0.0 · llvm/llvm-project · GitHub), 升级cmake到3.22.0. 下载依赖库:http://ports.ubuntu.com/ubuntu-ports/pool/main/n/ncurses/libtinfo-dev_6.1-1ubuntu1.18.04_arm64.deb下载后安装sudo dpkg -i libtinfo-dev_6.1-1ubuntu1.18.04_arm64.deb 2,配置环境su

shonmark的博客 967

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Tensor Comprehensions部署指南:Docker、Conda和源码编译三种方式

Tensor Comprehensions(TC)是一个强大的机器学习内核自动优化框架,能够**自动合成高性能的机器学习内核**,显著提升深度学习模型的计算效率。无论你是机器学习研究者还是开发者,掌握Tensor Comprehensions的部署方法都是开启高效计算的第一步。本文将详细介绍三种主流部署方式:Docker容器化部署、Conda包管理安装和源码编译构建,帮助你快速搭建Tensor C

gitblog_00053的博客 561

艾尔登法环存档换 SteamID 打不开?ER-Save-Editor 的存档迁移与修改上手指南

ER-Save-Editor 是一款开源的艾尔登法环存档编辑器,支持 PC 的 .sl2 存档和 PlayStation 通过 Save Wizard 导出的 TXT 文件。你可以用它修改存档绑定的 SteamID 来迁移进度,也能调整物品、装备与等级进度,适合换设备、换账号或做 build 的玩家。 ## 什么时候用得上:换设备、换账号与 build 定制 - 换电脑或换 Steam 账号后

gitblog_00575的博客 363

Hammer服务器自修复机制揭秘:陈旧哈希读修复与409冲突自动收敛

Hammer 是一款跨平台的小说创作工具,其内置服务器带有一套优雅的自修复机制:**陈旧哈希读修复(Read-Repair)**与 **409 冲突自动收敛**。当哈希算法升级、字段结构演化或多设备并发编辑时,服务器与客户端会在同步过程中悄悄修复不一致的数据,而用户几乎无感。本文将拆解这套机制的三层修复路径,帮你理解"为什么 Hammer 的同步几乎从不丢数据"。 ## Hammer 服务器同步

gitblog_00020的博客 282

LLVM-4.0.1 linux配置安装(64位Ubuntu16)

LLVM-4.0.1 linux配置安装(64位Ubuntu16) LLVM Clang Surround360 Halide internal compiler error: Killed

fan2273的博客 7804

Halide 源码仓库开发指南:从架构全景到构建、测试与协作规范

> 本文是一份面向开发者的 Halide 仓库实战指南,围绕仓库根目录下 `.claude/CLAUDE.md` 这一“AI 协作开发手册”展开:它既是理解 Halide 编译器架构(前端 DSL、IR 核心、Lowering 流水线、CodeGen、Runtime、Generator 与自动调度器)的导航图,也是从零构建、运行测试、提交代码时必须遵循的操作规范。读完本文,你将掌握 Halide

gitblog_00645的博客 569

Seedance 2.0 前端页合并前,如何用完整发布检查清单避开 3 种昂贵翻车

这篇文章是写给 Seedance 2.0 Skill OS(一个面向 Agent 的 AI 影视制作技能包)维护者和新接手合并 README 前端页成员的一次发布前纪律交底。要解决的问题是:每次发布或合并前端之前,分散在多处的版本号不能互相矛盾、多语言入口不能 404、历史内容不能复活到活跃页面。读完你可以按 [docs/v6-release-readiness.md](https://link.

gitblog_00709的博客 295
上一篇: 你或许也想拥有专属于自己的AI模型文件格式(推理部署篇)-(7)
下一篇: Unix进程的学习
慷仔
博客等级 码龄9年 88粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值