CUDA CPP Unity Compute Shader

为学

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

主题学习内容
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 something
 	clock_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函数在设备端创建轻量级线程
线程由硬件创建并调度

2024/04/30
线性代数
Lecture 特征值和特征向量的应用,用来三角化方阵,
讲了一个应用,求解斐波那契数列的第一百项
通过将递归式改写成一个一次差分方程,然后构造了一个矩阵,该矩阵乘以一个向量可以表述递归式,从而转化为求特征值与特征方程;

CUDA的最近几天的学习将关注于基本的代码测试结构,还在熟悉中; 已完成

线性代数会单独成一个新的或者说特别早的一个单独内容;

所以本文将拆分为两个部分
CUDA C/Compute Shader Compute Shader/C++将会致力于解决部分计算几何算法问题,因为Compute Shader是Unity引擎的进一步包装,因此会在本文起始阶段对一些简单问题在CUDA和Compute Shader中分别实现,以观察两者的区别;

Linear Algebra 理论与应用,暂定有最小二乘解的应用(QR分解,正交化,SVD,伪逆);和其他涉及向量,矩阵计算的计算几何算法,也有可能会将整合成一个新的主题,称为为数学与算法,行列式计算将关联一个几何谓词的算法问题

本文会不断更新并修改,仅做复习用,如有词不达意活谬误之处,忘指正。

2024/05/01

一、Professional CUDA C Programming

1. 代码结构

目录结构

一级目录 Ch_NO_Name
二级目录 SectionTitle(如codelist条目较少,则此级目录省略)

代码规范
  1. 命名:在全书或一章或单节内共用的方法,将其集中在以Common/Chapter/Section.cuh命名的头文件中;
  2. main函数:
    CUDA项目有多个main函数的情况下,似乎不能通过像C#有多个Main方法时通过在项目属性中设置启动项来选择以那个main方法作为入口点;因此有几种办法来达到切换启动项的目的:
    a. 在.cu的属性中去设置“从生成中排除”,但多选太麻烦
    b. 注释main方法
    我使用了b,但有所修改,为了每次注释的代码较少,因此将函数主体放在了一个名为awakeKernel(需使用static修饰词进行修饰)的方法中;在main中调用awakeKernel;
    基本结构如下
cudaTest.cu
#include <cuda_runtime.h>
#include <stdlib.h>
int awakeKernel();
//通过注释/取消注释main方法来将此文件中的main方法作为入口点
//int main(){
//	return awakeKernel();
//}
static int awakeKernel(){
	//do something interesting ...
	return 0;
}
  1. 书中同名但实现不同的方法,我们将对名称进行更一步的细化
    如第2章中有两个同名的initialData的方法都是对一个float数组进行初始化,第一个使用数组索引作为相应位置的值,第二个基于时间生成了随机值;因此将第二个改名为initialData_random;
    示例如下
#include <time.h>
#include <stdlib.h>

//
static void initialData(float* p_A, const int p_size) {
	for (size_t i = 0; i < p_size; i++)
	{
		p_A[i] = i;
	}
}
static void initialData_random(float* p_ip, int p_size) {
	time_t t;
	srand((unsigned int)time(&t));
	for (size_t i = 0; i < p_size; i++)
	{
		p_ip[i] = (float)(rand() & 0xFF) / 10.0F;
	}
}
小知识
  1. 需要通过#ifndef,#define预处理命令来定义头文件,防止头文件在多个文件中被引用时,在编译时出现多次包含的情况;
  2. 定义在头文件中的方法需要添加static关键字
    在C语言中,全局static修饰符的意思是该方法或字段只能在该文件中引用;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Anaconda 3 】Jupyter Notebook 的安装配置及使用

Jupyter Notebook 的安装配置及使用 一、引言 Jupyter Notebook 是一种交互式笔记本&#xff0c;它允许用户将代码、注释、方程式、可视化内容等整合到一个文档中&#xff0c;并支持多种编程语言&#xff0c;如 Python、R、Julia 等。它在数据科学、机器学习和教育领域中得到…

Idea 自动生成测试

先添加测试依赖&#xff01;&#xff01; <!--Junit单元测试依赖--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.1</version><scope>test</scope><…

MATLAB 集成

MATLAB 集成&#xff08;Integration&#xff09; 集成处理两种本质上不同的问题。 在第一种类型中&#xff0c;给出了函数的导数&#xff0c;我们想找到函数。因此&#xff0c;我们从根本上扭转了分化的过程。这种反向过程称为反微分&#xff0c;或者找到原始函数&#xff0…

基于SSM的宠物领养平台(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的宠物领养平台&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…

专项技能训练五《云计算网络技术与应用》实训7-1:安装mininet

文章目录 mininet安装1. 按6-1教程安装opendaylight控制器。2. 按6-2教程安装RYU控制器。3. 按5-1教程安装openvswitch虚拟交换机并开启服务。4. 将老师所给mininet安装包试用winSCP传送至电脑端。5. 安装net-tools。6. 安装mininet7. 安装完成后&#xff0c;使用命令建立拓扑&…

Stable Diffusion webUI 配置指南

Stable Diffusion webUI 配置指南 本博客主要介绍部署Stable Diffusion到本地&#xff0c;生成想要的风格图片。 文章目录 Stable Diffusion webUI 配置指南1、配置环境&#xff08;1&#xff09;pip环境[可选]&#xff08;2&#xff09;conda环境[可选] 2、配置Stable Diffu…

JavaScript 动态网页实例 —— 文字移动

前言 介绍文字使用的特殊效果。本章介绍文字的移动效果,主要包括:文字的垂直滚动、文字的渐隐渐显、文字的闪烁显示、文字的随意拖动、文字的坠落显示、页面内飘动的文字、漫天飞舞的文字、文字的下落效果。对于这些效果,读者只需稍加修改,就可以应用在自己的页面设计中。 …

农作物害虫检测数据集VOC+YOLO格式3575张10类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3575 标注数量(xml文件个数)&#xff1a;3575 标注数量(txt文件个数)&#xff1a;3575 标注…

电话号码的字母组合 【C++】【力扣刷题】

解题思路&#xff1a; 以第一个为例,digits “23”&#xff0c;表明从电话号码的按键中选取2和3这两个字符&#xff0c;然后去寻找它们各自所对应的字母&#xff0c;这里每一个数字字符所对应的字母的不同&#xff0c;0对应的是空字符&#xff0c;而1的话题目中讲到是不对应任…

中药辨别二

声明&#xff1a;参考懒兔子公益课&#xff0c;参考网络资料和部分网络图片整理而成&#xff0c;仅供学习使用&#xff0c;不提供商业活动价值&#xff0c;文章描述的中药仅供学习&#xff0c;请在专业医师或专业医生指导下使用药材&#xff0c;擅自或其他情况下使用&#xff0…

LeetCode406:根据身高重建队列

题目描述 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数…

初学python记录:力扣1235. 规划兼职工作

题目&#xff1a; 你打算利用空闲时间来做兼职工作赚些零花钱。 这里有 n 份兼职工作&#xff0c;每份工作预计从 startTime[i] 开始到 endTime[i] 结束&#xff0c;报酬为 profit[i]。 给你一份兼职工作表&#xff0c;包含开始时间 startTime&#xff0c;结束时间 endTime …

[嵌入式AI从0开始到入土]17_Ascend C算子开发

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…

JDK14特性

JDK14 1 概述2 语法层面的变化1_instanceof的模式匹配(预览)2_switch表达式(标准)3_文本块改进(第二次预览)4_Records 记录类型(预览 JEP359) 3 API层面的变化4 关于GC1_G1的NUMA内存分配优化2_弃用SerialCMS,ParNewSerial Old3_删除CMS4_ZGC on macOS and Windows 4 其他变化1…

PPT基础

5种ppt仅可读形式 Ⅰ 开始选项卡 1.【幻灯片】组中&#xff1a;新建幻灯片&#xff0c;从大纲中导入幻灯片&#xff1b;修改幻灯片的版式&#xff1b;节&#xff08;新增节&#xff0c;重命名节&#xff09;。 2.【字体】组中&#xff1a;设置字体&#xff0c;字体大小&…

ctfshow web入门 sql注入 web224--web233

web224 扫描后台&#xff0c;发现robots.txt&#xff0c;访问发现/pwdreset.php &#xff0c;再访问可以重置密码 &#xff0c;登录之后发现上传文件 检查发现没有限制诶 上传txt,png,zip发现文件错误了 后面知道群里有个文件能上传 <? _$GET[1]_?>就是0x3c3f3d60245…

海外仓系统与跨境电商平台集成:有什么意义,为什么重要

跨境电商的发展趋势并没有丝毫放缓的迹象&#xff0c;这使得对高效率、综合性的海外仓的需求变得比以往任何时间都要多。 预测表明&#xff0c;未来一年跨境电商的市场份额将继续扩大。这一切都要求海外仓企业尽快提升仓储管理效率&#xff0c;在这个过程中&#xff0c;海外仓系…

小苹果

题目描述 小的桌子上放着几个苹果从左到右排成一列&#xff0c;编号为从1 到 。小苞是小的好朋友&#xff0c;每天她都会从中拿走一些苹果。每天在拿的时候&#xff0c;小苞都是从左侧第1个苹果开始、每隔2个苹果拿走1个苹果。随后小苞会将剩下的苹果按原先的顺序重新排成一列…

扩展学习|本体研究进展

文献来源&#xff1a; 王向前,张宝隆,李慧宗.本体研究综述[J].情报杂志,2016,35(06):163-170. 一、本体的定义 本体概念被引入人工智能、知识工程等领域后被赋予了新的含义。然而不同的专家学者对本体的理解不同,所给出的定义也有所差异。 人工智能领域的学者Neches(1991)等人对…

StampedLock(戳记锁)源码解读与使用

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java源码解读-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 1. 前言 我们在上一篇写ReentrantReadWriteLock读写锁的末尾留了一个小坑&#…