自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CUDA编程的框架-以向量相加为例

CPU和GPU运行是异步的,CPU一运行完kernel函数之后就会走,不管GPU有没有算完,所以在写程序的时候要知道GPU算完没。它需要知道自己的块的ID:blockIdx.x, blockIdx.y, blockIdx.z ,说明这个函数只能在GPU中执行,只能在GPU中调用,不能像刚刚一样的调用。注意在编程时要区分CPU的程序和GPU的程序,CPU的内存和GPU的内存。CPU的内存和GPU的内存之间是相互独立的,因此需要进行通信。CPU适合控制GPU程序的逻辑结构。

2024-01-28 17:42:27 415

原创 CUDA+PTX关于GPU的入门基础概念

需要注意的是,这些数量限制是硬件和架构相关的,不同的GPU型号和架构可能会有不同的限制。所有线程在一个 warp 中执行的指令是同步的,即它们都执行相同的指令,无论这些线程是否满足条件。(比如一个程序含有128个线程,把每32个线程称为一个warp,一个warp是一个虚拟的并行计算的单元,warp是最基本的执行单位)不同的GPU含有的寄存器数量是未知的。块是调度和同步的基本单元。warp的切换是没有开销的,它依赖于硬件的调度器和算法的判断,可以执行的warp会被放在可执行的队列中,然后按照优先级进行执行。

2024-01-28 14:12:45 948

原创 动态库和静态库

库库的作用:实现代码的解耦、代码的重用、对外提供服务(export)Libraries play their role at run time or compile time. 库在运行时或编译时发挥其作用。Libraries have object files created by the “-c” gcc flag and end in “.o” by convention. They are the result of the output of the compiler and conta

2024-01-26 19:19:54 612

原创 无显卡用google colab或阿里云DSW学CUDA编程的环境配置教程

在搜 “没有显卡怎么学CUDA编程” 、 “怎么配置google colab的CUDA编程环境” 、 “怎么配置阿里云DSW的CUDA编程环境” 的时候并没有太多相关文章,就顺带着写下了这个文章,如果有需要的话可以看看。

2023-12-21 20:59:52 1636 1

原创 「700行手写编译器」Part 4:再看代码生成 笔记

代码生成:解析完源代码,形成了相应的VM指令,在正式执行VM指令之前。上图的左边的code区域会有这些数据,data区的数据在图的中间,除此之外其他的东西应该都是处在初始化的状态,比如寄存器、stack等。上图的右边是symbol table,在代码解析完成之后,实际上就不会有任何意义或任何作用了,它的作用只是在衔接定义和使用lexeme,让函数执行过程中,该lexeme前后关系和属性对应起来。

2023-12-20 15:33:00 415

原创 「700行手写编译器」Part 3.3:表达式与优先级爬山 笔记

