CUDA CPP Unity Compute Shader Linear Algebra

为学

开始一个新的学习计划,涵盖:

主题学习内容
CUDAProfessional CUDA C Programming/NVIDIA CUDA初级教程视频(周斌)
C++C++Primer / The Cherno CPP
Unity Compute ShaderUdemy Learn to Write Unity Compute Shaders
Linear AlgebraMIT 18.06 Prof.Gilbert Strang Linear Algebra

本系列博客用以记录学习过程中的知识要点!!!

为学
—彭端淑
天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。

2023/4/28
〇、CUDA
1.使用nvfrof时,报错
在这里插入图片描述
解决方法:
将路径

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\extras\CUPTI\lib64 

下的文件

cupti64_2024.1.1.dll

复制到路径

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin

下即可。
2.nvprof的使用
Shift+鼠标右键->在此处打开PowerShell窗口(S)
在控制台中输入

nvprof E:\C_CPP_CUDA\CUDA\x64\Release\CUDATest.exe

nvprof的使用及输出
3.Win10/Win11查看CUDA Capability Major
在路径

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\extras\demo_suite

中使用Shift+鼠标右键->在此处打开PowerShell窗口(S)
然后将deviceQuery.exe拖入到PowerShell窗口中,即可查看;
注:应该可以deviceQuery.exe直接查看,可是这个控制台程序不暂停,一闪而退。
4.未解决问题
在PowerShell中使用nvcc命令编译

PS E:\C_CPP_CUDA\CUDA\CUDA>  nvcc sumArrayOnHost.cu -o sum
sumArrayOnHost.cu
nvcc error   : 'cudafe++' died with status 0xC0000005 (ACCESS_VIOLATION)

网上找的解决方法都不行呢,有知道如何解决的望告知呢;
因可在Visual Studio中直接通过调试器直接进行编译,所以命令行编译不行就不行吧。

5.CUDA 2.2 给核函数计时
a>#include <sys/time.h>
该文件应为linux系统下的头文件,在windows中可使用time.h头文件;

#include <time.h>int main(){clock_t start=clock();//do somethingclock_t elaps=clock()-start;printf("do something spent %.10f ms",elaps);}

6.CHECK方法中的call显示未定义

严重性	代码	说明	项目	文件	行	禁止显示状态	详细信息
错误(活动)	
E0020	未定义标识符 "call"	CUDA	E:\C_CPP_CUDA\CUDA\CUDA\sumArrayOnHost.cu	10
//后面这个反斜杠必须有啊啊啊
#define CHECK(call){															\ const cudaError_t error = call;												\if (error != cudaSuccess) {													\printf("Error: %s:%d ", __FILE__, __LINE__);							\printf("code:%d, reason: %s\n", error, cudaGetErrorString(error));		\exit(1);																\}																			\
}			

一、CPP
1.break语句会跳出整个循环,而非内层循环;
2.C++的编译
编译包含外部代码的项目,
外部include文件添加

项目->(鼠标右键)属性->C/C++->Addtional Include Directories->"include files path"

外部lib添加

项目->(鼠标右键)属性->链接器->Addtional Library Directories->"lib path"
  1. 编译出错时,应首先聚焦第一个错误;
  2. 查看CPP文件的汇编代码
    在需要查看汇编代码的地方打断点,当代码运行至该位置时,鼠标右键->转到反汇编

2024/04/29

第一课 CPU体系架构概述

桌面应用
真正用于数值计算的指令很少

CPU程序为串行程序优化
流水线
分支预测
超标量
乱序执行
存储器层次
矢量操作
多核处理

缓慢的内存带宽(存储器带宽)是大问题

并行处理是方向

第二课 并行程序设计概述

为什么
Power Wall
Memory Wall

怎么做
数据并行处理

并行计算模式
同时应用多个计算资源解决一个计算问题

基本概念
Flynn矩阵
S single I instruction M multiple D data
SISD SIMD
MISD MIMD

常见名词

Task
Paralllel Task
Serial Execution(串行执行)
Parallel Exection
Shared Memory
Distributed Memory
Communications
Synchronizations(同步)
Granularity(粒度)
Observed Speedup
Parrallel Overhead(并行开销)
Scalability

并行编程模型
共享存储模型
线程模型
消息传递模型
数据并行模式

数据和任务分割

Amdahl’s Law
speedup=-1/1-P

没有可并行化的 P=0
全部都可以并行化 P=1

speedup=1/(P/N+S)
P=并行部分
N=处理器数
S=串行部分

并行化的可扩展性有极限

speedup
NP=.50P=.90P=.99
101.825.269.17
1001.989.1750.25
10001.999.9190.99
100001.999.9199.02

第三课 CUDA开发环境搭建和工具配置

没啥好讲的,直接装NVIDIA CUDA TOOLKIT,装Visual Studio

第四课 GPU体系架构概述

带宽是非常宝贵的资源
Bandwidth is critical resource!

带宽受限!!!
Bandwidth limited!!!

减少带宽需求

GPU是异构 众核 处理器
针对吞吐优化

第五课 GPU编程模型

CPU和GPU的交互模型

  DRAM			      	   GDRAM|				   		 |CPU			    		GPU|		 	PCIe         |	----------------------   |I/O						I/O	

交互开销较大

GPU线程组织模型

访存速度

GPU存储模型

GPU线程组织模型
Grid
Block
Thread

线程组织架构说明

一个Kernel具有大量线程
线程被划分成线程块“blocks”

  • 一个block内部的线程共享“Shared Memory”
  • 可以同步“_syncthreads()”

Kernel启动一个“grid”,包含若干线程块

  • 用户设定
  • 线程和线程块具有唯一的标识

