【C语言点滴】
C1:前言
1、C书经典
2、baigoogledu.com,stackoverflow.com;CSDN.net;newsmth.net;LaTeX;《算法导论》;数学、计算数学、数学思维。
3、google搜索从入门到精通
4、软件工程:懂得软件工程的程序员就不再是妓女了。
C2:编程基础
一、对C的看法:三句话。1、世上只有两种产品,一种是没人用的,另一种是被人骂的。2、你恨它,适应它,最后你离不开它。3、如果你爱C,不需要理由;如果你不爱C,任何事都是理由。
二、如何学好C:幸福就像狗的尾巴,。。。静若瘫痪,动若癫痫。学习方法:一行又一行的敲代码...。不要只是学习语法,,,。Dirty hands。
【CUDA】
零零、5.2
1、讲了CPU、GPU各自的特点;我们面临实际问题的场景和情况;什么样的设备适合处理这类问题。
2、C、G任务、硬件方面处理的不同
3、GPU指令开销优化带来的性能提升
4、循环并行化。循环控制变量i ==> 线程索引标识
5、warp的调度,各个warp之间执行顺序的关系。每个SM在某一瞬时时刻只处理一个warp。在它阻塞(比如由于内存读取导致无法进行下面的操作)产生大量空闲时,下一个warp就会转为执行状态,以填补这个空闲。
6、合并成一个warp一个执行的好处。
零、5.3 讲线程块
1、引入线程块后,线程号的索引
2、注意内存越界访问错误
3、设置每个块内的线程数:一个SM能处理的block数 = 每个SM所能支持的最大线程数 / 设好的块内线程数。需要多少个硬件SM数 = 总的block数 / SM能处理的block数。
4、<stdlib.h>,<conio.h>
一、5.4 线程网格
1、线程块内线程数的设置原则:(1)不能太小,太小无法充分利用硬件。(2)目标数据是块内线程数、同时也是线程束大小的整数倍,易于编程。
数组数据的布局原则:数组宽度最好是线程束大小的整数倍。
NOTE:很多图像算法用的就是8*8的线程块处理像素。
2、线程块的布局:要的是横条状的行分布,而且行的跨度为32的整数倍。
3、X、Y索引
二、5.5 线程束
1、分支、阻塞、半线程束
三、第X章,CUDA环境搭建
1、windows:VS平台。64位问题,库问题。2、linux,mac。3、nsight、集成于VS+独立监听,开启、调试、远程
【C】
1、const:C关键字,用它来修饰的变量值只能读,不能被更新。它存在的目的:取代预编译指令,消除其缺点,同时继承其优点。对于内存分配上的优点,const的百度百科词条中有详细介绍。它刚开始定义时不分配内存,第一次引用时才分配内存,以后再怎么用也不会另外再分配。而宏定义的情况则不同,有多处引用宏定义,就会多次进行宏替换,多次分配内存。特点:只读变量,本质还是变量,不能当常量使用。例如拿它去定义数组就是错的。带const的指针用法:例如对于 const char *p 和 char * const p,画一条线穿过*号位置,const在左边==>指针p指向的数据为常量,即 const char *p。在右边,则指针本身为常量,即 char * const p。