- 博客(69)
- 收藏
- 关注
原创 sublime插件配置
用了很久的sublime,确实感觉很多时候操作不便,还是多装点插件吧。package control基本中的基本,暂时主要用来intall其他插件,很方便。ctrl + shift + p然后输入install点击确定,再输入想安装插件的名字再选择+确定就能安装。BracketHighlighter让括号高亮。把default的内容复制到user中,然后搜索【“default”...
2019-12-27 15:40:06
170
原创 C++某些最佳实践收集
有些最佳实践确实没注意到,故摘录一下。p293 如果你不确定应该使用哪种容器,那么可以在程序中只使用vector和list的公共操作:使用迭代器,不使用下标操作,避免随机访问。这样,在必要时选择使用vector或list都很方便。...
2019-12-23 22:34:06
325
原创 编译器O2优化下,分块矩阵乘法的TLB分析猜想
直接将写在实验报告里的那段放进去就算了,好累。3.3(2分)对最优分块大小的分析实验表明,分块大小为 32 时性能最好。这个结果和你的预期一致吗? 不一致 。如果不一致,其原因在于 使用perf工具对编译器优化参数为O0、O2下,m0/4、m0/2、m0三种分块大小的运行情况进行了查看,查看的参数主要为L1 dcache miss、dTLB miss。结果显示:...
2019-12-22 23:18:01
304
原创 循环问题---向前再处理,还是处理再向前
1.前提其实这个问题和二分挺像的,需要理出模板来。和二分不同的是,这个不能死板就按着一个模板来,先向前还是先判断,都是会用到的。先向前和先处理区别在于:先向前的话,要考虑终点的处理,到底终点要不要;先处理的话,要考虑起点的处理,到底起点要不要;有一个相似但不相同的问题,就是while与do…while,这两个其实只是单纯的循环控制,而且费点功夫也可以相互转化。为什么要设计两个?查阅资...
2019-12-20 17:27:02
318
原创 关于用例间的关系
泛化关系较为模糊的用例关系,某些标准直接将其限制成了类之间的关系,而不允许在用例之中使用。感觉上一般主要有两个角度:正常用例和各种异常处理用例;某个抽象功能根据不同子类别转换成相应的具体功能;异常处理很好理解,主要想谈谈抽象功能与具体功能。这种情况下的泛化,我感觉就是类似于质值的互相转化。根据值的不同采取不同的处理方式是非常常见的函数段:switch(var){case val...
2019-12-18 02:29:22
354
原创 【打杂总结】栈溢出的神奇错误
不小心没把str3换成sha1Input,因为str3这个label已删除了,所以用str3来访问相应虚拟内存块引起了越界,从而导致栈溢出,之后各种奇奇怪怪的运行结果,差点晕了。 copy("str3", "str2", R_gen1); append("str3", "str1", R_gen1, R_gen0); SHA1_block("str3", R_gen2); SHA1("sh...
2019-12-17 08:53:30
162
原创 【打杂总结】regSave()和regRestore()设计
最初的设计 ilabel("regRestore"); ... GMEC_VLIW({MOV_32(R32_24, R_mem0),MOV_32(R32_25, R_mem1), MOV_32(R32_26, R_mem2),MOV_32(R32_27, R_mem3)}); GMEC_VLIW({MOV_32(R32_28, R_mem4),MOV_32(R32_29, R_mem5...
2019-12-16 10:49:59
443
原创 【打杂总结】实现函数调用
前提芯片模拟器中纯汇编,还不是常规汇编,编程难度太大,于是需要从软件层面上模拟循环、函数调用等。实现函数调用的时候,总觉得有哪些不对,于是详细思考了一下函数调用本身的作用。函数调用函数调用本身的作用:开辟一片局部数据空间;跳转到相应代码段;具体的效果是这样的,多次调用某一个函数func()时,都会跳转到指令空间的某个位置,这样可以大大降低指令空间的总体大小。每次调用函数func()...
2019-12-15 16:54:14
234
原创 关于类static成员的使用
1.类的static成员//非静态成员函数使用静态成员变量class staticTest{public: void func0() { cout << staticVar << endl; } static void func1() { }private: static int staticVar; int var;};//静态成...
2019-12-11 20:47:12
292
原创 关于编译器是否合成默认构造函数
1.我的疑惑语言标准,和编译器实现是不同的。语言标准感觉就像需求吧,编译器实现则是具体的实现。语言标准中甚至有很多未定义的地方,比如【未指定的值】到底是多少,到底用【未指定的值】还是【陷阱标识】作为默认初始化基本数据类型的初值。再比如ungetc函数,这个更乱。对于编译器合成默认构造函数问题,我一直有疑惑,c++ primer上说:如果我们的类没有显式地定义构造函数,那么编译器就会为我们隐...
2019-12-11 15:49:33
377
原创 C++初始化探究
1.C++数据类型参考C++标准,我认为数据类型可以分为这几大类型:基本数据类型类类型聚合体(非类类型的struct)数组2.C++初始化写法无符号T t、T t = new T默认初始化,全都适用;类的初始化列表class c{ c(): m(_m){}};()符号T t(val),T t(t1)显式初始化,基础数据类型和类类型可用,类类型常用;T...
2019-12-09 04:10:00
243
原创 关于坑爹的浮点矩阵乘法结果正确性测试
1.浮点数计算结果与计算顺序相关例如矩阵乘法设mc = ma * mb,都是方阵,维数为8。以c00的计算作为例子,以下这种是最常见的计算顺序c00 = a00 * b00 + a01 * b10 + a02 * b20 + a03 * b30 + a04 * b40 + a05 * b50 + a06 * b60 + a07 * b70计算顺序大致是tc = 0tc = tc +...
2019-12-08 22:38:26
962
原创 程序调试感悟
1.调试基本思路我觉得调试的基本思路,就是要确立两个元素:可信点;可疑点;我们一定要首先确定、或者假设一些部分是可信的,一些部分是可疑的。然后在这基础上去编程/笔算出,这种假设下可疑部分的每一步结果应该是怎样的,再用gdb去不断输出结果,和预想进行对比。例如程序存在两个部分:矩阵乘法;找结果矩阵mc中每行最大值组成数组中的最小值;我们如果要进行调试,一定要先确定/假设,某一...
2019-12-08 22:07:44
697
原创 segment fault出现的原因收集
1.数组越界这个是看到过最多的,所以当用core定位后发现,那行代码中存在某个数组,基本可以大致确定,问题是数组越界。有两种常见原因导致数组越界:索引值没有初始化,在做基数排序并行化的时候,我某个索引表没有初始化,结果发生了数组越界;索引终点end,和数组长度len傻傻分不清,这个主要依靠规范化自己的编程习惯去避免,例如我现在遇到区间,一定是基于[min, max)这种方式去考虑;2....
2019-12-08 21:51:33
699
原创 寻找数组的最大值/最小值&&获取数组特定位置指针
昨晚出糗了,发现我虽然点了一部分并行计算、计算机底层、编程语言细节、程序调试方面的技能点,但是在基础编程方面其实很弱。这是本科期间刷题太少所落下的毛病,应该增强一下,特此长期收集总结一下一些非常常用的基本函数。1.寻找数组的最大值/最小值T findMax(T* arr, int N){ //注意这里,昨晚就是因为顺手就写int,心急起来眼瞎才出糗的 T max = arr[0]; i...
2019-12-08 21:30:00
652
原创 关于浮点数和整数的隐式转换
坑死了。今晚上机考试,我的矩阵乘法优化基本很有信心在速度排名中拿第一,然后老师让写一个简单的测试程序测试结果正确性。测试程序自然是不难的,虽然很紧张,但我还是很快就写好了。结果发现,不正确!!!当时那个急啊,测试程序没写对,我这题直接没分了,白瞎了我耗费了N多心血的程序优化。越急越误事,最后还是拉下脸皮找朋友借了个测试代码,才没完蛋。不过感觉既欠了别人人情,自尊心也很受挫。这一切的来源是什么...
2019-12-07 22:41:56
786
原创 二分查找模板
来自于liweiwei1419大佬的二分查找模板,我个人是比较喜欢 [left,right) 这种区间表示方法的。以后要坚持这个原则,别变了,遇到区间直接基于[)进行考虑。所以对于二分模板,我选择 l = beg; r = beg + len; while (l < r) { mid = l + ((l - r) >> 1); //arr[mid] == x...
2019-12-04 00:36:54
214
原创 ubuntu系统文件夹作用
/opt/文件夹用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。我个人的理解,/opt/适合用来放置那些集成、由多个模块组成的软件。例如sublime,虽然并不大,但其本身并不是只有一个单独的可执行文件,而是有各个模块和配置文件...
2019-12-03 01:10:52
897
原创 记一些已确定的观点
1.前提其实我觉得很多时候,问题并不是难,而是问题中充斥着不确定。我们经常不能确定某一处肯定是对的,从而去推导另一处到底错在什么地方,这通常就是问题的痛点。所以我想收集一下,确定是对的观点。2.观点二分查找liweiwei1419大佬的二分模板,比较喜欢用其中的 //判断0的时候是否就已经符合题意 l = 0; r = lenl; while (l < r) { mid...
2019-12-01 23:16:06
149
原创 两个有序数组中寻求前k小的数
题解分析1class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int n = nums1.size(); int m = nums2.size(); ...
2019-12-01 17:23:58
442
原创 边界值的处理方法与思考乱炖
1、直接得出结果例如经常对输入数组进行判断,如果元素为0的话,直接返回结果。就像随便翻到的lc上338题比特位计数,如果是0或者1的话,直接就可以得出结果。并且0、1是用来作为动态规划的起点的。2、作为异常例如游戏里叠BUFF,经常程序员会用int作为属性数值类型,如果不进行判断的话,最后会溢出成负值,某个炉石主播就表演过…3、分类讨论就如找两个有序序列arr0和arr1的中位数,考虑...
2019-11-30 15:32:03
1456
原创 为什么二分查找要取中点作为每次的划分点
我昨天突然想到了一个问题,为什么二分查找,每次都要以中点作为区间的划分?也就是只能划分成[0, 1/2 * k),[1/2 * k, n)两个选择区间?我在想以1/4点划分不行吗?也就是[0, 1/4 * k),[1/4 * k, n),我要么选左1/4空间,要么选右3/4空间?这样貌似也大体上没什么问题?于是写程序验证之,发现并不行。于是分析了一下其中原理。二分法结果期望其实原因是这样的...
2019-11-30 00:47:27
1463
原创 Linux安装
制作安装盘使用unetbootin,操作相当傻瓜式,比软碟通好用。可以刻录ubuntu、centos等。ubuntu桌面版本名字ubuntu-16.04.3-desktop-amd64.isoubuntu-18.04.3-desktop-amd64.isocentos相关如果不是everything版的话,安装的时候没有本地仓库,想安装图形化桌面的话需要连接网络下载。...
2019-11-22 21:36:40
178
原创 windows上如何将启动盘恢复成普通U盘
A.打开cmd,win + R;B.dispart进入命令行工具;C.list disk找到U盘的disk号;D.select disk x,选择U盘;E.clean,完美清空U盘;F.到磁盘管理页面中,选中U盘,新建简单卷,重新将U盘格式化;...
2019-11-22 17:15:50
623
原创 关于业务用例和系统用例
1.基础概念软件系统: 我觉得想要理解整套软件建模流程的话,应该先弄清一个最根本的问题,软件到底是干什么的?为何要有软件?我的观点是软件的意义其实和蒸汽机、汽车制造业的流水线等等没本质区别。【软件的作用我认为就是自动化,用机器来完成原来由人力完成的任务。】如果目的是自动化的话,那么很容易就能得出软件建模的最基本思路:A. 没目标软件前的业务流程是怎样的?B. 目标软件可以自动化业务流程中的...
2019-11-15 02:04:18
2037
原创 基数排序的硬件层面优化实现总结
先开个文章保存点找到的资料,写完作业后再写。利用GPU进行局部排序,提高内存带宽利用的实现版本,intel的系统性介绍文章中有进行引用,intel文章中只详细介绍了CPU实现:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5161005非常经典的资料,大多相关优化文章都有引用里面提到的基础技术,GPU实现SIMD式局...
2019-11-11 21:15:34
245
原创 POSIX多线程中的互斥量、条件变量、信号量笔记
1.基础概念互斥量: 就是最基本的锁,利用上锁和开锁使多个线程在竞争区域串行化。是最基础的同步量,条件变量必须和一个互斥量相关联,而暂时所接触到的作为线程同步量使用的信号量,一般也是和互斥量共同使用的。拒我暂时的理解,其他两个同步量可以说是,一种对于互斥量的扩展。条件变量: 编程中经常会遇到这样的情景,角色A接下来步骤的进行,需要依赖于某个状态a,而状态a由角色B去改变。如果在串行中的话,这个...
2019-11-06 16:25:09
246
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