Update makefiles for clang 14 or newer
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 25/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 停滞
- 技术栈
- c
- 领域
- build-system
调研方向
从 1_square/Makefile 和其他示例 Makefile 开始,将其中对 clang-12 和 LLVMEnzyme 的引用与文档化的 clang/opt 工作流进行比较。在 clang 14 或 15 上复现该失败,然后验证单文件和多源示例能通过更新后的 make targets 成功构建并运行。
由索引模型根据 Issue 内容生成。
描述
I'm trying these examples on clang v14 and v15 (on an Ubuntu box) and they fail with some variant of ld.lld: error: undefined symbol: __enzyme_autodiff
or square.c:(.text+0x3a): undefined reference to '__enzyme_autodiff' depending on what linker I use.
For example, using regular gnu ld and making the following changes to the Makefile
$ git diff --word-diff Makefile
diff --git a/1_square/Makefile b/1_square/Makefile
index c223268..b4f278a 100644
--- a/1_square/Makefile
+++ b/1_square/Makefile
@@ -4,7 +4,8 @@ clean:
rm -f *.o *.ll
%.o: %.c
[-../dockerscript.sh clang-12 /host/$^-]{+clang $^+} -O3 -Xclang -load -Xclang [-/Enzyme/enzyme/build/Enzyme/ClangEnzyme-12.so-]{+../../Enzyme/enzyme/build/Enzyme/LLVMEnzyme-14.so+} -ffast-math -o [-/host/$@-]{+$@+}
I obtain:
clang square.c -O3 -Xclang -load -Xclang ../../Enzyme/enzyme/build/Enzyme/LLVMEnzyme-14.so -ffast-math -o square.o
/usr/bin/ld: /tmp/square-977b64.o: in function `main':
square.c:(.text+0x3a): undefined reference to `__enzyme_autodiff'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Makefile:7: square.o] Error 1
Adding -fpass-plugin=../../Enzyme/enzyme/build/Enzyme/LLVMEnzyme-14.so for the new pass-manager does not change anything.
The possibly most consequential change to the Makefile is probably the switch from ClangEnzyme-version.so to LLVMEnzyme-version.so. Is that the root cause to this problem? If so, how does one build the former? There is no mention of ClangEnzyme in the cmake_install.cmake of Enzyme version da97fda9aeef27e827a8803f31c40d1b90d0f4a0 (origin/jmp/dataflow-activity-analysis).
As a workaround, I can manually run each step as described at https://enzyme.mit.edu/getting_started/UsingEnzyme/ and that works:
$ clang square.c -S -emit-llvm -o input.ll -O2 -fno-vectorize -fno-slp-vectorize -fno-unroll-loops
$ opt -enable-new-pm=0 input.ll -load=../../Enzyme/enzyme/build/Enzyme/LLVMEnzyme-14.so -enzyme -o output.ll -S
$ opt output.ll -O2 -o output_opt.ll -S
$ clang output_opt.ll -o a.exe
$ ./a.exe 3.14
Gradient square(3.140000) = 6.280000
However that is good only for single-file examples. The optcommand can't be made to work for multisource, as far as I understand it, since both opt and clang -S can only deal with one source file at the time and one would need two for this purpose:
$ clang multisource.c -S -emit-llvm -o multisource.ll -fno-vectorize -fno-slp-vectorize -fno-unroll-loops
$ clang myblas.c -S -emit-llvm -o myblas.ll -fno-vectorize -fno-slp-vectorize -fno-unroll-loops
$ opt -enable-new-pm=0 myblas.ll -load=../../Enzyme/enzyme/build/Enzyme/LLVMEnzyme-14.so -enzyme -o myblas_out.ll -S
$ opt -enable-new-pm=0 multisource.ll -load=../../Enzyme/enzyme/build/Enzyme/LLVMEnzyme-14.so -enzyme -o multisource_out.ll -S
error: <unknown>:0:0: in function preprocess_dotabs double (%struct.complex*, %struct.complex*, i32): Enzyme: No reverse pass found for myblas_cabs
at context: %7 = call double @myblas_cabs(double %5, double %6) #7
$ opt -enable-new-pm=0 myblas.ll multisource.ll -load=../../Enzyme/enzyme/build/Enzyme/LLVMEnzyme-14.so -enzyme -o multisource+myblas_out.ll -S
opt: Too many positional arguments specified!
Can specify at most 1 positional arguments: See: opt --help
$ clang multisource.c myblas.c -S -emit-llvm -o multisource+myblas.ll -fno-vectorize -fno-slp-vectorize -fno-unroll-loops
clang: error: cannot specify -o when generating multiple output files
so how can one fix that case?
@wsmoses sorry if the question is very trivial, but I've been unable to find guidance in the existing examples and documentation, either here or on https://github.com/EnzymeAD/Enzyme
- 主要语言
- Jupyter Notebook
- 星标
- 21
- 派生
- 8
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
我们还没有检查这个项目的环境配置文件。先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
EnzymeAD/Enzyme-Tutorial 的其他 Issue
-
难度 4/5 3-5 天 新手友好度 25/100
EnzymeAD/Enzyme-Tutorial#11 ·
-
难度 4/5 3-5 天 新手友好度 35/100
EnzymeAD/Enzyme-Tutorial#10 ·
-
难度 3/5 1-2 天 新手友好度 35/100
-
难度 3/5 1-2 天 新手友好度 35/100
EnzymeAD/Enzyme-Tutorial#8 · 2 条评论 ·
-
Link to talk未关闭
难度 1/5 1 小时以内 新手友好度 35/100
EnzymeAD/Enzyme-Tutorial#4 · 2 个 reaction ·
查看 EnzymeAD/Enzyme-Tutorial 的全部 Issue
相似的 Issue
-
bot-found bug priority: P3
难度 2/5 1-3 小时 新手友好度 84/100
madenvel/KalinkaPlayer#179 ·
-
难度 1/5 1 小时以内 新手友好度 92/100
isce-framework/isce3#387 ·
-
agent-research-recommend agent-review-finding enhancement ready-for-agent
难度 2/5 1-3 小时 新手友好度 78/100
jordansmall/spindrift#3965 · 1 条评论 ·
维护者通常 2 天内回复
-
upstream update
难度 2/5 1-3 小时 新手友好度 68/100
conan-io/conan-center-index#31055 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 88/100
维护者通常 1 天内回复