llvm

解决vscode+clang+mingw64下的<float.h>兼容性问题

半城伤御伤魂 提交于 2020-08-10 08:22:40
本人c语言纯萌新一枚,编程环境是vscode+clang+mingw,安装的时候是直接把mingw的文件无冲突合并到LLVM里的,参照: https://www.cnblogs.com/esllovesn/p/10012653.html 。 今日在完成c语言老师布置的作业的时候写了以下代码: #include<stdio.h> #include < float .h> int main( void ) { double dv = 1.0 / 3.0 ; float fv = 1.0 / 3.0 ; printf( " %.4f %.4f\n " , dv, fv); printf( " %.12f %.12f\n " , dv, fv); printf( " %.16f %.16f\n " , dv, fv); printf( " %d %d\n " , FLT_DIG, DBL_DIG);  return 0; } 结果很意外的是,无论是直接插件run code还是F5编译均提示编译失败: In file included from exercises5.c: 2 : In file included from C:\Program Files\LLVM\lib\clang\ 9.0 . 0 \include\ float .h: 31 : C:\Program Files

printf doesn't work for floats in LLVM IR

我是研究僧i 提交于 2020-08-10 03:37:12
问题 I want to print the value of a floating point variable to the screen. I am declaring printf() function in the LLVM IR code, and it is linking in successfully. Whenever I print an integer or a character data type, or a string, printf() prints them normally to the screen as it prints them in the C code. However, if I pass a float to printf() , instead of printing the floating point number, it prints 0.000000 . I checked the source code multiple times and it seems that the syntax is correct. It

半小时,利用FEDB将你的Spark SQL模型变为在线服务

穿精又带淫゛_ 提交于 2020-08-09 22:41:02
SparkSQL在机器学习场景中应用 第四范式已经在很多行业落地了上万个AI应用,比如在金融行业的反欺诈,媒体行业的新闻推荐,能源行业管道检测,而SparkSQL在这些AI应用中快速实现特征变换发挥着重要的作用 SparkSQL在特征变换主要有一下几类 1. 多表场景,用于表之间拼接操作,比如交易信息表去拼接账户表 2. 使用udf进行简单的特征变换,比如对时间戳进行hour函数处理 3. 使用时间窗口和udaf进行时序类特征处理,比如计算一个人最近1天的消费金额总和 SparkSQL到目前为止,解决很好的解决离线模型训练特征变换问题,但是随着AI应用的发展,大家对模型的期望不再只是得出离线调研效果,而是在真实的业务场景发挥出价值,而真实的业务场景是模型应用场景,它需要高性能,需要实时推理,这时候我们就会遇到以下问题 1. 多表数据离线到在线怎么映射,即批量训练过程中输入很多表,到在线环境这些表该以什么形式存在,这点也会影响整个系统架构,做得好能够提升效率,做得不好就会大大增加模型产生业务价值的成本 2. SQL转换成实时执行成本高,因为在线推理需要高性能,而数据科学家可能做出成千上万个特征,每个特征都人肉转换,会大大增加的工程成本 3. 离线特征和在线特征保持一致困难,手动转换就会导致一致性能,而且往往很难一致 4. 离线效果很棒但是在线效果无法满足业务需求 在具体的反欺诈场景

How to link all LLVM libraries in cmake?

妖精的绣舞 提交于 2020-08-09 17:24:50
问题 I want to link all LLVM libraries in my cmake C++ project. I use llvm-config --components to get all the components of LLVM, it gives me: $ llvm-config --components aarch64 aarch64asmparser aarch64codegen aarch64desc aarch64disassembler aarch64info aarch64utils aggressiveinstcombine all all-targets amdgpu amdgpuasmparser amdgpucodegen amdgpudesc amdgpudisassembler amdgpuinfo amdgpuutils analysis arm armasmparser armcodegen armdesc armdisassembler arminfo armutils asmparser asmprinter

架构设计和实施的对齐和同步问题

我的梦境 提交于 2020-08-09 14:41:09
本文是这个文档的逻辑延续: in nek:早期架构设计问题 ​ zhuanlan.zhihu.com 上面这个逻辑写得高大上,但操作起来其实是有很多具体问题要解决的,没有这些操作策略,实际写作架构方案的同学会觉得不知道如何下笔。本文回答一下在实际实施中的具体问题如何解决。 首先我们要明白,一个真正的架构设计是必然涉及很多产品,部门,团队的。有不同意见也是肯定的。你非要“严谨”,这个东西就不用做了。你说你要开发某个版本,和开发经理沟通了吗?他们的人力排得过来吗?他们的开发预算能按时到位吗?就算到位了HR能按时招得到人吗?Marketing肯卖这个版本吗?你去找他们沟通,但你的方案十划没有一撇,讨论什么都是扯淡,而且你跟开发经理讨论好了,Marketing一定同意吗?你自己的态度轻如鸿毛,你叫得动谁? 架构设计是滚雪球,我们架构团队自己先滚雪球,达成一致,然后去和开发团队妥协,滚大第二个雪球,然后再用这个大雪球去碾压Marketing,然后去碾压FAE,碾压预研,碾压金主……这是做架构的常态。架构设计一开始就准备好了要去妥协的,如果你非要有洁癖,要求所有人都“一致”,你不用做了。所以,我们设计方案的时候总是站在一个“无私”的角度上来进行设计,让其他人反对你就是和自己的核心利益作对,这样你妥协的余地就大。而在做“无私”的设计的时候,逻辑限制是第一位的。大家都想要钱,但钱不能从天上掉下来的

