Unity运用GPU代替CPU处理和计算简单测试

http://www.manew.com/thread-110502-1-1.html


随着游戏玩法的增强,计算的多量化,我们的CPU并不足以迅速的处理这些问题,而Unity给我们开放了一个接口,我们需要用它来处理大量的运算;

我们可以把大量的处理运算的逻辑放入这个Shader中,用GPU的并行能力来计算,这里简单的说一说他的使用方式和如何把参数传入和传出。让我们像一个方法一样调用。

首先:在Unity中我们可以创建一个ComputeShader:

<ignore_js_op>

打开之后会发现一个这样的脚本:

<ignore_js_op>

简单的介绍一下,

1、这个#pragmakernel  Multiply 这是一个内核, 也可以称作入口。这个至少有一个!

这个Multiply请红线标注,很重要,我们在代码里需要用到它;

2、接下来就是一个结构体,这个结构体是我们定义的一个结构体。我们用它来和外面的结构体相呼应。

3、RwStructuredBuffer<VecMatpair>dataBuffer  相当于我们声明的一个可读写的变量我用C#表示:   VecMatPair[] dataBuffer;

4、就是方法主体,跟第一条呼应,外部会调用这个类似于Main函数的方法;可以写一些简单的逻辑,给上面的变量赋值:(这里值得重点一说,这个变量又当输入又当输出,注意!);

这里我们的ComputeShader也就构建完成了;

下面进行C#的编写,让其呼应,传入和输出;

<ignore_js_op>

1、  我们需要定义一个和Shader里面呼应的结构体。

2、  获取这个shader,我们直接拖入就OK;

然后变量基本就完事了:

我们看一下代码主体:

<ignore_js_op>

除去单行符号,我们一行一行解释,千万别乱:

1、  声明一个长度为15的结构体,这是我们的输入参数;(然而并用不到15个)

2、  制定一个循环,我给他了一个赋值,都是相同的值;

循环体里的内容跳过;

3、  这个很重要,还记得让你们标红线的地方吗。这个就是获取这个入口的标识;

4、  下面这个数组结构,用来最后来收取需要的5个数据;

5、  这里是测试打印跳过;

6、  ComputeBuffer 这个也很重要,你还需要声明一个Buffer 参数需要制定这个收取的长度,和这个数组的所有占用字节(提前计算(这里就是Float=4 因为是2个Float=8 又因为是个长度为5的数组=5*8=40 ));

7、  下面就是一套流程了,对,就是走走流程;

关联这个数据结构和Shader的变量相关联;

SetData()把需要传入的数据送进Shader;

接着!重点,一定要运行,第一开始我写完发现怎么都没变化,一定要运行Shader;Dispatch();

最后收取返回数据(我们需要接收这40个字节的数据);

打印结果附图:

<ignore_js_op> 

时间: 2024-08-30 16:02:40

Unity运用GPU代替CPU处理和计算简单测试的相关文章

Unity手游优化——CPU篇

Unity 手游优化——CPU篇 前段时间本人转战unity手游,由于作者(Chwen)之前参与端游开发,有些端游的经验可以直接移植到手游,比如项目框架架构.代码设计.部分性能分析,而对于移动终端而言,CPU.内存.显卡甚至电池等硬件因素,以及网络等条件限制,对移动游戏开发的优化带来更大的挑战. 这里就以unity4.5x版本为例,对Unity的优化方案做一个总结,有些是项目遇到的,也有些是看到别人写的不错拿来分享,算作一个整理,后期也会持续更新.本优化从CPU.GPU和内存三个方面着手总结,这

[linuxeden] 程序员的野心:让GPU像CPU一样运行

GPU代表的是图形处理单元,但是,这些小小芯片除了处理图形功能,还有其它用处.比如,Google使用GPU来为人脑建模,Salesforce则依赖GPU分析Twitter微博数据流.GPU很适合并行处理运算,也就是同时执行成千上万个任务.怎么做呢?你得开发一个新软件,让它挖掘GPU芯片的潜力.最近美国印第安纳大学计算机博士埃里克-浩克(Eric Holk)就作出尝试,他开发了一个应用程序来运行GPU.浩克说:“GPU编程仍然需要程序员管理许多低层细节,这些细节是与GPU执行的主要任务分离 的.我

gpu和cpu区别

GPU的功耗远远超过CPUCache, local memory: CPU > GPU Threads(线程数): GPU > CPURegisters: GPU > CPU 多寄存器可以支持非常多的Thread,thread需要用到register,thread数目大,register也必须得跟着很大才行.SIMD Unit(单指令多数据流,以同步方式,在同一时间内执行同一条指令): GPU > CPU. 在计算机上运行的程序从性能的角度来说大致可分为三类:(1) I/O int

iOS GPU、cpu、显示器的协作

在 iOS 系统中,图像内容展示到屏幕的过程需要 CPU 和 GPU 共同参与. CPU 负责计算显示内容,比如视图的创建.布局计算.图片解码.文本绘制等. 随后 CPU 会将计算好的内容提交到 GPU 去,由 GPU 进行变换.合成.渲染. 之后 GPU 会把渲染结果提交到帧缓冲区去,等待下一次 VSync 信号到来时显示到屏幕上. 由于垂直同步的机制,如果在一个 VSync 时间内,CPU 或者 GPU 没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示屏会保留之前的内容

Linux CPU使用率的计算

     CPU 使用率衡量的是程序运行占用的CPU 百分比.Linux 的CPU 使用率信息可以通过/proc/stat 文件计算得到. proc 文件系统       /proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为内核与进程提供通信的接口.用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数.由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提

GPU 与CPU的作用协调,工作流程、GPU整合到CPU得好处

http://blog.csdn.net/maopig/article/details/6803141 在不少人的心目中,显卡最大的用途可能就只有两点--玩游戏.看电影,除此之外,GPU并没有其他的作用了.但是随着微软IE9的正式发布,不少人突然发现,微软一直提到一个名词:GPU硬件加速,从而也让不少人开始关注GPU硬件加速.那么GPU硬件加速到底是什么?能干些什么呢?下面让我们一起走进GPU硬件加速的世界去看看吧. GPU硬件加速就是显卡辅助CPU进行图形运算 要说起GPU硬件加速,我们首先要

cpu使用率的计算

proc文件系统 /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为内核与进程提供通信的接口.用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数.由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提交的. /proc目录中有一些以数字命名的目录,它们是进程目录.系统中当前运行的每一个进程在/proc下都对应一个以进程号为目录名的目录/proc/pid,

Unity 切换Shader耗CPU大

在游戏中,怪物或者人受到攻击后,会有变白的效果.这个效果是Shader实现的.在判定被攻击的时候切换Shader. Shader shader = getBeAttackShader(); material.shader = shader; static Shader s_BeattackShader = null; protected virtual Shader getBeAttackShader() { if(s_BeattackShader == null) { s_BeattackSh

[深度学习] Pytorch(三)—— 多/单GPU、CPU,训练保存、加载模型参数问题

[深度学习] Pytorch(三)-- 多/单GPU.CPU,训练保存.加载预测模型问题 上一篇实践学习中,遇到了在多/单个GPU.GPU与CPU的不同环境下训练保存.加载使用使用模型的问题,如果保存.加载的上述三类环境不同,加载时会出错.就去研究了一下,做了实验,得出以下结论: 多/单GPU训练保存模型参数.CPU加载使用模型 #保存 PATH = 'cifar_net.pth' torch.save(net.module.state_dict(), PATH) #加载 net = Net()