自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 SIMD、SSE、AVX指令集

指令集指令集是指CPU能执行的所有指令的集合,每一指令对应一种操作,任何程序最终要编译成一条条指令才能让CPU识别并执行。CPU依靠指令来计算和控制系统,所以指令强弱是衡量CPU性能的重要指标,指令集也成为提高CPU效率的有效工具。CPU都有一个基本的指令集,比如说目前英特尔和AMD的绝大部分处理器都使用的是X86指令集,因为它们都源自于X86架构。但无论CPU有多快,X86指令也只能一次处理...

2019-01-11 20:04:37 3702

原创 C++ 算法库,algorithm

头文件介绍<algorithm>是所有STL头文件中最大的一个(然而它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等模板函数介绍1.不修改容器顺序(元素位置)的操作函数名函数原型,参数,示例描述all_of(c++11)描述a...

2020-02-11 16:00:37 173

原创 llvm循环向量化流程

llvm向量化流程(llvm版本9.0)采用了最新的llvm版本,向量化流程如图所示:解释后续在写:

2019-04-18 16:57:47 572

原创 循环链表的实现-线性表(三)

循环链表无论是静态链表还是动态链表,有时在解决具体问题时,需要我们对其结构进行稍微地调整。比如,可以把链表的两头连接,使其成为了一个环状链表,通常称为循环链表,例如:需要注意的是,虽然循环链表成环状,但本质上还是链表,因此在循环链表中,依然能够找到头指针和首元节点等。循环链表和普通链表相比,唯一的不同就是循环链表首尾相连,其他都完全一样循环链表的实现循环链表和链表唯一的不同时是:链表...

2019-03-31 12:50:52 197

原创 gdb调试llvm源码

准备工作安装gdb:链接:https://blog.csdn.net/weixin_42826139/article/details/88822420编译llvm的debug类型:链接:https://blog.csdn.net/weixin_42826139/article/details/88382253怎么检查是不是编译了llvm的debug类型:gdb clang这种是编译了d...

2019-03-26 16:27:52 421

原创 linux手动安装gdb8.2

下载gdb8.2可以去gnu官网去下,由于官网下载慢,所以本文给出清华大学开元镜像软件下载地址,https://mirrors.tuna.tsinghua.edu.cn/gnu/gdb/,然后选择下载版本。编译gdb8.2解压压缩包:tar -xzvf gdb-8.2.tar.gz与gdb-8.2同级目录创建编译文件夹和安装文件夹:mkdir build && mkdir...

2019-03-26 15:53:12 1101

原创 静态链表的实现--线性表(三)

静态链表静态链表可以融合顺序表和链表各自的优点,从而既能快速访问元素,又能快速增加或删除数据元素。静态链表,也是线性存储结构的一种,它兼顾了顺序表和链表的优点于一身,可以看做是顺序表和链表的升级版。使用静态链表存储数据,数据全部存储在数组中(和顺序表一样),但存储位置是随机的,数据之间"一对一"的逻辑关系通过一个整形变量(称为"游标",和指针功能类似)维持(和链表类似)。静态链表的结构节点...

2019-03-20 21:38:11 443

原创 linux手动安装gcc-5.1.0

yum源和apt-get源安装linux下安装gcc和g++时,可以使用源安装,例如:yum install gcc 或者 apt-get install gcc,但是这有个缺点,就是可能不能安装到你想要的版本,因此我们需要手动安装。下载gcc不同版本gcc是gnu的产品,所以我们可以去gnu官网去下,但是gnu下载的比减慢,这里提供一些大学的软件开元镜像源,比如清华大学:清华大学开元镜像源...

2019-03-19 19:34:19 3595 2

原创 centos安装xdg-open

原因:xdg-open: no method available for opening ‘/tmp/dom-d7b8e9.dot’解决:yum install xdg-utils

2019-03-19 10:18:37 741

原创 链表的实现--线性表(二)

链表(链式存储结构)链表,别名链式存储结构或单链表,用于存储逻辑关系为 “一对一” 的数据。与顺序表不同,链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其物理存储位置是随机的。例如,使用链表存储 {1,2,3,4,5},数据的物理存储状态和顺序表对比如图所示:但是我们看到,图中根本无法体现出各数据之间的逻辑关系。因为他们师零星存储的,针对这个,链表的解决方案是,每个数据元...

2019-03-16 16:39:10 120

原创 顺序表的实现--线性表(一)

顺序表(顺序存储的结构)什么是顺序表顺序表,全名顺序存储结构,是线性表的一种。线性表用于存储逻辑关系为“一对一”的数据,顺序表自然也不例外。此外,线性表是逻辑,顺序表是这种逻辑结构在内存上的实现,顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,存储时做到数据元素之间不留一丝缝隙。例如,使用顺序表存储集合 {1,2,3,4,5},数据最终的存储状态为:1...

2019-03-14 10:28:00 351

原创 llvm的安装

下载下载地址:https://github.com/llvm/llvm-project第一种下载,git clone https://github.com/llvm/llvm-project.git,这种是下载的最新的。而且下载下来的是文件夹形式第二种下载,打开https://github.com/llvm/llvm-project找到上面releases,点击,里面有很多旧版本。点击r...

2019-03-10 19:14:06 3295

原创 C++ string类

string类介绍C++ 大大增强了对字符串的支持,除了可以使用C风格的字符串,还可以使用内置的 string 类。string 类处理起字符串来会方便很多,完全可以代替C语言中的字符数组或字符串指针。string 是 C++ 中常用的一个类,这里强调一下,string是c++的一个类,所以定义时是定义了一个对象。定义string 变量(对象)的方法使用 string 类需要包含头文件**...

2019-03-05 10:57:26 88

原创 C++ class、struct的区别

C++ 中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。C++中的 struct 和 class 基本是通用的,唯有几个细节不同:使用 class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默...

2019-03-04 21:11:05 53

原创 C++ friend友元函数和友元类

1.什么是友元?一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来介绍一种例外情况——友元(friend)。借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的 private 成员。2.friend function友元函数...

2019-03-04 21:06:21 99

原创 C++构造函数(constructor)

1.何为构造函数(Constructor)?在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用)(显式调用示例:对象.成员函数的形式。),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。先来看个构造函数,示例1:#include &amp;lt;iostream&amp;gt;using namespace std;c...

