GPU 计算 CMPS224 2021 学习笔记 02

2024-09-08 12:52

本文主要是介绍GPU 计算 CMPS224 2021 学习笔记 02,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 并行类型

(1)任务并行

(2)数据并行

  • CPU & GPU

CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。

(1)分配GPU内存

(2)将CPU上的数据复制到GPU上

(3)在GPU上对数据进行计算操作

(4)将计算结果从GPU复制到CPU上

(5)释放GPU内存

  • CUDA内存管理API

(1)分配内存

cudaError_t cudaMalloc(void **devPtr, size_t size)

 (2)释放内存

cudaError_t cudaFree(void *devPtr)

(3)内存复制

cudaError_t cudaMemcpy(void *dst, const void *src, size_t count, enum cudaMemcpyKind kind)

  • grid & block & thread

  • 向量加法

__global__ void vecadd_kernel(float* x, float* y, float* z, int N) {int i = blockDim.x*blockIdx.x + threadIdx.x;if(i < N) {z[i] = x[i] + y[i];}
}
void vecaddGPU(float* x, float* y, float* z, int N) {// Allocate GPU memoryfloat *x_d, *y_d, *z_d;cudaMalloc((void**) &x_d, N*sizeof(float));cudaMalloc((void**) &y_d, N*sizeof(float));cudaMalloc((void**) &z_d, N*sizeof(float));// Copy data to GPU memorycudaMemcpy(x_d, x, N*sizeof(float), cudaMemcpyHostToDevice);cudaMemcpy(y_d, y, N*sizeof(float), cudaMemcpyHostToDevice);// Perform computation on GPUconst unsigned int numThreadsPerBlock = 512;const unsigned int numBlocks = (N + numThreadsPerBlock – 1)/numThreadsPerBlock;vecadd_kernel <<< numBlocks, numThreadsPerBlock >>> (x_d, y_d, z_d, N);// Copy data from GPU memorycudaMemcpy(z, z_d, N*sizeof(float), cudaMemcpyDeviceToHost);// Deallocate GPU memorycudaFree(x_d);cudaFree(y_d);cudaFree(z_d);}
  • 编译

  • 函数声明

 

__host__ __device__ float f(float a, float b) {return a + b;
}
void vecaddCPU(float* x, float* y, float* z, int N) {for(unsigned int i = 0; i < N; ++i) {z[i] = f(x[i], y[i]);}
}
__global__ void vecadd_kernel(float* x, float* y, float* z, int N) {int i = blockDim.x*blockIdx.x + threadIdx.x;if (i < N) {z[i] = f(x[i], y[i]);}
}

  • 核函数的异步启动

GPU上核函数的调用是异步的,GPU上的核函数启动后,立即返回,CPU会继续执行下面的程序,不会等待核函数执行完成。

cudaError_t cudaDeviceSynchronize()

可以使用上述函数API来同步CPU和GPU之间的操作,CPU调用cudaDeviceSynchronize()后,会等待GPU上的所有核函数执行完成后才会执行下面的程序。

  • 错误检查

所有 CUDA API 调用都会返回错误代码 cudaError_t,可用于检查是否发生任何错误。

cudaError_t err = ...;
if(err != cudaSuccess) {printf("Error: %s\n", cudaGetErrorString(err));exit(0);
}

对于内核调用,可以检查 cudaDeviceSynchronize() 返回的错误或调用以下 API 函数:

cudaError_t cudaGetLastError()

这篇关于GPU 计算 CMPS224 2021 学习笔记 02的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1148170

相关文章

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p