cuda编程笔记


####################################################################
cuda环境配置 第四课
####################################################################
https://www.bilibili.com/video/BV1kx411m7Fk?p=4&spm_id_from=pageDriver
###############################
一、系统环境查看
1.查看系统版本号
cat /etc/issue
2.查看内核版本号
uname -aG
3.查看系统上安装的gpu卡的型号是什么
lspci | grep -i nvidia
4.查看是否安装了gcc
gcc -v
二、安装之前历史版本
1、卸载之前安装的历史版本驱动
sudo nvidia-uninstall

2.清除之前nvidia相关的库
sudo apt-get --purge remove nvidia-*

3.环境变量修改
source .bashrc

4.查看cudatoolkit版本号
nvcc --version

5.验证是否安装成功 
sample下尝试编译看是否可以成功

samples/bin/x86_x64/linux/relase

/tools/NVIDIA_CUDA-11.4_Samples/bin/x86_64/linux/release$ ./deviceQuery 查看设备情况

####################################################################
cuda gpu设计思路 架构 lesson5
####################################################################
1、ALU 计算单元 每个可以单独计算数据
上下文
存储空间
指令流

2、GPU设计思路:employed 利用 压榨 剥削
    只把上手工作的人员留下来,不要管理者
    只留下干活的人,且每个干活的人配置很多个干活的手 
    干活的人不停团团转,不停干活,只要停下来等待会给分配其他的活儿

3、GPUcore设计思路
    sm-cuda核

4、访存问题 如何规整、访问数据
    cpu:
        缓存占用很大 分级 一般分为3级 
        显存
    访存带宽是非常宝贵的资源:1、高端gpu计算能力强大 干货能力强 但是数据供应不上 路不够宽 人在闲着 半开工状态 效率低下
    gpu访存设计:
        总线带宽设计的非常宽,高速路很宽,但是和gpu处理能力相比还不是很充分(gpu处理能力是cpu的10倍以上)
        
    优化思路:
        尽量把访存的时间压缩到一起,把需要的不同数据一起读取进来
        gpu中的的主存很大(和cpu相反)
5、gpu架构
异构的:有不同的结构
重核的:很多核 成百上千
处理速度快

6、高效gpu任务的条件
最好有大量的独立工作,可以利用大量的aiu单元
尽量要有计算密集的任务
最好不需要很高的访存

####################################################################
cuda和gpu编程模型 lesson6
####################################################################
1、cpu gpu互动模型 2者如何交互的
- 各自有自己的物理空间
- 访存速度
    寄存器
    localmemory sm内部 在显存里 
    globalmemory 

2、gpu线程组织模型
    线程并行
    多线程执行相同的流
    大量的线程在承载和调度

3、gpu存储模型

4、编程介绍
    扩展的c语言,基本是c语言,加了一些前缀 修饰词
    
####################################################################
cuda编程 lesson7
https://www.bilibili.com/video/BV1kx411m7Fk?p=7&spm_id_from=pageDriver
####################################################################
1、架构设计特点
适合计算密集、高度可并行
gpu中的计算占比高

2、gpgpu 最前面的是通用计算 把图形计算协处理器发展为通用计算的完整结构

3、cuda线程 层次化线程集合 共享存储

4、host一般指cpu device通常指gpu
数据并行化代码 基于cuda c编程 或者fortune
host和device 2者拥有独立的存储器,数据存储、分布设计需要考虑

cuda编程包含主机端和设备端
kernal:设备端执行的并发函数 主机端 硬件负责创建和管理线程 和普通线程不同

5、 
grid 公司
block 科室
线程 人
    block内部的线程可以共享存储器(科室内部的员工可以步调一致做事情、共享硬件资源)
    
6、block
一维 线
二维 面
三维 体

7、线程索引:员工编号
需要有block编号、员工编号
sm:完整的cuda核
内存中的数据传输

8、存储器3个层次
每个线程私有的寄存器 每个人的办公桌
线程块共享存储器 每个科室公共的打印机、写字台,不给其他科室用
整个gpu globalmemory的共享存储器 :所有公司的人都可以访问 比如食堂

device端:
    每个线程员工可以干什么:可以使用个人私有的寄存器、整个线程块共享的资源、global memory公共的存储器
    constant memory:固定值存储器 为了多个线程使用某个不变的数据 比如公司的公示牌、公告, 只读的不能写

主机端:
    可以读写gpu上的constant memory、global memory、


数据传输:
    constant memory、global memory 都是存在gpu芯片中的;

内存操作cudamemcp:
        cpu之间、主机<->设备之间、设备端内部

你可能感兴趣的:(AI测试,linux,运维,服务器,ai)