优先级爬山算法:也就是遇到的符号的优先级能在栈中的情况一定是从栈底到栈顶,优先级越来越高(>=,也可以同级)的情况(比如+ → * → ++ )语句(statement):描述做什么,不需要返回值 (if…表达式(expression):为了求值,需要一个返回值 ( 2+3,4*5 )operater stack:可以通过递归调用的函数栈实现。number stack: 可以通过压入stack中实现。递归下降一直下降到表达式为止。但是a = 3的情况很难说是。因此我们把a = 3看成是。

2023-12-18 03:41:16 398

原创 「700行手写编译器」Part 3.2:语法分析与递归下降 笔记

我们在tokenize之后,看拿到的token是否符合S的解析规则,如果符合的话就逐步的解析它剩下的部分,①剩下的部分如果依然是S,那么就递归的调用parse_s继续做解析②如果剩下的部分是S’,那就调用parse_s’③或者不符合,就输出Symtax error。而token会把变量名a,b都记为Id,因此a,b的token是一样的。另外上面的Grammar没有带终结符,实际的Grammar中需要带终结符,这样解析的过程中,每一层解析都能至少解析掉一部分的token。:句子背后实际的含义。

2023-12-18 00:29:29 415 1

原创 「700行手写编译器」Part 3.1:词法分析与符号表 笔记

包括一些我们不需要的实际没有意义的字符:stop words(停用词),如//注释,space 空格,tab缩进,\n换行,没有实际含义。:Num(Number,比如enum{A,B,C},这里的A,B,C就是number),Fun(函数),Sys(System Call,比如printf),Loc(局部变量),Glo(全局变量)变量/函数的声明/定义是在实际使用之前,因此需要单独有一个table存储事先声明的变量/函数,当使用的时候必须在table中读出该变量/函数的属性然后才能使用它。

2023-12-17 19:46:53 875 1

原创 「700行手写编译器」Part 2.2:栈与函数调用 笔记

上图中的code是实现了一个二元的加法,如3+4这种,“,”输入数字3,探针右移,“,”输入数字4,然后“[”判断4!=0那就不会跳转继续执行,在“[ < + > ]”的循环过程中让3的位置不断+1,4的位置不断-1,直到4的位置减到0,那么原本3的位置就实现了3+4的结果。bp指到sp所指位置中描述的地址,也就是上一个函数的bp位置,然后sp++;答:可以没有函数调用,比如Brain-Fuck,一共只有八个语句“<”“>”“+”“-”“[”“]”“,”“.”。:首先把pc的下一个位置的值,压入栈中;

2023-12-17 14:06:01 955 1

原创 「700行手写编译器」Part 2.1:虚拟机与指令集 笔记

项目中设计的VM指令集说明VM指令集:1.Save & Load:IMM(immediate的缩写,加载立即数),LEA(load effective address),LC(load char), LI(load integer),SC(save char),SI(save integer),PUSH(将寄存器数据推到栈顶)

2023-12-17 11:34:14 419 1

原创 「700行手写编译器」Part 1:项目背景与设计思路 笔记

因为视频的作者说原本是想让编译器实现比基础的C编译器更多的内容,但是实际上实现的比C编译要缩减,B站视频的作者说实际上应该是C minus,看到评论区里有人说C - -,蛮好玩的,遂给专栏起名C - -编译器。

2023-12-17 09:56:05 909 1

原创 王道--数据结构第八章 排序

注意 high+1=low,所以课本上的表述与这里的表述是一致的。

2023-12-16 00:13:45 367

原创 王道--数据结构第七章 查找

红黑树算法演示链接情况1:兄弟够借,借右兄弟的关键字(以删除关键字38为例)情况2:兄弟够借,借左兄弟的关键字情况3:左右兄弟不够借,那就删完之后和兄弟节点合并到同一个节点(例:删除节点49)冲突的发生是不可避免的,我们应该尽可能的减少冲突发生的可能性,因此当我们在设计散列函数的时候,对于给定的关键字集合,我们应该根据关键字集合的特性来确定比较合适的散列函数,让这些关键字能够均匀的散列到各个地址中,分布的越均匀发生的冲突的可能性就越小。

2023-05-01 16:46:28 113

原创 王道--数据结构第六章 图

具体看王道6.4_1最小生成树的10min左右。

2023-04-22 10:26:35 34

原创 王道--数据结构第五章 树与二叉树

有三个指针,分别指向父节点、左孩子、右孩子。考研中通常是不带指向父亲节点的指针的,因此。👆空间复杂度为O(h+1)的量级,h是指二叉树的高度,“ +1 ”是因为叶子节点的左右孩子指针指向的NULL也需要递归。当然我们可以把常数项省略,所以空间复杂度为O(h)。

2023-04-16 23:11:51 52

原创 王道--数据结构第四章 串

KMP:利用好模式串本身的信息,当发生失配时,判断从哪个位置开始匹配。这个信息只与模式串有关,与主串无关。匹配过程中,当发生不匹配的时候:如果j=1,那么令 j=0, i++, j++;如果 j > 1 ,那么主串 i 的指针不变,j 转化为KMP计算出的位置,继续匹配。用KMP优化之后的串的匹配过程中,主串指针 i 不需要回溯。

2023-04-16 16:57:08 35

原创 王道--数据结构第三章 栈、队列和数组

用顺序存储的方式实现栈:栈的大小不可改变在做题过程中一定要指向的是栈顶元素的位置还是栈顶元素之后的那个位置。代码3.1.110可以通过的方式提高一整片分配给栈的空间的利用率逻辑上实现了两个栈,但物理上他们又是占用了同一片的存储空间,能够提高空间资源的利用率10。

2023-04-16 12:03:58 37

原创 王道--数据结构第二章 线性表

从头结点出发,通过游标依次往后遍历结点,直至找到我们想要的结点,时间复杂度O(n)。(注意我们这里说的是某一个位序的结点而不是某一个数组下标的结点,位序指的是各个结点在逻辑上的顺序,而这里的数组下表是实际物理存储空间中的位置顺序)可以在初始化静态链表的时候将空结点的游标next设置为特殊值,如-2,因此如果判断结点的游标next为-2时,就知道该节点是空闲的,可以用来存储新的数据元素。因此删除数据的时候也要记得将删除结点的游标next设置为-2,表示该点被回收了。1.找到一个空的结点,用来存放新节点。

2023-04-15 15:20:33 26

原创 C++算法中常用的语法

【代码】C++算法中常用的语法。

2023-04-07 23:48:58 93

转载 建模笔记1.3

层次分析法代码的编写函数作用size(A)矩阵A的大小,返回值为行数和列数[r,c]=size(A)矩阵A的行数和列数r=size(A,1)矩阵A的行数c=size(A,2)矩阵A的列数B=repmat(A,m,n)将A作为B的元素,B由m×n个A平铺而成A/B矩阵A除以矩阵B,即A/B=A*inv(B)inv(B)求B的逆矩阵A+B矩阵A、B的加法(减法同理)A*B矩阵A、B的乘法A./B或者A.*B两个形状相

2021-08-02 16:54:41 78

转载 建模笔记1.2

笔记主要是结合了哔哩哔哩中清风:数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学这一课程Matlab基础知识入门几个常用快捷键快捷键对应功能Ctrl+N新建文件Ctrl+S保存文件Ctrl+R注释Ctrl+T取消注释语句注意matlab中使用符号分号时一定要使用英文,中文会报错(另外中文的分号比较宽,英文的分号比较短)几个常用的功能语句功能语句描述对应功能clear清除工作区所有变量(右方内

2021-08-01 17:01:34 67

转载 建模电子笔记1.1

笔记主要是结合了哔哩哔哩中清风:数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学这一课程,并且有作者自己的课后作业的记录建模的三大块:建模+编程+写作第一讲:层次分析法(简称AHP)建模比赛的基础模型之一,主要运用于解决评价类问题(例如:哪种方案更好,哪个员工表现更优秀)评价类问题可用打分来解决列出评价问题的影响因子和其所占的权重;列出权重表格进行打分例如小明对于学校的选择问题![在这里插入图片描述](https://img-blog.csdnimg.cn/img_c

2021-07-25 00:29:23 350

原创 C语言文件的写入

C语言文件的写入#include <stdio.h>void print(int *a,int len);typedef struct _table{ char name[12]; int num[12];}table;int main(){ FILE* fp=fopen("textName.txt","r+"); if(fp==NULL){ printf("失败"); }else{ printf("111111"); } table tab[3]=

2021-04-21 17:46:05 679

原创 语言文件的读取与写入

C语言文件的读取与写入

2021-04-21 17:39:36 106

原创 C语言输入输出的总结及提升

C语言输入输出的总结及提升关于C语言的输入输出有多种组合配对方法下面进行总结和方法优化提升需要注意使用不同组合时的函数使用方法的微小变化(表明在注释和文章中了)组合一:gets()和puts()#include <stdio.h> int main(){ char a[80]; //读入和打印字符串 gets(a); puts(a); return 0;}另外也可以用puts()输出打印字符串,效果和printf()相似#include <stdio.h

2021-04-04 20:39:26 195

空空如也

空空如也

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

TA关注的人

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