GPU
文章平均质量分 51
蓝鲸123
做更好的自己
展开
-
Ubuntu环境下安装CUDA 11.6
安装;wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pinsudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600wget https://developer.download.nvidia.cn/compute/cuda/11.6.2/local_instal原创 2022-04-01 21:34:39 · 3533 阅读 · 0 评论 -
多GPU多个流上实现复制与计算的重叠
获取应用程序可使用的 GPU 的数量激活任意可用的 GPU在多个 GPU 上分配显存在多个 GPU 上传入和转出显存数据在多个 GPU 上启动核函数获取多个 GPU 的相关信息如要以运行程序的方式得出可用 GPU 的数量,请使用 cudaGetDeviceCountuint64_t num_gpus;cudaGetDeviceCount(&num_gpus);如要以运行程序的方式得到当前处于活动状态的 GPU,请使用 cudaGetDevice:uint64_t devic.原创 2021-04-10 15:36:29 · 824 阅读 · 0 评论 -
cuda数据复制与计算重叠
数据复制与计算的重叠深入学习:CUDA流:最佳实践和常见陷阱非默认流中执行主机到设备和设备到主机的内存传输。复制与计算重叠的代码示例第一个示例适用于数据的条目数能被流的数量整除的情况,第二个示例则是不能整除的情况。N可被流的数量整除// "Simple" version where number of entries is evenly divisible by number of streams.// Set to a ridiculously low value to clarify原创 2021-04-10 13:52:25 · 435 阅读 · 1 评论 -
cuda 流
以下哪句对一个 CUDA 流的描述最恰当?1.可从多个并行线程中读取的数据缓冲区2.一种用于在 GPU 上并发运行任何操作的方法3.用于协调来自多个 CPU 的指令的 CUDA 机制4. 按发布顺序执行的一系列操作答案:4用于控制非默认流行为的两条规则是什么?1在同一非默认流中发布的操作将并行执行2同一流中的操作将依发布顺序执行3在不同非默认流中发布的操作之间没有必然顺序4不同非默认流中的操作将始终并行执行答案:2、3**以下哪项可以在非默认流中执行?**可参考 。请选择所有适用项原创 2021-04-10 10:48:52 · 817 阅读 · 1 评论 -
cuda block 和 thread
// Device function.__global__ void decrypt_gpu(uint64_t * data, uint64_t num_entries, uint64_t num_iters) { const uint64_t thrdID = blockIdx.x*blockDim.x+threadIdx.x; const uint64_t stride = blockDim.x*gridDim.x; // Utiliz原创 2021-04-10 09:48:52 · 202 阅读 · 0 评论 -
CUDA 并发流
默认流会阻塞非默认流的执行,非默认流之间不会相互阻塞。创建,使用和销毁非默认CUDA流以下代码段演示了如何创建,利用和销毁非默认CUDA流。注意到,要在非默认CUDA流中启动CUDA核函数,必须将流作为执行配置的第4个可选参数传递给该核函数。到目前为止,仅利用了执行配置的前两个参数:cudaStream_t stream; // CUDA流的类型为 `cudaStream_t`cudaStreamCreate(&stream); // 注意,必须将一个指针传递给 `cudaCreate.原创 2020-11-22 16:20:26 · 872 阅读 · 0 评论 -
2. nsights 可视化分析GPU核函数性能
例子:#include <stdio.h>void initWith(float num, float *a, int N){ for(int i = 0; i < N; ++i) { a[i] = num; }}__global__void addVectorsInto(float *result, float *a, float *b, int N){ int index = threadIdx.x + blockIdx.x * blockDi原创 2020-11-22 15:56:17 · 2156 阅读 · 1 评论 -
GPU cudaMallocManaged 统一内存的优劣点
cudaMallocManaged 分配旨在供主机或设备代码使用的内存,并且现在仍在享受这种方法的便利之处,即在实现自动内存迁移且简化编程的同时,而无需深入了解 cudaMallocManaged 所分配统一内存 (UM) 实际工作原理的详细信息。nsys profile 提供有关加速应用程序中 UM 管理的详细信息,并在利用这些信息的同时结合对 UM 工作原理的更深入理解,进而为优化加速应用程序创造更多机会。统一内存(UM)的迁移分配 UM 时,内存尚未驻留在主机或设备上。主机或设备尝试访问内存时会发原创 2020-11-22 14:56:51 · 10387 阅读 · 1 评论 -
以编程方式查询GPU设备属性
由于 GPU 上的 SM 数量会因所用的特定 GPU 而异,因此为支持可移植性,您不得将 SM 数量硬编码到代码库中。相反,应该以编程方式获取此信息。以下所示为在 CUDA C/C++ 中获取 C 结构的方法,该结构包含当前处于活动状态的 GPU 设备的多个属性,其中包括设备的 SM 数量:int deviceId;cudaGetDevice(&deviceId); // `deviceId` now points to the id of the curre原创 2020-11-22 14:41:21 · 397 阅读 · 0 评论 -
1.使用nsys分析GPU应用程序
例子矩阵加法vector-add.cu#include <stdio.h>void initWith(float num, float *a, int N){ for(int i = 0; i < N; ++i) { a[i] = num; }}__global__void addVectorsInto(float *result, float *a, float *b, int N){ int index = threadIdx.x + bl原创 2020-11-22 14:33:28 · 18318 阅读 · 1 评论 -
GPU 2D矩阵乘法
#include <stdio.h>#define N 64__global__ void matrixMulGPU( int * a, int * b, int * c ){ /* * Build out this kernel. */ int idx = threadIdx.x + blockDim.x * blockIdx.x; int idy = threadIdx.y + blockDim.y * blockIdx.y; //c[i原创 2020-11-22 14:03:59 · 257 阅读 · 0 评论 -
GPU Direct p2p、 Nvlink 、GPU DirectRDMA
GPU Direct p2p: 可以参考Nvlink: 可以参考GPU Direct RDMA : 可以参考使用GPU Direct RDMA 需要注意的是:需要保证GPU卡和RDMA网卡在同一个ROOT COMPLEX下,如下图所示:什么是 ROOT COMPLEX ,可以参考:原创 2020-10-18 20:36:04 · 2150 阅读 · 0 评论