pgaudit安装过程遇到的一些问题

柔情痞子 提交于 2020-08-09 10:58:17
OS:centos 7.2 PG:11.3 问题一: # make check USE_PGXS=1 make: pg_config: Command not found make: *** No rule to make target `check'. Stop. 处理方法: # yum install postgresql11-devel-11.3 如果安装之后还没有该命令,可以看看环境变量的设置: export PATH=$PATH:/usr/pgsql-11/bin    问题二: # make USE_PGXS=1 gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune

SOLVED: relocation R_X86_64_32 against symbol `G8' can not be used when making a PIE object; recompile with -fPIE

↘锁芯ラ 提交于 2020-08-09 09:14:06
问题 I'm trying to compile lambda-expressions from scheme to llvm-ir and am having trouble with position independet code. source: (lambda (x) (display x)) target: bunch of declares... define %SObj* @G7() { entry: %calltmp = call %SObj* @closure_create(i64 ptrtoint (%SObj* (%SObj*)* @G8 to i64), %SObj* null) ret %SObj* %calltmp } define %SObj* @G8(%SObj* %G6) { entry: %calltmp = call %SObj* @display(%SObj* %G6) ret %SObj* %calltmp } define i32 @main(i32 %0, i8** %1) { entry: %calltmp = call %SObj*

Swift 编译器中间码 SIL

帅比萌擦擦* 提交于 2020-08-08 12:41:54
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者 | Roy 来源 | roy's blog https://woshiccm.github.io/posts/Swift%E7%BC%96%E8%AF%91%E5%99%A8%E4%B8%AD%E9%97%B4%E7%A0%81SIL/ 为什么要设计SIL 上图是传统的基于LLVM的编译器流程,比如C、C++以及Objective-C。代码分析主要是基于CFG(AST级别),CFG全称Control Flow Graph(函数流程控制图),是在clang这一层,但是这有很多缺点。 缺点: 源码和LLVM IR之间的巨大抽象差距不适用于源码级分析 CFG缺乏保真度 CFG不是在hot path上,hot path是指被多次迭代的代码块,图上可以看到不是在编译器流程的主路径上 CFG和IR降低中有很多的重复工作 Swift作为一种高级语言,有些高级特性,比如基于protocol的泛型。而且也是一门安全的语言,确保变量在使用之前被初始化、检测不可执行的代码(unreachable code)。于是为Swift编译器增加了一层SIL来做这些事情。 SIL 能够完全保留程序的语义 专为代码生成和分析而设计 在编译器流程的hot

Include-what-you-use工具介绍

我怕爱的太早我们不能终老 提交于 2020-08-08 05:29:21
简介 Include-what-you-use 工具(以下简称 iwyu )是Google推出,基于 Clang 的C/C++工程冗余头文件检查工具。 iwyu 依赖 Clang 编译套件,因此,针对每个 Clang 版本,会有对应的 iwyu 工程分支。 使用该工具的好处 更快的编译。当cpp文件包含冗余头文件时,编译器会读取、预处理和解析更多的代码,如果有模板存在,则会引入更多的代码,这会加大编译构建时间。 更好的重构。假如你准备重构 foo.h ,使得它不再使用 vector ,你很可能会从 foo.h 文件中移除 #include<vector> 。理论上可以这么做,但实际上不行,因为其他文件可能会通过 foo.h 来间接引用 vector ,贸然移除会造成其他文件编译失败。 iwyu 工具可以找到并去掉这种间接引用。 头文件自注释。通过查看必须头文件注释,可知道该功能依赖于其他哪些子功能。 使用前向声明代替 include 语句,减少依赖,减少可执行程序大小 Windows平台下使用 在 Window 平台上,使用如下版本: clang_8.0 iwyu 0.12 Visual Studio 2017 使用预编译LLVM来构建 下载并安装 LLVM-8.0.0 二进制安装包,安装在 D:\Program Files\LLVM 下,使用如下语句来构建: cd iwyu

Unable to link C runtime library (libcmt.lib) using lld-link.exe (Windows)

江枫思渺然 提交于 2020-08-08 04:29:05
问题 I'm writing a language using LLVM. I'd like to avoid having to package clang and simply use the LLVM tools (ex. lld, lld-link). I've been trying to invoke the printf function from my simple IR code ( testinput.ll ): ; ModuleID = 'Test2' source_filename = "entry" @str_0 = private unnamed_addr constant [13 x i8] c"Hello world!\00" declare i32 @printf(i8*, ...) define i32 @main() { entry: %anonymous_10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @str_0, i32 0,