有很多通俗易懂的图,后续补充

SIMT
Single Instruction Mutilple Threads

CUDA Extended C

CUDA函数声明

第五课 CUDA编程
CUDA
层次化线程集合
Grid 一维或多维线程块(block)

  • 1D/2D/3D

Block 一组线程

  • 1D/2D/3D
    • 一个Grid里面的每个Block的线程数是一样的
    • block内部的每个线程可以
      • 同步 synchronic
      • 访问共享存储器
    • 块索引 blockIdx
    • 维度 blockDim
      • 1D/2D/3D
        线程
        ThreadID threadIdx

共享存储
同步

术语
Host 主机
Device 设备

Kernel 数据并行处理函数
通过调用kernel函数在设备端创建轻量级线程
线程由硬件创建并调度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/659861.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RabbitMQ】可靠性策略(幂等,消息持久化)

MQ可靠性策略 发送者的可靠性问题生产者的重连生产者确认 MQ的可靠性数据持久化Lazy Queue 消费者的可靠性问题消费者确认机制消息失败处理 业务幂等性简答问题 发送者的可靠性问题 生产者的重连 可能存在由于网络波动&#xff0c;出现的客户端连接MQ失败&#xff0c;我们可以…

USB HID报告描述符学习

参考资料 HID 报告描述符 (qq.com)https://mp.weixin.qq.com/s?__bizMzU1ODI3MzQ1MA&mid2247485748&idx1&sn112bd8014eb96b03308b3b808549e8d4&chksmfc284ff1cb5fc6e770c2d2ece46c17bf2529901b45a357938978fa62163723556ad497b05c47&cur_album_id3340417…

活性炭复合纳米纤维膜

活性炭复合纳米纤维膜是一种结合了活性炭和纳米纤维技术的新型复合材料。这种材料通常通过特定的制备工艺&#xff0c;如静电纺丝技术&#xff0c;将活性炭纳米纤维与其他材料&#xff08;如TiO2、聚合物等&#xff09;结合在一起&#xff0c;形成具有良好结构和功能的薄膜。 活…

【hana】hana1.0单容器常用命令

基础命令 服务 要先切换到hana用户下 查看服务是否启动 HDB info启动服务 HDB start获取instance_id su - {hana_user} echo $TINSTANCE数据库 连接数据库 hdbsql -u system -p xxxxxx -i {instance_id}获取数据库状态 SELECT DATABASE_NAME, ACTIVE_STATUS FROM M_DA…

Notion是什么,Notion软件下载,Notion官方网站在哪里?国内用户Notion怎么订阅升级会员?

Notion是什么 Notion&#xff0c;一款强大的多功能工具&#xff0c;可用于组织笔记、任务、项目、数据库和文档等。 Notion软件下载 这个到Notion官方网站下载就可以了。 怎么订阅Notion会员 注册好了Notion的账号&#xff0c;来到首页&#xff0c;点击设置&#xff0c;左边…

Windows下搭建Flutter开发环境

IDE:VS code Flutter官网:Flutter: 为所有屏幕创造精彩 - Flutter 中文开发者网站 - Flutter 下载&安装 下载Flutter SDK,如图,建议自行下载安装: SDK还是挺大的,近1G,使用迅雷下载会快不少。 下载完成,解压缩到指定目录即可! 设置Local SDK,按下面步骤操作即…

springboot mongodb分片集群事务

前置 mongodb分片集群想要使用事务,需要对应分片没有仲裁节点 代码 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.1.0.RELEASE</version></d…

酒店餐厅装智能酒精壁炉前和装后对比

在酒店餐厅装智能酒精壁炉之前和之后&#xff0c;餐厅的氛围和效果会有明显的对比&#xff1a; 装智能酒精壁炉之前 传统感或简约风格&#xff1a; 在壁炉安装之前&#xff0c;餐厅可能具有传统的装饰风格或简约的设计&#xff0c;可能缺乏独特的元素或焦点。 空间感较为普通…

【2024新windows电脑部署测试环境系列】Jenkins部署 (上)

jenkins对我们测试来说挺重要的&#xff0c;持续集成cicd ,定时任务&#xff0c;远程控制&#xff0c;打包部署测试环境等等。虽然在一些公司&#xff0c;早已用上自研的这种综合控制平台&#xff0c;不过也至少9成以上的组织还是在用jenkins。 一个公司并不一定只有一个jenkin…

软考-信息系统项目管理师-论文技术架构模板(60天备考第26天)

分享一段信息系统项目管理师论文项目技术架构描述的万能模板&#xff0c;供大家参考。距离考试还有二十八天&#xff0c;如果论文写不好的可以加微进论文指导群学习论文写作。 该系统前端基于Vue开发&#xff0c;后端基于java开发&#xff0c;前后端分离部署。整体采用B/S架构&…

positivessl通配符证书签发13个月仅400元

PositiveSSL是Sectigo旗下的数字证书品牌&#xff0c;旗下的数字证书产品不仅具有签发速度快、性价比高以及兼容性高等特点&#xff0c;还可以为网站提供传输信息加密服务&#xff0c;保护客户隐私安全&#xff0c;提升客户对网站的信任度。今天就随SSL盾小编了解PositiveSSL旗…

Java的逻辑控制和方法的使用介绍

前言 程序的逻辑结构一共有三种&#xff1a;顺序结构、分支结构和循环结构。顺序结构就是按代码的顺序来执行相应的指令。这里主要讲述Java的分支结构和循环结构&#xff0c;由于和C语言是有相似性的&#xff0c;所以这里只会提及不同点和注意要点~~ 注意在C语言中&#xff0c;…