Linux操作系统(Ubuntu)
作用
是现代计算机系统中最基本和最重要的系统软件,是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩展,提供命令,接口,图形化交互等方式给用户或应用软件,使其可以更快捷,简单的使用计算机硬件。
文件目录结构
![](https://img-blog.csdnimg.cn/img_convert/736374f0e6e3b00f1cb4227c40a32576.png)
Makefile
作用
相当于集成开发环境,实现“自动化编译”,极大的提高了软件开发的效率。makefifile定义了一系列的规则来指定,哪些文件需要先 编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因 为makefifile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
使用规则
注释用 ‘#’
ALL:makefile的最终实现
通配符:
src = $(wildcard *.c) 匹配当前工作目录下所有的.c文件。 (例:src = test.c)
obj = $(patsubst %.c, %.o, $(src)) 将参数3中,包含参数1的部分替换为参数2 (例:obj = test.o)
clean:-rm -rf $(obj) : 强制删除当前目录下所有.o文件
伪目标:
.PHONY: clean all(不区分大小写)
自动变量:
$@:在规则的命名中,表示规则中的目标。
$<:在规则的命名中,表示第一个依赖条件。若将其用于模式规则中,则可将依赖条件列表套用模式
$^:在规则的命名中, 表示所有依赖条件。
![](https://img-blog.csdnimg.cn/img_convert/1ea8d9cfee2e8c83846f57ef27a5b217.jpeg)
Cuda程序编写:
关键词:
"__global__":修饰的函数必须采用void返回值,并且需要在调用时制定运行的参数 (也就是<<<>>>里的block数和线程数)
"<<<blockIdx,threadIdx>>>":blockIdx:线程块 threadidx:线程 (编号索引值=blockldx*(blockldx所包含线程)+threadldx
"cudaDeviceSynchronize()":在gpu完成之前交给cpu,cpu用内核去找到出口,将gpu进程的返回值进行保存
利用NVCC进行编译
/usr/local/cuda/bin/nvcc
![](https://img-blog.csdnimg.cn/img_convert/b5e4bbeba4653873a315176ca6310843.jpeg)
程序01:
代码示例
![](https://img-blog.csdnimg.cn/img_convert/e859cc93b32620f3208aa2079e6b6d35.jpeg)
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/a935935ac46860aec0a8aa5648bf5d8d.jpeg)
使用nvprof查看程序性能
sudo /usr/local/cuda/bin/nvprof ./hello_cuda
![](https://img-blog.csdnimg.cn/img_convert/d316c96ef556afc658bcccee33eaab81.jpeg)
Profiling result:是GPU(kernel函数)上运行的时间
- API calls:是在cpu上测量的程序调用API的时间
程序02:
代码示例:
![](https://img-blog.csdnimg.cn/img_convert/620b7887cb8951a50b3c1eb16f673c44.jpeg)
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/df49ff7eca88b7bf3bc0ffe4b1fda50f.jpeg)