
技术文章
文章平均质量分 56
清钟沁桐
for study
展开
-
ARM64 指令集架构学习之二--ARM与RISC-V的向量扩展比较
带有向量指令的微处理器将是未来的大趋势。为什么?因为自动驾驶、语音识别、图像识别都是基 于机器学习,并且机器学习都是关于矩阵和向量的。 但这不是唯一的原因。自从我们半官方地宣布摩尔定律结束以来,我们一直在拼命寻找更多的性 能。在微处理器设计的黄金旧时代,我们可以容易地每年将CPU的频率翻倍,每个人都很开心。这 个绝妙的老把戏结束了。 性能的提高一直停滞不前,因此需要以不同的方式利用更多的晶体管进行并行处理,无论是多核、向量处理还是无 序执行。 现在我们耍了几千种不同的把戏找寻更多的...转载 2022-03-01 15:16:56 · 2997 阅读 · 0 评论 -
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 · 1220 阅读 · 1 评论 -
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 · 4611 阅读 · 0 评论 -
LLVM 编译器学习笔记之三十二-- 调试信息的维护
1、readelf -w *.o 可以看到类似的信息,对应的含义原创 2021-11-11 09:25:47 · 363 阅读 · 0 评论 -
用户代码修改相关的性能优化方法 -- 二维指针和二维数组的访问效率
示例代码:二维数组或者一维结构体指针访存效率高于二维指针#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 · 252 阅读 · 0 评论 -
LLVM 编译器学习笔记之二十七 -- EarlyCSE, PRE, LICM, hoist, Sink
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 · 1902 阅读 · 1 评论 -
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 · 1535 阅读 · 0 评论 -
EXCEL 常用的操作技巧 -- 数据处理
1、使用$F$3类似的处理,在拖动单元格时固定参考值原创 2021-05-13 09:40:21 · 587 阅读 · 0 评论 -
重复定义的符合在创建动态库中会检查,在创建静态库时不做检查
原创 2021-03-18 10:12:56 · 244 阅读 · 0 评论 -
shell 脚本处理多行文本的记录 -- awk
1、参考https://blog.youkuaiyun.com/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 · 1596 阅读 · 1 评论 -
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 · 314 阅读 · 0 评论 -
openMP学习笔记之一 -- 杂记
1、使用libffi启动执行,ffi全称Foreign Function Interface,参考https://www.cnblogs.com/findumars/p/4882620.html的介绍,原创 2021-01-15 12:32:01 · 800 阅读 · 1 评论 -
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 · 329 阅读 · 0 评论 -
精度相关优化
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 · 550 阅读 · 0 评论 -
tips: linux 外网设置
sed -i '/^proxy_server/d' /etc/profilesed -i '/^export http/d' /etc/profilesed -i '/^PS1/d' /etc/profileecho "proxy_server=10.90.54.64export http_proxy=http://\$proxy_server:3128export https_proxy=https://\$proxy_server:3128" >> /etc/profileso.原创 2021-01-06 19:44:27 · 124 阅读 · 0 评论 -
LLVM 编译器学习笔记之七 -- FileCheck
参考:https://llvm.org/docs/CommandGuide/FileCheck.html1、技巧,规避连续嵌套的表达式,比如下面的表达式 ldr x9, [x7, :got_lo12:y] str x8, [x9]a) 如果使用[[REG4:x[0-9]+]] 匹配x9, 则REG4整体上匹配x9, 这样处理[x9]就会形成类似[[[REG4]]],从而导致嵌套匹配出错b) 正确的处理方法可以使用x[[REG4:[0-9]+]], 这样REG4整体上...原创 2020-12-26 10:39:08 · 776 阅读 · 1 评论 -
LLVM 编译器学习笔记之六-- 预处理
1、llvm 中使用Builder.defineMacro定义builtin宏,类似GCC的builtin_define,以下是llvm8 中定义对gcc 4.2.1版本兼容性宏__GNUC__的示例 配套的接口还有isMacroDefined及undefineMacro 2、嵌套优先级 在Builder.defineMacro中可以定义一些符号,比如SS , 然后在头文件中可以进一步使用 #define SS 进行展开,这样可以让Builder.defineMacr...原创 2020-12-24 09:27:34 · 474 阅读 · 0 评论 -
gdb 在c++中调试技巧,使能overload特性 -- set overload-resolution off
参考https://stackoverflow.com/questions/16734783/in-gdb-i-can-call-some-class-functions-but-others-cannot-be-resolved-whya very simple code likestd::size_t f(const std::string& s) { return s.length(); }, then in gdbp f("hello")and maybep f(std::s...转载 2020-11-23 09:49:39 · 1862 阅读 · 1 评论 -
C++语法学习笔记 -- 整形也可以是模板Template参数
详见https://github.com/wuye9036/CppTemplateTutorial/blob/master/ReadMe.md#13-%e6%95%b4%e5%9e%8b%e4%b9%9f%e5%8f%af%e6%98%aftemplate%e5%8f%82%e6%95%b01.3 整型也可以是Template参数模板参数除了类型外(包括基本类型、结构、类类型等),也可以是一个整型数(Integral Number)。这里的整型数比较宽泛,包括布尔型,不同位数、有无符号的整型,甚转载 2020-11-21 10:55:19 · 1051 阅读 · 0 评论 -
二部图(二分图)总结,一个图意味着从任何一个顶点开始能访问到所有的结点
描述二 部图又叫二分图,我们不是求它的二分图最大匹配,也不是完美匹配,也不是多重匹配,而是证明一个图是不是二部图。证明二部图可以用着色来解决,即我们可以 用两种颜色去涂一个图,使的任意相连的两个顶点颜色不相同,切任意两个结点之间最多一条边。为了简化问题,我们每次都从0节点开始涂色输入输入:多组数据第一行一个整数 n(n<=200) 表示 n个节点第二行一个整数m 表示 条边随后 m行 两个整数 u , v 表示 一条边输出如果是二部图输出 BICOLORABLE.否则输出原创 2020-11-01 21:45:53 · 1747 阅读 · 0 评论 -
git修改历史内容的方法
1、使用git log --pretty=oneline -n3查看历史状态如下,以下假设修改gcc对应的结点a7df49e fccc2be1c6cd8d6315bb5d0ebbcba0fc3bf4d5d0 gcc1 a7df49e7d3b012c84c87a3ce751691ca15b406ab gcc efcb25e03f6441fa5f478801a58d9da84f8d691d build.sh: delete compiler-rt as build FAILED on system ...原创 2020-10-13 12:20:32 · 265 阅读 · 0 评论 -
LLVM 编译器学习笔记之三 -- TableGen语言编写*.td文件
有关于TableGen语言语法的文章,LLVM官方发布有两篇,第一篇是:TableGen Language Introduction,第二篇是:TableGen Language Reference(version llvm 10.0.0)。文章开头声明说,第一篇不是规范的参考文档,第二篇是规范的参考文档,并且两篇都有点年久失修。我把两篇都看了一下,确实感觉第二篇更规范一些,尤其是语法描述的章节,特别严谨。但是,我这里还是选择以第一篇的内容作为参考文档,主要是因为从易读性的角度来说,第一篇更容易理解...转载 2020-10-11 20:05:48 · 3777 阅读 · 3 评论 -
llvm 编译器学习笔记
Clangc/c++ 编译器, 这里生成的clang并不是一个单独的前端,集成了中后端汇编器的所有功能,和gcc存在区别,clang不需要依赖其他二进制可以单独完成从源文件到目标文件的所有功能lldllvm自己开发的链接器,在早期版本,llvm没有自己的链接器,是默认使用gnu binutils,后续开发了自己的链接器lld,现在版本已经默认使用lld。我们可以看到,产物中有4个lld,其中lld是唯一二进制,其他三个均是软连接。我们无法运行lld,如果需要链接的话,就必须根据环境运行不同的软连原创 2020-10-11 10:15:28 · 1721 阅读 · 0 评论 -
windows10 启动系统内置的linux服务器功能
1、根据https://jingyan.baidu.com/article/624e74596633a034e8ba5a2b.html, 完成后后续只要输入bash即可启动。 可以看到linux和windows共用相同的IP, 因此磁盘共享及上网访问相比虚拟机方便快捷太多2、 系统中自带git系统,因此访问非常便捷 zhongyunde@LAPTOP-GPGBG...原创 2020-04-12 22:27:27 · 585 阅读 · 1 评论 -
leetcode 编程的坑
1、不能使用数学库max解决方法:自定义#definemax(x,y)((x>y)?x:y)2、全局变量intvisited[MAX][MAX]={{0}};默认不会初始化解决方法1、二维显示初始化for(i=0;i<m;i++)for(j=0;j<n;j++)visite...原创 2020-04-08 14:09:53 · 1091 阅读 · 0 评论 -
windows的环境变量
windows的环境变量www.firnow.com 时间 : 2010-03-15 作者:匿名 编辑:Smi1e 点击: 6 [ 评论 ]--%CD% - 扩展到当前目录字符串。 %DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。 %TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。 %RANDOM% - 扩展到 0 和 32767 之间的任意十进制数转载 2010-05-28 00:37:00 · 515 阅读 · 1 评论 -
连接脚本相关使用注意点
<br />输入section和垃圾回收:<br />在连接命令行内使用了选项--gc-sections后,连接器可能将某些它认为没用的section过滤掉,此时就有必要强制连接器保留一些特定的section,可用KEEP()关键字达此目的。如KEEP(*(.text))或KEEP(SORT(*)(.text))<br /> <br />连接器有个默认的内置连接脚本,可以用命令ld --verbose查看。连接选项-r和-N可以影响默认的连接脚本(如何影响?)。<br />-T选项可原创 2011-03-31 23:41:00 · 838 阅读 · 0 评论 -
shell 脚本中getopt 和 getopts 的区别
getop string1 string2..nstring1中标出的字符表示合法的标志(-后面可以跟的字符),如果标志字符后面有:,说明这个标志后面(可以有0-n个空格)的stringx是它的参数, getop 按string1 处理 string2....n,输出结果转载 2011-07-11 19:29:17 · 5271 阅读 · 1 评论 -
使用shell进行调用脚本或者命令driver的测试
#!/bin/bash compile=gcctest_filename=driver.c test_filename_base=${test_filename%.*}test_basename=test# echo and run the specified commandecho_and_run(){ echo $@ eval $@ if原创 2011-11-16 13:43:45 · 1323 阅读 · 2 评论 -
在shell中利用 bc 实现小数或者整数的比较操作
echo listobjects=$listobjectsecho logfile=${logfile}dos2unix ${performanceLog} &> /dev/zero# get the performanceLog row number trac_rows=`sed -n '$=' ${performanceLog}`# echo trac_rows=$原创 2011-12-14 21:23:46 · 4674 阅读 · 2 评论 -
用command模拟多线程
emus -- 用command模拟多线程 <!-- var commandList = []; function executeCommands(){ if (commandList.length > 0) { commandList.shift()(); } } functio转载 2012-08-05 09:47:30 · 681 阅读 · 0 评论 -
C++Test的使用说明
一. 安装说明第一步:打开安装源程序,同普通的windows应用程序一样,选择安装路径,完成安装。第二步:从桌面或者 菜单打开C++Test,将弹出类似于下面的一个窗口:这里的machine ID就是C++Test和主机绑定的信息。这个machine ID需交给 华唐公司,来申请license。而由于license的种类不同,可以分为local license(单机版)和net l转载 2012-08-05 10:11:56 · 7219 阅读 · 1 评论 -
简单、直观的实现优于复杂、难懂的实现,最近开发扑克识别过程的总结
最近开发了款通用的扑克识别程序,本文谈下心得。最开始是准备使用Shape Context或Zernike矩来识别的,写出了Shape Context,发现识别率达不到理想状态。接着准备用Zernike矩实现,查找文献发现,Zernike矩虽然理论上对旋转是不变的,但实际上,图像的旋转会导致识别率降低,加上样本不多,就放弃了这两种方法。最后,还是用最基本的模板匹配和Blob分析来解决的,在只有单一的转载 2012-08-04 22:51:21 · 795 阅读 · 1 评论 -
perl 模式匹配
第六章 模式匹配by flamephoenix一、简介二、匹配操作符三、模式中的特殊字符1、字符+2、字符 []和[^]3、字符 *和?4、转义字符5、匹配任意字母或数字6、锚模式7、模式中的变量替换8、字符范围转义前缀9、匹配任意字符10、匹配指定数目的字符11、指定选项12、模式原创 2012-08-05 10:38:24 · 842 阅读 · 0 评论 -
算法系列之二: 三只水桶等分水问题
有一个容积为8升的水桶里装满了水,另外还有一个容积为3升的空桶和一个容积为5升的空桶,如何利用这两个空桶等分8升水?附加条件是三个水桶都没有体积刻度,也不能使用其它辅助容器。 这是一道经典题目,一般人都可以在一分钟内给出答案,不过,很多人可能没有注意到这道题的答案不是唯一的。先来看看最常见的一个答案,也是目前已知最快的操作步骤,共需要7次倒水动作: 从容积是8升的桶中倒5转载 2012-08-19 18:20:40 · 1292 阅读 · 0 评论 -
算法系列之一 : Google方程式
有一个字符组成的等式:WWWDOT - GOOGLE = DOTCOM,每个字符代表一个0-9之间的数字,WWWDOT、GOOGLE和DOTCOM都是合法的数字,不能以0开头。请找出一组字符和数字的对应关系,使它们互相替换,并且替换后的数字能够满足等式。这个字符等式是Google公司能力倾向测试实验室的一道题目,这种题目主要考察人的逻辑推导能力和短期记忆能力,通常棋下的好的人解决这类问题会更得心应转载 2012-08-19 18:18:25 · 1075 阅读 · 0 评论 -
算法系列之四:字符串的相似度
我们把两个字符串的相似度定义为:将一个字符串转换成另外一个字符串的代价(转换的方法可能不唯一),转换的代价越高则说明两个字符串的相似度越低。比如两个字符串:“SNOWY”和“SUNNY”,下面给出两种将“SNOWY”转换成“SUNNY”的方法: 变换1: S - N O W Y S U N N - Y Cost = 3 (插入U、替换O、删除W)转载 2012-08-19 18:23:01 · 702 阅读 · 0 评论 -
算法系列之五:最长公共子序列(LCS)问题(非连续子序列)的两种解法
最长公共子序列也称作最长公共子串,英文缩写是LCS(Longest Common Subsequence)。其定义是:一个序列S,如果分别是两个或多个已知序列的子序列,且是符合此条件的子序列中最长的,则称S为已知序列的最长公共子序列。 关于子序列的定义通常有两种方式,一种是对子序列没有连续的要求,其子序列的定义就是原序列中删除若干元素后得到的序列。另一种是对子序列有连续的要求,其转载 2012-08-19 18:23:56 · 1137 阅读 · 0 评论 -
算法系列之三:妖怪与和尚过河问题
有三个和尚(或传教士)和三个妖怪(或食人怪)过河,只有一条能装下两个人(和尚或妖怪)的船,在河的任何一方或者船上,如果妖怪的人数大于和尚的人数,那么和尚就会有被吃掉的危险。你能不能找出一种安全的渡河方法呢? 这是一个很有意思的智力题,但是并不难,每次可以选择一个人或者两个人过河,只要保证在河的任何一边的和尚数量总是大于或等于妖怪的数量即可。这里先给出一种过河方法: 两个妖转载 2012-08-19 18:22:04 · 2640 阅读 · 0 评论 -
opqcp:C语言混淆器
从C FAQ上看到的一个程序,可以将C语言源文件变成难以识别的代码。文件从http://www.faqs.org/ftp/usenet/comp.sources.misc/packages/opqcp/下载得到。opqcp.zip转载 2012-09-02 20:07:46 · 6171 阅读 · 3 评论