CUDA编程
主讲CUDA的相关知识以及应用
Coder802
你的努力,终将成就不可替代的自己。
展开
-
Ubuntu20.4安装Nvidia GPU驱动
Ubuntu安装nvidia驱动原创 2022-04-27 11:32:06 · 4073 阅读 · 0 评论 -
Ubuntu20.4 卸载老旧的NVIDIA驱动
Ubuntu 卸载nvidia GPU 驱动程序原创 2022-04-27 11:03:08 · 17238 阅读 · 2 评论 -
Ubuntu系统从物理上识别已经安装的NVIDIA GPU 设备
Ubuntu系统从物理上查看已经存在的GPU硬件设备原创 2022-04-27 10:22:20 · 617 阅读 · 0 评论 -
Ubuntu20.04 系统禁用自带的Nouveau驱动
安装NVIDIA GPU驱动之前禁用Ubuntu系统自带的nouveau原创 2022-04-27 09:17:15 · 19707 阅读 · 0 评论 -
CUDA GPU之间通过P2P通信进行数据的拷贝
使用P2P通信功能 在GPU之间进行数据拷贝原创 2022-04-13 18:05:49 · 876 阅读 · 0 评论 -
CUDA 禁用GPU之间的P2P通信功能
关闭GPU之间的P2P通信功能原创 2022-04-13 17:53:52 · 2221 阅读 · 0 评论 -
CUDA 开启GPU之间的P2P通信功能
开启GPU之间的P2P通信功能原创 2022-04-13 17:49:55 · 3964 阅读 · 0 评论 -
CUDA 测试GPU是否支持P2P通信
用于测试NVIDIA GPU是否支持P2P通信的代码原创 2022-04-13 17:46:37 · 3596 阅读 · 0 评论 -
数组在内存中存储方式
SU(Seismic Unix)中多维(≥2)数组的存储是列优先(columnmajor)的CUDA中多维数组(≥2)数组的 存储是行优先(row major)的用SU开的数组,将数据传给CUDA后还是列优先的。原创 2020-05-23 16:13:47 · 699 阅读 · 0 评论 -
cuSPARSE库:(四)不同矩阵格式在内存中的存储方式
(1)Dense Format,以列优先格式(column-major format)存储在内存中,(2)Coordinate Format (COO),以行优先格式(row-major format)存储在内存中(3)Compressed Sparse Row Format (CSR),以行优先格式(row-major format)存储在内存中...原创 2020-05-18 11:06:53 · 725 阅读 · 0 评论 -
CUDA编程之:Stream(流)
CUDA Stream(流):指在设备上按主机代码发出的顺序执行的一系列异步CUDA操作。原创 2020-05-14 16:58:54 · 1286 阅读 · 0 评论 -
cuSPARSE库:(三)Thread Safety(线程安全)
cuSPARSE库是线程安全的,其函数可以从多个主机线程调用。但是,同时读/写相同对象(或同一句柄)是不安全的。因此,每个线程的句柄必须是私有的,即每个线程只有一个句柄是安全的。这在写MPI+CUDA程序的时候一定要注意。...原创 2020-05-13 20:59:14 · 276 阅读 · 0 评论 -
cuSPARSE库:(二)静态库的支持
从6.5版本开始,cuSPARSE库也发布了Linux和Mac上的静态库libcusparse_static.a,cuSPARSE的静态库和其他所有的静态数学函数库依赖于一个公共的线程抽象层库libculibos.a(Linux系统中)或者culibos.lib(Win系统中)。编译示例:在Linux系统中,用动态的cuSPARSE库的命令:nvcc myCusparseApp.c -lcusparse -o myCusparseApp在Linux系统中,用静态的cuSPARSE库的命令:原创 2020-05-13 18:36:36 · 617 阅读 · 0 评论 -
CUDA编程之:cudaMemcpy()函数
cudaMemcpy用于在主机(Host)和设备(Device)之间往返的传递数据,用法如下:主机到设备:cudaMemcpy(d_A,h_A,nBytes,cudaMemcpyHostToDevice)设备到主机:cudaMemcpy(h_A,d_A,nBytes,cudaMemcpyDeviceToHost)注意:该函数是同步执行函数,在未完成数据的转移操作之前会锁死并一直占有CPU进程的控制权,所以不用再添加cudaDeviceSynchronize()函数...原创 2020-05-13 18:05:09 · 29185 阅读 · 3 评论 -
cuSPARSE库:(一)函数的异步执行
cuSPARSE库函数相对于主机(Host)是异步执行的,在获取最后结果之前会将进程的控制权返回到主机(Host)的应用程序。我们需要使用cudaDeviceSynchronize()函数来确保特定cuSPARSE库函数的执行能正常完成。...原创 2020-05-13 17:40:40 · 399 阅读 · 0 评论 -
CUDA的Global memory和Shared memory的区别
Global memory: large, on-board memory and characterized by relatively high latencies.Shared memory;smaller, low-latency on-chip memory that offers much higher bandwidth than global memory.You ca...原创 2019-10-30 21:32:38 · 1955 阅读 · 0 评论 -
Ubuntu16.04下实时监控CPU/GPU内存的使用情况
在程序的运行过程中,我们要实时监控机器的CPU/GPU的内存的使用情况。下面说一下如何实时监控:1、CPU内存监控 (1)$ top (2)htop,首先要安装htop $ sudo apt-get install htop $ htop2、GPU内存使用情况 (1)单次查看 $ nvidia-smi (2)实时监控,将上面的命令配合watch使用,使其每秒钟...原创 2018-03-16 15:51:55 · 21287 阅读 · 1 评论 -
CUDA中的复数定义、开内存空间以及运算
最近在做时频混合域的全波形反演(FWI),用CUDA加速,要做复数运算,所以研究了一下CUDA中复数运算等。简单说一下CUDA中复数的基本应用。在CUDA中用CUFFT的库来定义与运算复数,基本如下:#include "cufft.h"int main(){ /* Transform real field to complex field */ cufftComplex *...原创 2018-03-19 20:58:39 · 5043 阅读 · 11 评论 -
检查CUDA的NVCC编译器和GPU加速卡
在安装好CUDA环境之后,初次使用CUDA之前还要检查编译器NVCC和GPU加速卡1、检查CUDA的NVCC编译器是否安装正确: $ which nvcc2、检查机器上是否安装了GPU加速卡$ ls -l /dev/nv*...原创 2018-04-11 16:03:16 · 864 阅读 · 0 评论 -
CUDA C程序中的函数类型
在CUDA C语言程序中,有三种类型的函数,每一种函数都有固定的函数类型限定符。函数类型限定符指定一个函数在主机上执行还是在设备上执行,以及可以被主机调用还是被设备调用。CUDA C中的三种函数类型限定符:global、device和host,其具体的含义如下表函数类型限定符限定符执行调用备注__global__在设备端执行可以从主机端(或者计算能力>3.0的设备端)调用必须有一个void返...原创 2018-04-11 16:21:20 · 560 阅读 · 0 评论 -
CUDA编程结构
一个典型的CUDA编程结构包括5个主要步骤。分配GPU内存。从CPU内存中拷贝数据到GPU内存。调用CUDA内核函数来完成程序制定的运算。将数据从GPU拷回CPU内存。释放GPU内存空间。...原创 2018-04-11 16:28:52 · 423 阅读 · 0 评论 -
CUDA C中核函数(kernel)的编写及调用
CUDA C程序中最重要的部分就是核函数(kernel)的编写和调用。在此,我们以HelloWorld程序为例,分别讲述kernel函数的编写和调用。1、kernel函数的编写:__global__ void kernel_hello(void){ printf("Hello Wrld from GPU ! \n");}修饰符__global__表示该函数从CPU端调用,然后从GPU端...原创 2018-04-11 16:45:03 · 4565 阅读 · 0 评论 -
CUDA的线程层次结构
CUDA的线程层次结构是一个两层的线程层次结构,由线程块和线程块网格组成,如下图所示: Grid:由一个kernel启动所产生的所有线程统称为一个线程网格(Grid)。 同一线程网格中的所有线程共享同全局内存空间。一个网格有多个线程块(Block)构成,一个线程块包含一组线程,同一线程块内的线程协同可以通过“同步”和“共享内存”的方式来实现。不同线程块内的线程不能协作。 在一个网格中,我...原创 2018-04-17 11:12:08 · 2473 阅读 · 0 评论 -
cudaMemset的调用方式
在CUDA中,cudaMemset的调用方式如下: cudaMemset(d_out, 0, sizeof(float)*nSize); 注意,千万不要将sizeof(float)*nSize错写成nSize,我就是这里出错了,结果程序查了很久才发现错误。...原创 2018-05-07 21:01:25 · 15689 阅读 · 0 评论 -
CUDA、MPI和SU混编,MakeFile文件的编写
本人研究地震勘探的全波形反演,最近在用CUDA+MPI加速反演过程。 写代码过程中最关键的是Makefile文件的编写,也是最难的。下面给出基于SU(Seismic Unix)的CUDA+MPI开发过程的Makefile文件:# Makefile for GPU program based on SU (CUDA+MPI+SU)# Home pathSU_HOME = /home/...原创 2018-07-13 09:58:59 · 594 阅读 · 0 评论 -
CUDA和LAPACK混编的MakeFile文件
最近在写CUDA和LAPACK混编的程序,贴出Makefile文件和源程序文件,供大家参考。 Makefile文件# Makefile for GPU program based on SU# Home pathSU_HOME = /home/ry/suSU_HOME1 = /home/ry/su/src/ComplexMPI_HOME = /home/ry/openmpiCUD...原创 2018-08-17 20:25:40 · 485 阅读 · 0 评论 -
基于CUDA的离散傅里叶变换(Discrete Fourier Transform,DFT)
最近在做地震勘探的全波形反演,用分频反演的方法,需要对地震波场按照特定的频段进行傅里叶变换,这要用到DFT。在CPU上,DFT的计算非常耗时,当处理三维数据时耗时更加严重,所以,本人用CUDA+SU(seismic Unix),在GPU上来做DFT。话不多说,直接上代码:#include <stdio.h>#include "time.h"#include "par.h...原创 2018-09-08 09:39:20 · 1473 阅读 · 0 评论 -
CUDA、SU、MPI和Madagascar混合编程的Makefile文件配置
本人从事地震勘探的科研工作,在Ubuntu系统中用CUDA、SU、MPI和Madagascar做C语言的混合编程。多语言混合编程,关键之处在于Makefile文件的配置Makefile文件的配置。在此给出一个简单的示例,供大家参考。Makefile文件:# # Makefile for GPU program based on SU,Madagascar,MPI and CUDA# Hom...原创 2018-11-17 18:49:36 · 663 阅读 · 4 评论