- 博客(237)
- 资源 (72)
- 收藏
- 关注
转载 ARM64 指令集架构学习之二--ARM与RISC-V的向量扩展比较
带有向量指令的微处理器将是未来的大趋势。为什么?因为自动驾驶、语音识别、图像识别都是基 于机器学习,并且机器学习都是关于矩阵和向量的。 但这不是唯一的原因。自从我们半官方地宣布摩尔定律结束以来,我们一直在拼命寻找更多的性 能。在微处理器设计的黄金旧时代,我们可以容易地每年将CPU的频率翻倍,每个人都很开心。这 个绝妙的老把戏结束了。 性能的提高一直停滞不前,因此需要以不同的方式利用更多的晶体管进行并行处理,无论是多核、向量处理还是无 序执行。 现在我们耍了几千种不同的把戏找寻更多的...
2022-03-01 15:16:56
1444
原创 C++语法学习笔记之四 -- 字符串string相关
1、C++ 17新引入std::string_view使用介绍,std::string_view是原始字符串的视图,如果在查看std::string_view的同时修改了字符串,或者字符串被消毁,那么将是未定义的行为。std::string_view比std::string的性能要高很多,因为每个std::string都独自拥有一份字符串的拷贝,而std::string_view只是记录了自己对应的字符串的指针和偏移位置。当我们在只是查看字符串的函数中可以直接使用std::string_view来代替
2022-01-27 20:34:23
2776
原创 gcc 编译器学习笔记之二 -- dump 中关键信息解读
1、直接分析gcc汇编确认其是否存在runtime的检查是比较困难的,因此可以对向量化patch的dump进行检查,是否存在create runtime check?missed: versioning for alias required: can't determine dependence between x[k_27] and x[i_28]consider run-time aliasing test between x[k_27] and x[i_28]create runtim.
2022-01-26 10:44:22
423
原创 LLVM 编译器学习笔记之三十九-- 注释规则采用Doxygen语法
Doxygen: Doxygenis used generate documentation from source code, 对应的语法规则https://www.doxygen.nl/manual/commands.html#cmdp,常见应用1、给函数参数换一种字体显示格式,使用\p
2022-01-06 10:06:57
201
原创 LLVM 编译器学习笔记之三十八-- STL接口使用
1、set 底层结构是红黑树,有去重特点,参考C++ STL中set是如何判断两个结构体相等的? - 知乎 SetVector 同时维护Vector及Set来保证访问顺序的唯一性,比如对象是一个指针是,如果只是使用SmallPtrSet则因为对象分配的指针地址可能存在差异,导致对象的遍历不唯一。如果用SetVector,则因为插入时会同时往Vector及Set中插入,而Vector是有序的,因此迭代器遍历Vector能保证遍历顺序的一致性,参考LLVM: LLVM: llvm::SmallSet...
2021-12-27 09:41:55
630
原创 LLVM 编译器学习笔记之三十六-- 指令调度Instruction scheduling
1、参考Instruction scheduling in LLVM - 知乎,在中后端均存在指令调度指令调度模型2、在llvm12->llvm14 中Machine Instruction Scheduler有个patch增强了load/store指令的合并,也就是指令调度不仅仅只是改变指令的顺序,该优化类似gcc中的store-merge优化.....................................................................
2021-12-01 12:05:17
1682
原创 LLVM 编译器学习笔记之三十四-- SSA
1、llvm中有种特殊的lcssa (Loop Close SSa), 参考LLVM Loop Terminology (and Canonical Forms) — LLVM 13 documentation一个lcssa的形式是PHI中只有一个结点,因此是冗余的,只是方便循环的优化,%add673.lcssa = phi i32 [ %add673, %for.body639 ]...
2021-11-24 18:36:00
651
原创 LLVM 编译器学习笔记之三十 -- 基本快BasicBlock的操作
1、SplitBlock封装了splitBasciBlock,内部调用splitBasciBlock,但是他们的功能是不等价的 a)splitBasciBlock 纯粹的将一个BB,按照指定的iterator I拆分成两个BB(无条件跳转)
2021-10-09 11:33:24
647
原创 LLVM 编译器学习笔记之二十九 -- 控制流程CFG
1、查看控制流图的方法a) 对于中间表达的 *.ll 文件opt -dot-cfg before-indvars.lldot -Tpng .p.dot -o tmp.pngb) 在调试过程中,可以使用F.viewCFG()接口先获取相应的*.dot文件,之后雷同 参考:自动向量化调试过程查看CFG流图_CanaanLeeN的博客-CSDN博客...
2021-09-15 11:36:26
601
转载 LLVM 编译器学习笔记之二十八 -- 经常被误解的GetElementPtr(GEP)指令
参考https://llvm.liuxfe.com/docs/get-element-ptr
2021-08-20 10:07:43
1003
原创 用户代码修改相关的性能优化方法 -- 二维指针和二维数组的访问效率
示例代码:二维数组或者一维结构体指针访存效率高于二维指针#define N 10int aa[N][3] = {0,1,2,3,4,5,5,6,67};int bb[3*N] = {0,1,2,3,4,5,5,6,67};int init (int ** &matrix, int * const &array, int n) { matrix = (int **)malloc (sizeof (int *) * N); for (int i=0; i&
2021-08-12 19:42:48
139
原创 LLVM 编译器学习笔记之二十七 -- EarlyCSE, PRE, LICM, hoist
1、__attribute__((__aligned__)) 的正确使用方法,参考https://stackoverflow.com/questions/10951039/specifying-64-bit-alignment,注意并不是写在结构体定义的上一行struct foo { int a, b, c;} __attribute__((__aligned__(8))); // aligned to 8-byte (64-bit) boundary.........
2021-08-11 11:52:20
683
1
原创 mpirun 学习验证
1、测试用例基础mpicxx -g -O3 -DLAMMPS_GZIP -DLMP_USER_OMP -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 demo.cppmpirun --bind-to core --allow-run-as-root -np 6 --mca btl ^openib ./a.out#include <mpi.h>#include <stdio.h>int main( int argc, char..
2021-07-20 16:26:44
1268
原创 C++语法学习笔记之三 -- 源码分析 std::vector<bool> 设计,学会合理使用
但凡上网搜索下关于 std::vector<bool> 的讨论,基本都是吐槽它的实现,分不清这么设计是feature还是bug。此外,由于 std::vector<bool> 也经常应用在leetcode刷题中。因此,本期就来聊下 它的底层实现,来帮助你正确的使用它。前言std::vector<bool>,是类 sd::vector<T,std::allocator<T>> 的部分特化,为了节省内存,内部实际上是按bit来表征bool类型。从
2021-05-30 09:23:26
622
原创 库函数使用之三 -- FFTW
1、一般用的是double类型的,也就是只需要添加 libfftw3-3lib 就行了,可以使用ldd查看应用程序实际使用的动态库
2021-05-20 14:45:05
340
原创 【git 操作技巧】大文件使用git lfs
1、git lfs可以从https://github.com/git-lfs/git-lfs/releases下载安装(注意x86服务器版本),使用方法类似git如果出错提示certificate signed by unknown authority,请参考https://github.com/git-lfs/git-lfs/issues/276#issuecomment-98754786,配置git config http.sslverify false...
2021-04-20 16:46:49
221
原创 llvm 介绍有用的网站
LLVM笔记(7) - 指令的side effecthttps://www.cnblogs.com/Five100Miles/p/12081848.htmlLLVM每日谈之十八 GEP Instruction的几点总结https://www.cnblogs.com/ainima/p/6331942.html经常被误解的GetElementPtr(GEP)指令https://llvm.liuxfe.com/docs/get-element-ptr.html...
2021-04-08 11:15:18
226
原创 fortran 语法学习之三
1、classic flang中sub_types[0]的含义要结合date type 本身一起决定的(flang1是这样设计的,用链表的形式,能串其来很多东西,比如一个数组,里面还有元素,那么就可以用sub来指向)比如:[100*[10 Xi8]] * 的sub_types[0]就是[100*[10 Xi8]].........
2021-04-06 10:26:25
710
原创 LLVM 编译器学习笔记之十二 -- pass manager
1、测试验证发现Unable to schedule pass问题的解决方法:将相应的依赖pass添加到后面即可,具体原因未知a) 重复添加时以第一个AU.addRequired为准b)AU.addPreserved是一个独立的属性,不能解决问题..................
2021-03-22 14:42:13
823
原创 gdb 在c++中调试技巧,获取数据类型
1、使能指针类型显示特性 -- set p obj on使能后效果使能前效果2、使用接口getType()及getTypeID()
2021-03-17 09:03:24
394
原创 shell 脚本处理多行文本的记录 -- awk
1、参考https://blog.csdn.net/weixin_30457465/article/details/98286233?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase, 对其中的脚本代码增加注释说明...
2021-02-07 17:14:43
1125
转载 逆向工程-- 二进制文件转换为 LLVM IR llvm-mctoll
参考https://blog.csdn.net/dongjideyu/article/details/107951272?utm_medium=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.controlllvm-mctoll 是微软的静态 translator,可静态地(A
2021-02-02 19:19:53
748
原创 ILM 文件格式 -- fortran转IR的中间文件
比如i16: MP_TARGETMODE n1 i10 i12 i14 对应oniii (第一个o为自身的标识符)
2021-01-30 18:26:14
132
原创 fortran 语法学习之二
1、参考offloading_success.c的写法,将C++翻译为fortran的写法如下 参考https://www.ibm.com/support/knowledgecenter/SSXVZZ_16.1.0/com.ibm.xlcpp161.lelinux.doc/compiler_ref/prag_omp_target.html,第一个参数的默认属性是tofrom!$OMP TARGET MAP (from: isHost) isHost = OMP_IS_INITIAL_D...
2021-01-29 12:54:45
189
原创 ffi 库使用demo--之二
相比https://mp.csdn.net/editor/html/112862401,这里模拟调用了llvm 中offload模块中__tgt_rtl_run_target_region接口(其中封装了ffi_call调用)1、文件/tmp/tmpfile_wxuHGp为设备侧offload代码片段对应的动态库,在offload流程中通过#include <cassert>#include <cstring>#include <stdio.h>#incl
2021-01-20 22:02:12
495
原创 ffi 库使用demo
FFI(Foreign Function Interface)允许以一种语言编写的代码调用另一种语言的代码,而libffi库提供了最底层的、与架构相关的、完整的FFI。libffi的作用就相当于编译器,它为多种调用规则提供了一系列高级语言编程接口,然后通过相应接口完成函数调用,底层会根据对应的规则,完成数据准备,生成相应的汇编指令代码。动态调用C函数,使用libffi提供接口动态调用流程如下:1. 准备好参数数据及其对应ffi_type数组、返回值内存指针、函数指针2. 创建与函数特征相匹配的函数原
2021-01-20 12:55:04
1219
原创 openMP学习笔记之一 -- 杂记
1、使用libffi启动执行,ffi全称Foreign Function Interface,参考https://www.cnblogs.com/findumars/p/4882620.html的介绍,
2021-01-15 12:32:01
204
原创 利用GDB调试动态库 -- 通过bt获取函数调用栈
参考https://blog.csdn.net/xcw_1987/article/details/81942272,函数接口__tgt_rtl_load_binary在动态库openmp/libomptarget/libomptarget.rtl.aarch64.so
2021-01-15 11:29:08
861
原创 shell 脚本实现arm指令比对功能
1、参考https://unix.stackexchange.com/questions/81916/how-to-find-a-space-in-a-text-using-grep找到objdum有效代码行2、完整的脚本如下(下一步改造未python方式实现)#!/bin/bash# the objdump format of arm similar as# 0000000000fa19d0 <forms_>:# fa19d0: d0133c81 adrp x1,
2021-01-13 11:12:44
217
原创 精度相关优化
1、选项-ffp-contract=style (floating point expression contract)控制FMA特性,即fused multipy add。fma的特点是可以使得这种模式的浮点计算更快精度更高 参考https://www.cnblogs.com/hustdc/p/7630109.html
2021-01-07 14:01:38
256
算法技术手册(机械工业出版社)
2011-03-24
模式匹配算法的原理及应用
2011-03-24
高速电路设计与仿真分析 Cadence实例设计详解
2011-03-23
gdb-7.2.tar.bz2
2011-03-23
kakadu2.2.3和openjpeg1.3两开源图像压缩软件的性能测试比较
2010-06-27
Computation of 2700 billion decimal digits of Pi using a Desktop Computer
2010-06-27
使用 Qt 和OpenGL 创建跨平台可视化 UI
2010-06-27
ftp_base_on_UDP
2009-07-31
WinAVR-20040720-install.zip(编译器安装包)
2009-06-14
VC_与Matlab混合编程方法剖析
2009-05-29
Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup-en-x64.7z
2019-09-08
为知笔记_2015.02.27
2015-03-08
Debuggers.zip
2015-01-14
windows 动态库相关问题FAQ
2013-02-25
ProcessExplorer
2013-02-24
字符识别源码
2012-08-04
将执行命令放到shell脚本后结果异常
2023-04-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人