2019-03-03 17:30:13 230

原创 C++ static关键字

static在c++中有两类用法:在面向过程时的用法(同C)在面向对象时的用法面向过程时的用法在面向过程时的用法有两种:修饰变量修饰函数1.修饰变量修饰变量有什么好处呢?改变作用域和保持变量内容的持久性。可以改变全局变量的作用域(也可以说用于隐藏),因为全局变量在多个文件编译时,是全局可见的,容易造成命名冲突,用static修饰后,只能在本文件中可见。和全局变量一起存...

2019-03-01 17:05:11 93

原创 C++标准模版库array

注:每个函数的应用示例会以超链接不断给出类模板array介绍class templatestd::arraytemplate &amp;lt; class T, size_t N &amp;gt; class array;array是c++11引入的新特性,较旧的编译器可能不支持它。array class注:一下来自官方文档翻译,英语不好,多多包涵。数组是固定大小的序列容器:它们包含以严格线性顺序...

2019-02-27 16:51:24 175

原创 C++标准库、C++标准模版库介绍

注:每个库详细介绍以后会在本文中以超链接形式呈现给大家1.c++标准库(C++ Standard Library)C++强大的功能来源于其丰富的类库及库函数资源。 C++标准库(C++ Standard Library, 亦可称作,C++标准程序库)的内容总共在50个标准头文件中定义。在C++开发中,要尽可能地利用标准库完成。基本介绍C++标准库,C++ Standard Library,...

