update formate
This commit is contained in:
parent
d06791d2ce
commit
ae3602a1cf
|
@ -12,8 +12,8 @@ CUDA gpu 编程学习,基于 《CUDA 编程——基础与实践》(樊哲
|
||||||
|
|
||||||
CUDA 官方文档:
|
CUDA 官方文档:
|
||||||
[CUDA c++编程指南](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html)
|
[CUDA c++编程指南](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html)
|
||||||
[CUDA c++最佳实践指南](https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html)
|
[CUDA c++最佳实践指南](https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html)
|
||||||
[CUDA 运行时API手册](https://docs.nvidia.com/cuda/cuda-runtime-api/index.html)
|
[CUDA 运行时API手册](https://docs.nvidia.com/cuda/cuda-runtime-api/index.html)
|
||||||
[CUDA 数学函数库API手册](https://docs.nvidia.com/cuda/cuda-math-api/index.html)
|
[CUDA 数学函数库API手册](https://docs.nvidia.com/cuda/cuda-math-api/index.html)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,8 @@
|
||||||
主机和设备都有自己的 DRAM,之间一般由 PCIe 总线连接。
|
主机和设备都有自己的 DRAM,之间一般由 PCIe 总线连接。
|
||||||
|
|
||||||
GPU 计算能力不等价于计算性能;表征计算性能的一个重要参数是 **浮点数运算峰值(FLOPS)**。
|
GPU 计算能力不等价于计算性能;表征计算性能的一个重要参数是 **浮点数运算峰值(FLOPS)**。
|
||||||
浮点数运算峰值有单精度和双精度之分。对于 Tesla 系列的 GPU,双精度下 FLOPS 一般是单精度下的 1/2;对于 GeForce 系列的 GPU,双精度下 FLOPS 一般是单精度下的 1/32。
|
浮点数运算峰值有单精度和双精度之分。对于 Tesla 系列的 GPU,双精度下 FLOPS 一般是单精度下的 1/2;
|
||||||
|
对于 GeForce 系列的 GPU,双精度下 FLOPS 一般是单精度下的 1/32。
|
||||||
|
|
||||||
影响计算性能的另一个参数是 **GPU 内存带宽(显存)**。
|
影响计算性能的另一个参数是 **GPU 内存带宽(显存)**。
|
||||||
|
|
||||||
|
@ -23,7 +24,8 @@ GPU 计算能力不等价于计算性能;表征计算性能的一个重要参
|
||||||
3. OpenACC,由多公司共同开发的异构并行编程标准。
|
3. OpenACC,由多公司共同开发的异构并行编程标准。
|
||||||
|
|
||||||
CUDA 提供两层 API,即 CUDA 驱动API 和 CUDA 运行时API。
|
CUDA 提供两层 API,即 CUDA 驱动API 和 CUDA 运行时API。
|
||||||
CUDA 开发环境中,程序应用程序是以主机(CPU)为出发点的;应用程序可以调用 CUDA 运行时 API、CUDA 驱动 API 和一些已有的 CUDA 库。
|
CUDA 开发环境中,程序应用程序是以主机(CPU)为出发点的;应用程序可以调用 CUDA 运行时 API、
|
||||||
|
CUDA 驱动 API 和一些已有的 CUDA 库。
|
||||||
|
|
||||||
------
|
------
|
||||||
|
|
||||||
|
@ -60,11 +62,11 @@ windows10 操作系统:[windows10下cuda环境搭建](https://docs.nvidia.com/
|
||||||
|
|
||||||
1. **CUDA Version**, 11.2;
|
1. **CUDA Version**, 11.2;
|
||||||
2. **GPU Name**,GeForce MX450,设备号为 0;如果系统中有多个 GPU 且只要使用其中某个特定的 GPU,
|
2. **GPU Name**,GeForce MX450,设备号为 0;如果系统中有多个 GPU 且只要使用其中某个特定的 GPU,
|
||||||
可以通过设置环境变量 **CUDA_VISIBLE_DEVICES** 的值,从而可以在运行 CUDA 程序前选定 GPU;
|
可以通过设置环境变量 **CUDA_VISIBLE_DEVICES** 的值,从而可以在运行 CUDA 程序前选定 GPU;
|
||||||
3. **TCC/WDDM**,WDDM(windows display driver model),其它包括 TCC(Tesla compute cluster);
|
3. **TCC/WDDM**,WDDM(windows display driver model),其它包括 TCC(Tesla compute cluster);
|
||||||
可以通过命令行 `nvidia-smi -g GPU_ID -dm 0`,设置为 WDDM 模式(1 为 TCC 模式);
|
可以通过命令行 `nvidia-smi -g GPU_ID -dm 0`,设置为 WDDM 模式(1 为 TCC 模式);
|
||||||
4. **Compute mode**, Default,此时同一个 GPU 中允许存在多个进程;其他模式包括 E.Process,
|
4. **Compute mode**, Default,此时同一个 GPU 中允许存在多个进程;其他模式包括 E.Process,
|
||||||
指的是独占进程模式,但不适用 WDDM 模式下的 GPU;
|
指的是独占进程模式,但不适用 WDDM 模式下的 GPU;
|
||||||
可以通过命令行 `nvidia-smi -i GPU_ID -c 0`,设置为 Default 模式(1 为 E.Process 模式);
|
可以通过命令行 `nvidia-smi -i GPU_ID -c 0`,设置为 Default 模式(1 为 E.Process 模式);
|
||||||
5. **Perf**,p8(GPU 性能状态,最大p0~最小p12);
|
5. **Perf**,p8(GPU 性能状态,最大p0~最小p12);
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ CUDA 采用 nvcc 作为编译器,支持 C++ 代码;nvcc 在编译 CUDA 程
|
||||||
|
|
||||||
### 使用 核函数 的 CUDA 程序
|
### 使用 核函数 的 CUDA 程序
|
||||||
|
|
||||||
一个利用了 GPU 的 CUDA 程序既有主机代码,又有设备代码(在设备中执行的代码)。
|
一个利用了 GPU 的 CUDA 程序既有主机代码,又有设备代码(在设备中执行的代码)。
|
||||||
主机对设备的调用是通过 **核函数(kernel function)** 实现的。
|
主机对设备的调用是通过 **核函数(kernel function)** 实现的。
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
@ -116,7 +116,7 @@ CUDA 采用 nvcc 作为编译器,支持 C++ 代码;nvcc 在编译 CUDA 程
|
||||||
一个线程块中的线程还可以细分为不同的 **线程束(thread warp)**,即同一个线程块中
|
一个线程块中的线程还可以细分为不同的 **线程束(thread warp)**,即同一个线程块中
|
||||||
相邻的 warp_size 个线程(一般为 32)。
|
相邻的 warp_size 个线程(一般为 32)。
|
||||||
|
|
||||||
对于从开普勒架构到图灵架构的 GPU,网格大小在 x, y, z 方向的最大允许值为 (2^31 - 1, 2^16 - 1, 2^16 -1);
|
对于从开普勒架构到图灵架构的 GPU,网格大小在 x, y, z 方向的最大允许值为 (2^31 - 1, 2^16 - 1, 2^16 -1);
|
||||||
线程块大小在 x, y, z 方向的最大允许值为 (1024, 1024, 64),同时要求一个线程块最多有 1024 个线程。
|
线程块大小在 x, y, z 方向的最大允许值为 (1024, 1024, 64),同时要求一个线程块最多有 1024 个线程。
|
||||||
|
|
||||||
------
|
------
|
||||||
|
@ -132,7 +132,7 @@ CUDA 头文件的后缀依然是 “.h”;同时,采用 nvcc 编译器会自
|
||||||
|
|
||||||
nvcc 会先将全部源代码分离为 主机代码 和 设备代码;主机代码完整的支持 c++ 语法,而设备代码只部分支持。
|
nvcc 会先将全部源代码分离为 主机代码 和 设备代码;主机代码完整的支持 c++ 语法,而设备代码只部分支持。
|
||||||
|
|
||||||
nvcc 会先将设备代码编译为 PTX(parrallel thread execution)伪汇编代码,再将其编译为二进制 cubin目标代码。
|
nvcc 会先将设备代码编译为 PTX(parrallel thread execution)伪汇编代码,再将其编译为二进制 cubin目标代码。
|
||||||
在编译为 PTX 代码时,需要选项 `-arch=compute_XY` 指定一个虚拟架构的计算能力;在编译为 cubin 代码时,
|
在编译为 PTX 代码时,需要选项 `-arch=compute_XY` 指定一个虚拟架构的计算能力;在编译为 cubin 代码时,
|
||||||
需要选项 `-code=sm_ZW` 指定一个真实架构的计算能力,以确定可执行文件能够使用的 GPU。
|
需要选项 `-code=sm_ZW` 指定一个真实架构的计算能力,以确定可执行文件能够使用的 GPU。
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue