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 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函数在设备端创建轻量级线程
线程由硬件创建并调度

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修饰符的意思是该方法或字段只能在该文件中引用;

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

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

相关文章

21.使用哈希桶封装unordered_set和unordered_map(哈希桶的迭代器的实现)

1. hash表迭代器的实现 1.1 普通迭代器 // 由于迭代器的实现&#xff0c;需要使用哈希桶&#xff0c;但是哈希桶的实现&#xff0c;又在迭代器之后 // 因此&#xff0c;我们给出一个前置声明&#xff0c;旨在告诉系统&#xff0c;哈希桶已经被实现了 // 前置声明 template<…

产品经理应该懂业务吗?

最近看到一个对新一代产品经理的定义&#xff1a;懂技术、擅运营、会管理、懂业务、能决策 第一反应是&#xff1a;哇偶&#xff0c;产品经理更牛掰了~~~ 说真的&#xff0c;产品经理岗位发展这么多年&#xff0c;还把产品经理定位在十项全能 不是进步&#xff0c;而是倒退。…

Aigtek射频功率放大器的主要功能是什么

射频功率放大器是一种专门用于放大射频信号功率的电子器件&#xff0c;它在无线通信、雷达系统、卫星通信等射频应用中起着至关重要的作用。下面将详细介绍射频功率放大器的主要功能。 信号放大&#xff1a;射频功率放大器的主要功能之一就是将传入的射频信号放大到所需的功率水…

Flask与HTTP

一、请求响应循环 “请求-响应循环”&#xff1a;客户端发出请求&#xff0c;服务器处理请求并返回响应。 Flask Web程序的工作流程&#xff1a; 当用户访问一个URL&#xff0c;浏览器便生成对应的HTTP请求&#xff0c;经由互联网发送到对应的Web服务器。Web服务器接收请求&a…

pandas学习笔记13

map,apply,applymap ** apply&#xff1a;应用在DataFrame的行或列中&#xff1b; applymap&#xff1a;应用在DataFrame的每个元素中&#xff1b; map&#xff1a;应用在单独一列&#xff08;Series&#xff09;的每个元素中。** apply()方法 前面也说了apply方法是一般性的…

【计算机网络】FTP站点配置搭建教程以及相关问题解决方案(超详细)

文章目录 1、安装Window Server 20082、搭建FTP环境&#xff08;1&#xff09;安装FTP服务器&#xff08;2&#xff09;配置FTP服务器&#xff08;3&#xff09;测试FTP连接 3、遇到的问题以及解决方案&#xff08;1&#xff09;Windows无法访问此文件夹&#xff08;2&#xff…

上传文件到 linux

一、mac 法一&#xff1a;scp 先进入mac的 Node_exporter文件&#xff08;要上传的文件&#xff09;目录下 输入scp -P 端口号 文件名 rootIP:/存放路径 scp -P 22 node_exporter-1.8.0.linux-amd64.tar.gz root192.***.2:/root 法二、 rz mac 安装 lrzsz&#xff0c;然后…

dp 动态规划 力扣

64. 最小路径和 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1,3,1],[1,5,1],[4,2,1]] 输…

Python基础学习之logging模块

在Python编程中&#xff0c;日志记录&#xff08;Logging&#xff09;是一个非常重要的功能。它不仅可以帮助我们追踪和调试代码中的错误&#xff0c;还可以记录程序运行时的关键信息&#xff0c;以便后续分析和优化。Python标准库中的logging模块为我们提供了强大的日志记录功…

AI日报|gpt2-chatbot神秘聊天机器人引热议,疑似GPT-4.5?《金融时报》与OpenAI达成战略合作...

欢迎大家在 GitHub 上 Star 我们&#xff1a; 分布式全链路因果学习系统 OpenASCE: https://github.com/Open-All-Scale-Causal-Engine/OpenASCE 大模型驱动的知识图谱 OpenSPG: https://github.com/OpenSPG/openspg 大规模图学习系统 OpenAGL: https://github.com/TuGraph-…

踏准芯片定制风口的灿芯股份,护城河足够深吗?

近年来&#xff0c;芯片定制渐成风潮&#xff0c;不仅位于下游、自身有巨大芯片需求的科技巨头如谷歌、OpenAI等纷纷转向定制&#xff0c;而且产业中游主打标准化芯片的主流芯片设计公司如博通、英伟达等&#xff0c;也相继开辟或加码定制业务。 风潮背后&#xff0c;一方面是…

老人摔倒监测识别摄像机

随着社会老龄化程度的不断加深&#xff0c;老年人的健康和安全问题日益凸显。在家中独居的老人&#xff0c;一旦发生意外摔倒等情况&#xff0c;往往难以及时得到帮助&#xff0c;造成了严重的安全隐患。为了解决这一问题&#xff0c;近年来&#xff0c;老人摔倒监测识别摄像机…

AI大模型探索之路-训练篇7:大语言模型Transformer库之HuggingFace介绍

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

鸿蒙组件样式复用简介

鸿蒙组件样式复用简介 使用Style进行复用在Component内部复用在Component外部复用使用Extend复用指定类型组件Extend支持参数传递 使用Style进行复用 在页面开发过程中&#xff0c;会遇到多个组件都在使用相同的样式&#xff0c;这时候就要考虑是不是可以将相同的样式的进行复…

vue 使用 html2canvas 截屏并下载图片至本地(重点兼容ie浏览器)

安装html2canvas&#xff1a; npm install --save html2canvas注意&#xff1a;如果是某些原因不能npm的话就直接把依赖包拷贝到node_modules就可以啦 html&#xff1a; <div class"details-box" v-show"detailsFormShow"><div class"det…

群狼调研(长沙市场调研)|食品安全群众满意度调查方案

本文由群狼调研&#xff08;长沙食品安全满意度调查&#xff09;出品&#xff0c;欢迎转载&#xff0c;请注明出处。设计一个食品安全群众满意度调查方案需要考虑调查目的、样本选择、问题设计、数据收集和分析等多个方面。以下是一个可能的食品安全群众满意度调查方案的概述&a…

AP510X 单路低压差线性恒流芯片 LED手电筒景观亮化台灯车灯照明

AP510X 是一系列电路简洁的单路线性LED恒流芯片&#xff0c;适用于3-60V电压范围的LED恒流调光领域。AP510X采用我司算法&#xff0c;可以实现高精度的恒流效果&#xff0c;输出电流恒流精度≤3&#xff05;&#xff0c;电源供电工作范围为3-40V&#xff0c;可以轻松满足锂电池…

【深度优先搜索 图论 树】2872. 可以被 K 整除连通块的最大数目

本文涉及知识点 深度优先搜索 图论 树 图论知识汇总 LeetCode 2872. 可以被 K 整除连通块的最大数目 给你一棵 n 个节点的无向树&#xff0c;节点编号为 0 到 n - 1 。给你整数 n 和一个长度为 n - 1 的二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示树中节点…

VMware 虚拟机打开一段时间后卡死,VNX进程CPU占比高

一、问题描述 打开虚拟机后可以正常运行 运行几分钟后突然卡死 然后通过任务管理器可以观察到VMware Workstation VMX应用进程的CPU占比高&#xff0c;CPU也出现异常 关闭虚拟机重新开启&#xff0c;还是一样卡死 二、系统环境 系统: Windows10 VMware: Workstation 17 Pro …

奇门辅助软件v2024.5

废话不说&#xff0c;先上链接 链接&#xff1a;https://pan.baidu.com/s/1_i11lMx4P_vrTs-6lpWoHA?pwd8v1m 提取码&#xff1a;8v1m 功能介绍 【宫内信息】是点击宫内某属性时显示的宫内基本信息。 【古籍宝鉴】是《御定奇门宝鉴》里的对应时局内容&#xff0c;但差补法置…