2019-02-27 14:48:00 554

原创 二分插入排序(折半插入排序)--排序算法(六)

折半插入排序思想直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素。排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。直接插入排序就像打牌抓牌一样,手中的牌都是有序的,当从下面拿起一张牌的时...

2019-02-23 14:20:05 900 1

原创 归并排序--排序算法(五)

归并排序排序思想归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案&amp;amp;amp;quot;修补&amp;amp;amp;quot;在一起,即分而治之)。比较适用于处理较大规模的数据,但比较耗内存。归并排序思想:申请空间,使其大小为两个已经排序序列之和(这是两...

2019-02-22 14:43:01 173

原创 快速排序(挖坑法和前后指针法)--排序算法(四)

快速排序思想快速排序(Quick Sort)使用分治法策略。它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序流程如下:从数列中挑出一个基准值。将所有比基准值小的摆放在基准前面,所有比基准值大的摆在...

2019-02-21 20:06:33 393

原创 选择排序--排序算法(三)

选择排序排序思想选择排序(Selection sort)是一种简单直观的排序算法。其基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序示例以数列{20,40,30,10,60,50}为例,演示其选择排序过程(如下图)。排...

2019-02-21 10:38:27 98

原创 直接插入排序--排序算法(二)

直接插入排序思想直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素。排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。直接插入排序就像打牌抓牌一样,手中的牌都是有序的,当从下面拿起一张牌的时...

2019-02-21 10:07:49 118

原创 冒泡排序--排序算法(一)

冒泡排序思想冒泡排序一种简单的排序算法。从左向右遍历数组,两两比较,若前者大于后者,则交换两者的值,这样第一轮遍历完成(按数组索引0到n-1)最大的数在数组的末尾。从左到右再次遍历数组(0到n-2)可以得到第二大的数。依次遍历,直到数组遍历完成。冒泡排序图解下面以数列{20,40,30,10,60,50}为例,演示它的冒泡排序过程(如下图)。我们首先分析第一趟排序:当i=...

2019-02-20 22:00:20 127

原创 c语言标准与使用,以及标准库导言

C 标准库C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言。C 语言是一种广泛使用的计算机语言,它与 Java 编程语言一样普及,二者在现代软件程序员之间都得到广泛使用。C 标准库是一组 C 内置函数、常量和头文件,比如 &amp;lt;stdio.h&amp;gt;、&amp;lt;stdlib.h&amp;gt;、&amp;...

2019-01-22 15:31:24 128

原创 AVX指令集实现矩阵乘

本节矩阵乘选择方阵思想:c语言默认按行优先存储,矩阵a * b,a的行连续,可以连续访存,大大提高效率;但是b要按列取数,所以去b的列向量浪费时间,解决办法是:将b转置存储,这样b就可以按行进行连续访问。但是要牺牲空间去转存,还浪费了转存的计算时间。但实际仍然有加速效果。另外还有很多算法可以提升效率。#include &lt;stdio.h&gt;#include &lt;time.h&g...

2019-01-12 13:53:42 454

原创 SSE指令集实现reduce归约操作

通俗的说这里的归约就是求和,比如:for(i = 0; i &amp;lt; n; i++){sum += a[i];}这里主要对比较正常写代码的归约和循环展开以及SSE指令向量归约操作的比较。话不多说,上代码:#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;x86intrin.h&amp;gt;#include &amp;lt;time.h&amp;gt;#incl

2019-01-12 13:29:53 267

原创 处理器的系统结构分类

通俗的说处理器就是处理一系列指令和数据的设备,因此从处理器指令和数据两个维度可以对处理器的系统结构进行分类。Flynn将处理器系统结构分为一下四类:SISD(single instruction single data),一次处理一条指令,一条指令处理一份数据,早期处理器使用较多。SIMD(single instruction multiple data),一次处理一条指令,一条指令处理能处...

2019-01-11 11:06:15 190

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除