节省计算资源,优化执行效率 (节省计算资源的同义词)

节省计算资源,优化执行效率:现代计算领域的关键挑战与策略 优化执行效率

一、引言

随着信息技术的快速发展,大数据、云计算、人工智能等领域日益成为科技创新的主战场。
在这些领域中,计算资源的消耗和执行效率的优化显得尤为重要。
节省计算资源不仅意味着降低成本,更重要的是提升系统性能,优化用户体验。
因此,本文将探讨如何节省计算资源,优化执行效率,以及相关的同义词替换,以丰富文章内容。

二、节省计算资源的意义

计算资源是信息技术领域的重要组成部分,包括处理器、内存、存储等硬件资源以及软件资源。
随着数据量的不断增长和计算任务的日益复杂,计算资源的消耗日益严重。
节省计算资源不仅有助于降低企业和个人的运营成本,还有助于提升系统性能、加快任务处理速度、减少能源消耗等。
因此,节省计算资源对于推动信息技术发展具有重要意义。

三、优化执行效率的策略

1. 算法优化:算法是计算机处理任务的核心,优化算法可以有效提高执行效率。例如,采用时间复杂度更低的算法、使用并行计算技术等,都可以显著提高执行效率。
2. 软硬件协同优化:硬件和软件之间的协同优化是提高执行效率的重要手段。通过对硬件和软件的协同设计,可以充分利用硬件资源,提高系统的整体性能。
3. 数据结构优化:数据结构对执行效率有很大影响。选择合适的数据结构可以显著提高数据访问速度和处理效率。
4. 云计算资源调度:云计算为计算资源的调度和管理提供了便捷的途径。通过合理的资源调度,可以充分利用云计算资源,提高执行效率。

四、节省计算资源的同义词及其含义

1. 节约计算资源:指有效利用计算资源,避免浪费。
2. 缩减计算成本:通过降低计算资源的消耗来减少成本。
3. 优化计算资源利用率:通过技术手段提高计算资源的利用效率。
4. 高效利用计算资源:在完成任务的同时,尽量减少计算资源的消耗。

五、具体案例分析

1. 在大数据分析领域,通过采用分布式计算框架和优化的算法,可以在节省计算资源的同时,提高大数据处理的执行效率。
2. 在机器学习领域,采用模型压缩技术可以显著减少模型对计算资源的需求,同时提高模型的推理速度。
3. 在云计算领域,通过动态资源调度和负载均衡技术,可以充分利用云计算资源,提高任务的执行效率。

六、结论

节省计算资源、优化执行效率是信息技术领域的重要挑战。
通过算法优化、软硬件协同优化、数据结构优化以及云计算资源调度等手段,我们可以实现这一目标。
同时,使用同义词替换也是丰富文章内容、避免重复的有效手段。
未来,随着技术的不断发展,我们将面临更多的挑战和机遇,需要不断探索新的方法和策略来进一步节省计算资源、提高执行效率。

七、展望与建议

1. 加强研究:持续深入研究节省计算资源和优化执行效率的新技术、新方法。
2. 推广应用:将已经成熟的技术和方法广泛应用到各个领域,推动信息技术的发展。
3. 协同发展:加强产学研合作,促进技术、产业和学术研究的协同发展。
4. 人才培养:加强相关领域的人才培养,为信息技术的发展提供人才支持。

节省计算资源、优化执行效率是信息技术领域的重要任务。
我们需要不断探索新的方法和策略,为信息技术的发展做出贡献。


大数据、云计算、人工智能之间有什么样的关系?

云计算最初的目标是对资源的管理,管理的主要是计算资源,网络资源,存储资源三个方面。 想象你有一大堆的服务器,交换机,存储设备,放在你的机房里面,你最想做的事情就是把这些东西统一的管理起来,最好能达到当别人向你请求分配资源的时候(例如1核1G内存,10G硬盘,1M带宽的机器),能够达到想什么时候要就能什么时候要,想要多少就有多少的状态。

这就是所谓的弹性,俗话说就是灵活性。 灵活性分两个方面,想什么时候要就什么时候要,这叫做时间灵活性,想要多少就要多少,这叫做空间灵活性。

物理机显然是做不到这一点的。虽然物理设备是越来越牛了:

服务器用的是物理机,例如戴尔,惠普,IBM,联想等物理服务器,随着硬件设备的进步,物理服务器越来越强大了,64核128G内存都算是普通配置。

网络用的是硬件交换机和路由器,例如思科的,华为的,从1GE到10GE,现在有40GE和100GE,带宽越来越牛。

存储方面有的用普通的磁盘,也有了更快的SSD盘。 容量从M,到G,连笔记本电脑都能配置到T,更何况磁盘阵列。 所以人们想到的第一个办法叫做虚拟化。 所谓虚拟化,就是把实的变成虚的。

物理机变为虚拟机:cpu是虚拟的,内存是虚拟的。

物理交换机变为虚拟交换机:网卡是虚拟的,交换机是虚拟的,带宽也是虚拟的。

物理存储变成虚拟存储:多块硬盘虚拟成一个存储池,从中虚拟出多块小硬盘。

虚拟化很好的解决了上面的三个问题:

人工运维:虚拟机的创建和删除都可以远程操作,虚拟机被玩坏了,删了再建一个分钟级别的。 虚拟网络的配置也可以远程操作,创建网卡,分配带宽都是调用接口就能搞定的。

浪费资源:虚拟化了以后,资源可以分配的很小很小,比如1个cpu,1G内存,1M带宽,1G硬盘,都可以被虚拟出来。

隔离性差:每个虚拟机有独立的cpu, 内存,硬盘,网卡,不同虚拟机的应用互不干扰。

在虚拟化阶段,领跑者是VMware,可以实现基本的计算,网络,存储的虚拟化。

当然这个世界有闭源,就有开源,有Windows就有Linux,有iOS就有Andord,有VMware,就有Xen和KVM。 在开源虚拟化方面,Citrix的Xen做的不错,后来Redhat在KVM发力不少。

对于网络虚拟化,有Open vSwitch,可以通过命令创建网桥,网卡,设置VLAN,设置带宽。

对于存储虚拟化,对于本地盘,有LVM,可以将多个硬盘变成一大块盘,然后在里面切出一小块给用户。

但是虚拟化也有缺点,通过虚拟化软件创建虚拟机,需要人工指定放在哪台机器上,硬盘放在哪个存储设备上,网络的VLAN ID,带宽具体的配置,都需要人工指定。 所以单单使用虚拟化的运维工程师往往有一个Excel表格,有多少台机器,每台机器部署了哪些虚拟机。 所以,一般虚拟化的集群数目都不是特别的大。

为了解决虚拟化阶段的问题,人们想到的一个方式为池化,也就是说虚拟化已经将资源分的很细了,但是对于如此细粒度的资源靠Excel去管理,成本太高,能不能打成一个大的池,当需要资源的时候,帮助用户自动的选择,而非用户指定。 所以这个阶段的关键点:调度器Scheduler。

于是VMware有了自己的vCloud。

于是基于Xen和KVM的私有云平台CloudStack,后来Citrix将其收购后开源。

当这些私有云平台在用户的数据中心里面卖的其贵无比,赚的盆满钵满的时候。 有其他的公司开始了另外的选择,这就是AWS和Google,开始了公有云领域的探索。

AWS最初就是基于Xen技术进行虚拟化的,并且最终形成了公有云平台。 也许AWS最初只是不想让自己的电商领域的利润全部交给私有云厂商吧,于是自己的云平台首先支撑起了自己的业务,在这个过程中,AWS自己严肃的使用了自己的云计算平台,使得公有云平台不是对于资源的配置更加友好,而是对于应用的部署更加友好,最终大放异彩。

公有云的第一名AWS活的很爽,第二名Rackspace就不太爽了,没错,互联网行业嘛,基本上就是一家独大。 第二名如何逆袭呢?开源是很好的办法,让整个行业大家一起为这个云平台出力,兄弟们,大家一起上。 于是Rackspace与美国航空航天局(NASA)合作创始了开源云平台OpenStack。 OpenStack现在发展的和AWS有点像了,所以从OpenStack的模块组成,可以看到云计算池化的方法。

OpenStack包含哪些组件呢?

计算池化模块Nova:OpenStack的计算虚拟化主要使用KVM,然而到底在那个物理机上开虚拟机呢,这要靠nova-scheduler。

网络池化模块Neutron:OpenStack的网络虚拟化主要使用Openvswitch,然而对于每一个Openvswitch的虚拟网络,虚拟网卡,VLAN,带宽的配置,不需要登录到集群上配置,Neutron可以通过SDN的方式进行配置。

存储池化模块Cinder:OpenStack的存储虚拟化,如果使用本地盘,则基于LVM,使用哪个LVM上分配的盘,也是用过scheduler来的。 后来就有了将多台机器的硬盘打成一个池的方式Ceph,则调度的过程,则在Ceph层完成。

有了OpenStack,所有的私有云厂商都疯了,原来VMware在私有云市场实在赚的太多了,眼巴巴的看着,没有对应的平台可以和他抗衡。 现在有了现成的框架,再加上自己的硬件设备,你可以想象到的所有的IT厂商的巨头,全部加入到社区里面来,将OpenStack开发为自己的产品,连同硬件设备一起,杀入私有云市场。

网易当然也没有错过这次风口,上线了自己的OpenStack集群,网易云基础服务(网易蜂巢)基于OpenStack自主研发了IaaS服务,在计算虚拟化方面,通过裁剪KVM镜像,优化虚拟机启动流程等改进,实现了虚拟机的秒级别启动。 在网络虚拟化方面,通过SDN和Openvswitch技术,实现了虚拟机之间的高性能互访。 在存储虚拟化方面,通过优化Ceph存储,实现高性能云盘。

但是网易并没有杀进私有云市场,而是使用OpenStack支撑起了自己的应用,仅仅是资源层面弹性是不够的,还需要开发出对应用部署友好的组件。

随着公有云和基于OpenStack的私有云越来越成熟,构造一个成千上万个物理节点的云平台以及不是问题,而且很多云厂商都会采取多个数据中心部署多套云平台,总的规模数量就更加大了,在这个规模下,对于客户感知来说,基本上可以实现想什么时候要什么时候要,想要多少要多少。

云计算解决了基础资源层的弹性伸缩,却没有解决应用随基础资源层弹性伸缩而带来的批量、快速部署问题。 比如在双十一期间,10个节点要变成100个节点,如果使用物理设备,再买90台机器肯定来不及,仅仅有IaaS实现资源的弹性是不够的,再创建90台虚拟机,也是空的,还是需要运维人员一台一台地部署。 于是有了PaaS层,PaaS主要用于管理应用层。 我总结为两部分:一部分是你自己的应用应当自动部署,比如Puppet、Chef、Ansible、 Cloud Foundry,CloudFormation等,可以通过脚本帮你部署;另一部分是你觉得复杂的通用应用不用部署,比如数据库、缓存等可以在云平台上一点即得。

要么就是自动部署,要么就是不用部署,总的来说就是应用层你也少操心,就是PaaS的作用。 当然最好还是都不用去部署,一键可得,所以公有云平台将通用的服务都做成了PaaS平台。 另一些你自己开发的应用,除了你自己其他人不会知道,所以你可以用工具变成自动部署。

当然这种部署方式也有一个问题,就是无论Puppet、 Chef、Ansible把安装脚本抽象的再好,说到底也是基于脚本的,然而应用所在的环境千差万别。 文件路径的差别,文件权限的差别,依赖包的差别,应用环境的差别,Tomcat、 PHP、 Apache等软件版本的差别,JDK、Python等版本的差别,是否安装了一些系统软件,是否占用了哪些端口,都可能造成脚本执行的不成功。 所以看起来是一旦脚本写好,就能够快速复制了,但是环境稍有改变,就需要把脚本进行新一轮的修改、测试、联调。 例如在数据中心写好的脚本移到AWS上就不一定直接能用,在AWS上联调好了,迁移到Google Cloud上也可能会再出问题。

容器是Container,Container另一个意思是集装箱,其实容器的思想就是要变成软件交付的集装箱。 集装箱的特点,一是打包,二是标准。

在没有集装箱的时代,假设将货物从A运到B,中间要经过三个码头、换三次船。 每次都要将货物卸下船来,摆的七零八落,然后搬上船重新整齐摆好。 因此在没有集装箱的时候,每次换船,船员们都要在岸上待几天才能走。

有了集装箱以后,所有的货物都打包在一起了,并且集装箱的尺寸全部一致,所以每次换船的时候,一个箱子整体搬过去就行了,小时级别就能完成,船员再也不能上岸长时间耽搁了。

这是集装箱“打包”、“标准”两大特点在生活中的应用。

部署任何一个应用,也包含很多零零散散的东西,权限,用户,路径,配置,应用环境等!这就像很多零碎地货物,如果不打包,就需要在开发、测试、生产的每个环境上重新查看以保证环境的一致,有时甚至要将这些环境重新搭建一遍,就像每次将货物卸载、重装一样麻烦。 中间稍有差池,都可能导致程序的运行失败。

那么容器如何对应用打包呢?还是要学习集装箱,首先要有个封闭的环境,将货物封装起来,让货物之间互不干扰,互相隔离,这样装货卸货才方便。

封闭的环境主要使用了两种技术,一种是看起来是隔离的技术,称为namespace,也即每个namespace中的应用看到的是不同的IP地址、用户空间、程号等。 另一种是用起来是隔离的技术,称为cgroup,也即明明整台机器有很多的CPU、内存,而一个应用只能用其中的一部分。

有了这两项技术,集装箱的铁盒子我们是焊好了,接下来就是如何将这个集装箱标准化,从而在哪艘船上都能运输。 这里的标准一个是镜像,一个是容器的运行环境。

所谓的镜像,就是将你焊好集装箱的那个时刻,将集装箱的状态保存下来,就像孙悟空说定,集装箱里面就定在了那一刻,然后将这一刻的状态保存成一系列文件。 这些文件的格式是标准的,谁看到这些文件,都能还原当时定住的那个时刻。 将镜像还原成运行时的过程(就是读取镜像文件,还原那个时刻的过程)就是容器的运行的过程。

有了容器,云计算才真正实现了应用层和资源层的完全弹性。

在云计算的发展过程中,云计算逐渐发现自己除了资源层面的管理,还能够进行应用层面的管理,而大数据应用作为越来越重要的应用之一,云计算也可以放入PaaS层管理起来,而大数据也发现自己越来越需要大量的计算资源,而且想什么时候要就什么时候要,想要多少就要多少,于是两者相遇,相识,相知,走在了一起。

说到大数据,首先我们来看一下数据的分类,我们生活中的数据总体分为两种: 结构化数据和非结构化数据。

结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。

非结构化数据:指不定长或无固定格式的数据,如邮件, word 文档等

当然有的地方还会提到第三种,半结构化数据,如 XML, HTML 等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理。

随着互联网的发展,非结构化数据越来越多,当我们遇到这么多数据的时候,怎么办呢?分为以下的步骤:

数据的收集:即将散落在互联网世界的数据放到咱们的系统中来。 数据收集分两个模式,推和拉,所谓的推,即推送,是在互联网世界里面放很多自己的小弟程序,这些小弟程序收集了数据后,主动发送给咱们的系统。 所谓的拉,即爬取,通过运行程序,将互联网世界的数据下载到咱们的系统中。

数据的传输:收到的数据需要通过一个载体进行传输,多采用队列的方式,因为大量的数据同时过来,肯定处理不过来,通过队列,让信息排好队,一部分一部分的处理即可。

数据的存储:好不容易收集到的数据,对于公司来讲是一笔财富,当然不能丢掉,需要找一个很大很大的空间将数据存储下来。

数据的分析:收到的大量的数据,里面肯定有很多的废品数据,或者很多对我们没有用的数据,我们希望对这些数据首先进行清洗。 另外我们希望挖掘出数据之间的相互关系,或者对数据做一定的统计,从而得到一定的知识,比如盛传的啤酒和尿布的关系。

数据的检索和挖掘:分析完毕的数据我们希望能够随时把我们想要的部分找出来,搜索引擎是一个很好的方式。 另外对于搜索的结果,可以根据数据的分析阶段打的标签进行分类和聚类,从而将数据之间的关系展现给用户。

当数据量很少的时候,以上的几个步骤其实都不需要云计算,一台机器就能够解决。 然而量大了以后,一台机器就没有办法了。

所以大数据想了一个方式,就是聚合多台机器的力量,众人拾柴火焰高,看能不能通过多台机器齐心协力,把事情很快的搞定。

对于数据的收集,对于IoT来讲,外面部署这成千上万的检测设备,将大量的温度,适度,监控,电力等等数据统统收集上来,对于互联网网页的搜索引擎来讲,需要将整个互联网所有的网页都下载下来,这显然一台机器做不到,需要多台机器组成网络爬虫系统,每台机器下载一部分,同时工作,才能在有限的时间内,将海量的网页下载完毕。 开源的网络爬虫大家可以关注一下Nutch。

对于数据的传输,一个内存里面的队列肯定会被大量的数据挤爆掉,于是就产生了Kafka这样基于硬盘的分布式队列,也即kafka的队列可以多台机器同时传输,随你数据量多大,只要我的队列足够多,管道足够粗,就能够撑得住。

当数据量非常大的时候,一个索引文件已经不能满足大数据量的搜索,所以要分成多台机器一起搜索,如图所示,将索引分成了多个shard也即分片,分不到不同的机器上,进行并行的搜索。

所以说大数据平台,什么叫做大数据,说白了就是一台机器干不完,大家一起干。随着数据量越来越大,很多不大的公司都需要处理相当多的数据,这些小公司没有这么多机器可怎么办呢?

于是大数据人员想起来想要多少要多少,想什么时候要什么时候要的云平台。 空间的灵活性让大数据使用者随时能够创建一大批机器来计算,而时间的灵活性可以保证整个云平台的资源,不同的租户你用完了我用,我用完了他用,大家都不浪费资源。

于是很多人会利用公有云或者私有云平台部署大数据集群,但是完成集群的部署还是有难度的,云计算的人员想,既然大家都需要,那我就把他集成在我的云计算平台里面,当大家需要一个大数据平台的时候,无论是Nutch, Kafka,hadoop,ElasticSearch等,我能够马上给你部署出来一套。 我们管这个叫做PaaS平台。

大数据平台于是作为PaaS融入了云计算的大家庭。

作为国内最早诞生的互联网公司之一,网易在过去十余年的产品研发、孵化和运维过程中,各个部门对数据有着不同且繁杂的需求。而如何把这些繁杂的需求用统一的手段来解决,网易在大数据分析方面同样进行了十余年的探索,并自去年开始通过“网易云”将这些能力开放出来

“网易猛犸”与“网易有数”两大数据分析平台就是在这个阶段逐渐成型的。

网易猛犸大数据平台可以实现从各种不同数据源提取数据,同步到内核存储系统,同时对外提供便捷的操作体验。 现在每天约有130亿条数据进入网易猛犸平台,经过数据建模和清洗,进行数据分析预测。

网易的另一大数据分析平台,网易有数则可以极大简化数据探索,提高数据可视化方面的效率,提供灵活报表制作等,以帮助分析师专注于自己的工作内容。

有了大数据平台,对于数据的处理和搜索已经没有问题了,搜索引擎着实火了一阵,当很多人觉得搜索引擎能够一下子帮助用户搜出自己想要的东西的时候,还是非常的开心的。

但是过了一阵人们就不满足于信息仅仅被搜索出来了。 信息的搜索还是一个人需要适应机器的思维的过程,要想搜到想要的信息,有时候需要懂得一些搜索或者分词的技巧。 机器还是没有那么懂人。 什么时候机器能够像人一样懂人呢,我告诉机器我想要什么,机器就会像人一样的体会,并且做出人一样的反馈,多好啊。

这个思想已经不是一天两天了,在云计算还不十分兴起的时候,人们就有了这样的想法。那怎么做的这件事情呢?

人们首先想到的是,人类的思维方式有固有的规律在里面,如果我们能够将这种规律表达出来,告诉机器,机器不就能理解人了吗?

人们首先想到的是告诉计算机人类的推理能力,在这个阶段,人们慢慢的能够让机器来证明数学公式了,多么令人欣喜的过程啊。 然而,数学公式表达相对严谨的,推理的过程也是相对严谨,所以比较容易总结出严格个规律来。 然而一旦涉及到没有办法那么严谨的方面,比如财经领域,比如语言理解领域,就难以总结出严格的规律来了。

看来仅仅告知机器如何推理还不够,还需要告诉机器很多很多的知识,很多知识是有领域的,所以一般人做不来,专家可以,如果我们请财经领域的专家或者语言领域的专家来总结规律,并且将规律相对严格的表达出来,然后告知机器不就可以了么?所以诞生了一大批专家系统。 然而专家系统遭遇的瓶颈是,由人来把知识总结出来再教给计算机是相当困难的,即便这个人是专家。

于是人们想到,看来机器是和人完全不一样的物种,干脆让机器自己学习好了。 机器怎么学习呢?既然机器的统计能力这么强,基于统计学习,一定能从大量的数字中发现一定的规律。

其实在娱乐圈有很好的一个例子,可见一斑

有一位网友统计了知名歌手在大陆发行的 9 张专辑中 117 首歌曲的歌词,同一词语在一首歌出现只算一次,形容词、名词和动词的前十名如下表所示(词语后面的数字是出现的次数):

如果我们随便写一串数字,然后按照数位依次在形容词、名词和动词中取出一个词,连在一起会怎么样呢?

例如取圆周率 3.,对应的词语是:坚强,路,飞,自由,雨,埋,迷惘。稍微连接和润色一下:

坚强的孩子,

依然前行在路上,

张开翅膀飞向自由,

让雨水埋葬他的迷惘。

是不是有点感觉了?当然真正基于统计的学习算法比这个简单的统计复杂的多。

然而统计学习比较容易理解简单的相关性,例如一个词和另一个词总是一起出现,两个词应该有关系,而无法表达复杂的相关性,并且统计方法的公式往往非常复杂,为了简化计算,常常做出各种独立性的假设,来降低公式的计算难度,然而现实生活中,具有独立性的事件是相对较少的。

于是人类开始从机器的世界,反思人类的世界是怎么工作的。

人类的脑子里面不是存储着大量的规则,也不是记录着大量的统计数据,而是通过神经元的触发实现的,每个神经元有从其他神经元的输入,当接收到输入的时候,会产生一个输出来刺激其他的神经元,于是大量的神经元相互反应,最终形成各种输出的结果。 例如当人们看到美女瞳孔放大,绝不是大脑根据身材比例进行规则判断,也不是将人生中看过的所有的美女都统计一遍,而是神经元从视网膜触发到大脑再回到瞳孔。 在这个过程中,其实很难总结出每个神经元对最终的结果起到了哪些作用,反正就是起作用了。

于是人们开始用一个数学单元模拟神经元

这个神经元有输入,有输出,输入和输出之间通过一个公式来表示,输入根据重要程度不同(权重),影响着输出。

于是将n个神经元通过像一张神经网络一样连接在一起,n这个数字可以很大很大,所有的神经元可以分成很多列,每一列很多个排列起来,每个神经元的对于输入的权重可以都不相同,从而每个神经元的公式也不相同。 当人们从这张网络中输入一个东西的时候,希望输出一个对人类来讲正确的结果。 例如上面的例子,输入一个写着2的图片,输出的列表里面第二个数字最大,其实从机器来讲,它既不知道输入的这个图片写的是2,也不知道输出的这一系列数字的意义,没关系,人知道意义就可以了。 正如对于神经元来说,他们既不知道视网膜看到的是美女,也不知道瞳孔放大是为了看的清楚,反正看到美女,瞳孔放大了,就可以了。

对于任何一张神经网络,谁也不敢保证输入是2,输出一定是第二个数字最大,要保证这个结果,需要训练和学习。 毕竟看到美女而瞳孔放大也是人类很多年进化的结果。 学习的过程就是,输入大量的图片,如果结果不是想要的结果,则进行调整。 如何调整呢,就是每个神经元的每个权重都向目标进行微调,由于神经元和权重实在是太多了,所以整张网络产生的结果很难表现出非此即彼的结果,而是向着结果微微的进步,最终能够达到目标结果。 当然这些调整的策略还是非常有技巧的,需要算法的高手来仔细的调整。 正如人类见到美女,瞳孔一开始没有放大到能看清楚,于是美女跟别人跑了,下次学习的结果是瞳孔放大一点点,而不是放大鼻孔。

听起来也没有那么有道理,但是的确能做到,就是这么任性。

神经网络的普遍性定理是这样说的,假设某个人给你某种复杂奇特的函数,f(x):

不管这个函数是什么样的,总会确保有个神经网络能够对任何可能的输入x,其值f(x)(或者某个能够准确的近似)是神经网络的输出。

如果在函数代表着规律,也意味着这个规律无论多么奇妙,多么不能理解,都是能通过大量的神经元,通过大量权重的调整,表示出来的。

这让我想到了经济学,于是比较容易理解了。

我们把每个神经元当成社会中从事经济活动的个体。 于是神经网络相当于整个经济社会,每个神经元对于社会的输入,都有权重的调整,做出相应的输出,比如工资涨了,菜价也涨了,股票跌了,我应该怎么办,怎么花自己的钱。 这里面没有规律么?肯定有,但是具体什么规律呢?却很难说清楚。

基于专家系统的经济属于计划经济,整个经济规律的表示不希望通过每个经济个体的独立决策表现出来,而是希望通过专家的高屋建瓴和远见卓识总结出来。 专家永远不可能知道哪个城市的哪个街道缺少一个卖甜豆腐脑的。 于是专家说应该产多少钢铁,产多少馒头,往往距离人民生活的真正需求有较大的差距,就算整个计划书写个几百页,也无法表达隐藏在人民生活中的小规律。

基于统计的宏观调控就靠谱的多了,每年统计局都会统计整个社会的就业率,通胀率,GDP等等指标,这些指标往往代表着很多的内在规律,虽然不能够精确表达,但是相对靠谱。 然而基于统计的规律总结表达相对比较粗糙,比如经济学家看到这些统计数据可以总结出长期来看房价是涨还是跌,股票长期来看是涨还是跌,如果经济总体上扬,房价和股票应该都是涨的。 但是基于统计数据,无法总结出股票,物价的微小波动规律。

基于神经网络的微观经济学才是对整个经济规律最最准确的表达,每个人对于从社会中的输入,进行各自的调整,并且调整同样会作为输入反馈到社会中。 想象一下股市行情细微的波动曲线,正是每个独立的个体各自不断交易的结果,没有统一的规律可循。 而每个人根据整个社会的输入进行独立决策,当某些因素经过多次训练,也会形成宏观上的统计性的规律,这也就是宏观经济学所能看到的。 例如每次货币大量发行,最后房价都会上涨,多次训练后,人们也就都学会了。

然而神经网络包含这么多的节点,每个节点包含非常多的参数,整个参数量实在是太大了,需要的计算量实在太大,但是没有关系啊,我们有大数据平台,可以汇聚多台机器的力量一起来计算,才能在有限的时间内得到想要的结果。

于是工智能程序作为SaaS平台进入了云计算。

网易将人工智能这个强大的技术,应用于反废品工作中,从网易1997年推出邮箱产品开始,我们的反废品技术就在不停的进化升级,并且成功应用到各个亿量级用户的产品线中,包括影音娱乐,游戏,社交,电商等产品线。 比如网易新闻、博客相册、云音乐、云阅读、有道、BOBO、考拉、游戏等产品。 总的来说,反废品技术在网易已经积累了19年的实践经验,一直在背后默默的为网易产品保驾护航。 现在作为云平台的SaaS服务开放出来。

回顾网易反废品技术发展历程,大致上我们可以把他分为三个关键阶段,也基本对应着人工智能发展的三个时期:

第一阶段主要是依赖关键词,黑白名单和各种过滤器技术,来做一些内容的侦测和拦截,这也是最基础的阶段,受限于当时计算能力瓶颈以及算法理论的发展,第一阶段的技术也能勉强满足使用。

第二个阶段时,基于计算机行业里有一些更新的算法,比如说贝叶斯过滤(基于概率论的算法),一些肤色的识别,纹理的识别等等,这些比较优秀成熟的论文出来,我们可以基于这些算法做更好的特征匹配和技术改造,达到更优的反废品效果。

最后,随着人工智能算法的进步和计算机运算能力的突飞猛进,反废品技术进化到第三个阶段:大数据和人工智能的阶段。 我们会用海量大数据做用户的行为分析,对用户做画像,评估用户是一个废品用户还是一个正常用户,增加用户体验更好的人机识别手段,以及对语义文本进行理解。 还有基于人工智能的图像识别技术,更准确识别是否是色情图片,广告图片以及一些违禁品图片等等。

“GRAM”是指“网格资源分配管理器”吗?

在计算机和软件领域中,GRAM这个缩写词常常代表Grid Resource Allocation Manager,即网格资源分配管理器。 该术语用于描述一个系统,它负责管理和分配网络中的计算资源,以优化任务执行效率。 中文拼音为wǎng gé zī yuán fēn pèi guǎn lǐ qì,它的流行度在英文中达到了1165次,表明在相关技术文档和应用中较为常见。 对于GRAM,其扩展内容主要围绕Globus Toolkit 3.2中的资源管理器。 研究者们针对这个工具进行了深入研究,并提出了扩展方案,以便支持任务再调度和协作型任务的处理。 这些解决方案是GRAM在实际应用中发挥效能的关键部分。 总的来说,GRAM是网络资源管理的一个重要概念,它在软件开发和云计算领域中扮演着至关重要的角色。 了解这个缩写,有助于我们更好地理解如何管理和优化网络资源的分配和使用。 不过,请注意,以上信息仅供参考,实际使用时需根据具体情况进行分析和判断。

GPU和CPU之间是如何协调数据处理的

因为设计的目标不同,当今的CPU和GPU功能上有本质的不同。 作为通用处理器的CPU,顾名思义,它是设计用来处理通用任务的处理、加工、运算以及系统核心控制等等的。 CPU中包含的最基本部件有算术逻辑单元和控制单元,CPU的微架构是为高效率处理数据相关性不大的计算类、复杂繁琐的非计算类的等等百花八门的工作而优化的,在处理日常繁复的任务中应付自如。 计算机的“灵魂”——操作系统,以及几乎100%的系统软件都主要仰仗CPU来顺利运行。 CPU面对的算术、逻辑运算以及控制处理是非常繁琐和复杂的,面对处理的数据和信息量不仅数量多而是种类多。 CPU运算和控制多面手的这种设计,让它在计算机中得心应手,位置不可动摇。 GPU设计的宗旨是实现图形加速,现在最主要的是实现3D 图形加速,因此它的设计基本上是为3D图形加速的相关运算来优化的,如z-buffering 消隐,纹理映射(texture mapping),图形的坐标位置变换与光照计算(transforming & lighting)等等。 这类计算的对象都是针对大量平行数据的,运算的数据量大,但是运算的类型却并不复杂,大多类似和雷同,计算性强但是逻辑性不强,如矩阵运算就是图形运算的典型特性。 如今的游戏,单单从图象的生成来说大概需要下面四个步骤:1、Homogeneous coordinates(齐次坐标) 2、Shading models(阴影建模) 3、Z-Buffering(Z-缓冲) 4、Texture-Mapping(材质贴图) 在这些步骤中,显示部分(GPU)只负责完成第三、四步,而前两个步骤主要是依靠 CPU 来完成。 而且,这还仅仅只是3D图象的生成,还没有包括游戏中复杂的AI运算。 场景切换运算等等……无疑,这些元素还需要CPU去完成,这就是为什么在运行《魔兽世界》的时候,当场景切换时再强劲的显卡都会出现停顿的现象。 对于需要CPU进行大量AI运算的游戏来说,在固定的显示分辨率下,CPU的架构越强、主频越高的确有一定的优势。 著名的FPS第一人称设计游戏——CSS,就是一个很好的例子。 当你开启了30个左右的机器人,在大混战的时候就很容易体现出高端CPU与入门级CPU之间的区别了。 打造一套完整的游戏 PC 系统,CPU和显卡的搭配应该相得益彰,高成低就或低成高就都是不平衡的组合方式。 第一代 GPU首先,CPU将数据传递给GPU进行处理,数据先进入T&L单元中的Transform Engine,在这里,数据将以顶 点的形式接受视野范围的判断,当处理单元判断某部分顶点处于观察者的视线范围以外时,Transform Engine将把这部分顶点“剪除”以使其不会 干扰后续的流水线操作, 具个简单的例子:当你在某FPS游戏中突然打开狙击枪的狙击镜,视野变成了一个圆形的空洞,而其他部分则为黑色,这时 Transform Engine将去除这个圆形视野范围以外的所有顶点,不过,这里进行的只是视野范围的判断,Transform Engine去除在 你的视线范围内但是被其它东西挡住了的物体,另外,每一个三角形可能被旋转,放大/缩小,上升,下降,左偏,右移等。 这就是多边形转换转换。 Transform Engine根据你的视角,改变了由程序提供的组成3D物体的顶点的坐标。 经过Lighting Engine处理后的图象经过判断 处理后的数据将流入T&L单元中的Lighting Engine,根据光源的类型,距离,角度,数目,应用方式等不同参数,每一个多边形都会有 不同的光影表现和光影关系,因而需要不同的光线函数予以表征,在Lighting Engine中,处理单元将根据软件提出的光源分布情况为每个顶点计算 出它所具有的光线矢量,以便后续进行的光线纹理贴图,着色等操作经过Lighting Engine处理的画面其实,经由T&L单元处理过的数据还只是抽象的数据,并不是具体的图形,上面两副图仅仅是方便读者进行想象的示意图。 接下来数据将流入Setup Engine,在这里,运算单元将进行三角形的设置工作,这是整个绘图过程中最重要的一个步骤,Setup Engine甚 至直接影响着一块GPU的执行效能。 三角形的设置过程是由一个一个的多边形组成的,或者是用更好的三角形代替原来的三角形。 在三维图像中可能会有些三角形 被它前面的三角形挡住,但是在这个阶段3D芯片还不知道哪些三角形会被挡住。 所以三角形建立单元接收到的是一个个由三个顶点组成的完整三角形。 三角形的每 个角(或顶点)都有对应的X轴、Y轴和Z轴坐标值,这些坐标值确定了它们在3D景物中的位置。 同时,三角形的设置也确定了像素填充的范围经过Setup Engine处理的画面最终着色完毕的画面在三角形设置完毕后,T&L单元的全部运算就完成了。 接下来数据将进入NV15独有的NSR像素处理单元进行一定的像素处理,接着流入像素流水线 进行后续的纹理像素填充等操作,这部分操作在DriectX7.0中的变化并不明显,基本的渲染填充过程与过去的显卡几无二异T&L虽然再一定程度上缓解了CPU运算能力的不济所带来的瓶颈,使得系统在图形方面的资源得到了再分配和增强,但同时,T&L也将新的矛盾转到了GPU上T&L是一组相对固定的简单的图形函数,所实现的特效受到了函数本身语句的限制,虽然这种固定的指令集设计可以带来比较高的执行效率,但这种设置 使得DX7下所能实现的特效受到了指令集的约束,许多逼真的特效无法实现,程序员的思想也被限定在一个相对狭窄的范围内。 2、我要看到你飘逸的秀发和迷人的微笑—可编程Shader以及第二代GPUDriectX8.0在传统T&L的基础上加入了两个新的概念—可编程的Vertex Shader和Piexl Shader,同样的,第二代 GPU的标志就是硬件级别的可编程Shader运算,代表产品为NV2X(Geforce3/4Ti),R2XX(Radeon8500)等可编程Shader的复杂程度远非T&L可比,为了方便大家理解第二代GPU的特点,我们先来认识一下什么是可编程Shader,以及可编程Shader运算单元可编程Vertex Shader及顶点处理器:可编程Vertex Shader让程序员能够对特定物体,甚至整个画面的每一个顶点,指定特别的运算程序,却不需要CPU介入。 每一个顶点都携带相当多 的信息,比如坐标,重量,法线,颜色,纹理坐标,雾和点大小数据。 顶点处理器能够以简短的程序来改变上述这些信息。 这些小程序直接由顶点着色引擎本身执 行,不必劳驾CPU。 典型的T&L引擎将程序员限制在3D运算的光影转换之前, 在有了顶点处理器的支持之后,游戏设计师对游戏场景里的3D物 体能够为所欲为的操纵变化,而且不需要用到中央处理器。 这导致了一场革新,程序可以改变顶点的坐标,这样基本上改变物体的形状,以达到更接近真实的移动、移动残影、混色、内插(在两种外型间转换),以及变形, 比如改变角色脸部的骨骼和皮肤一个产生一个适时的微笑。 也可改变顶点上的颜色数据和纹理坐标,物体表面的颜色达到设计师所想要的色彩效果、投影、凹凸贴图 设置(如Blinn Bump mapping)或者其它投射的纹理。 光源也可以为程序员随心所欲的调整,不再像过去那样需要对光源的效果进行笨拙的光线 纹理贴图,而这些在以前是不可想象的。 这一切都归功于可编程Vertex Shader和顶点处理器的出现Blinn Bump mapping可编程Piexl Shader以及像素处理器在NV15中,nVidia曾经尝试加入一个叫NSR的像素处理单元,它可以在数据进入像素流水线之前对每个像素进行一系列运算操作,虽然同为每像素操 作,但NSR与Piexl Shader可不能同日而语, NSR对于像素的运算只有7种,同T&L一样,它依然是固定模式的,程序员依然要依照 规定好的条条框框写出程序,而Piexl Shader则不同,我们可以用许多不同方式去编程,以实现不同的特效,下面就是一般的像素处理器所具备的特 性:· 阴影贴图 · 快速纹理载入 · 影像乘法,对称核心 · 支持4096x4096或512x512x512 纹理 · 立方体贴图每边可4096x4096x32-位 · 支持YUYV的纹理(自动转换成RGB三原色) · 支持全景贴图可以指向任何一个图像,如背景缓冲区(back buffer),而可直接当作纹理使用 · 边缘色彩及边缘纹理 · 硬件同步化读/写对同一张纹理的读及写允许全流水线操作。 可以对背景缓冲区着色,然后马上能当作纹理使用 · Pass through colors · 支持DX6规格的环境凹凸/亮度贴图(就是环境凹凸贴图) · 简单的纹理,S,T 在alpha/红(AB)及蓝/绿 (BG) · 等向的双方向性反射分布功能光源 · 内积产生色彩贴图或Z坐标 · 真实反射凹凸贴图这看起来似乎有点抽象,简单的说,可编程Piexl Shader实现了一个非常重要的特效—真实的毛发古老街道上昏暗灯光中的狼人在3D渲染中,渲染真实的毛发一直是一件非常困难的事情,大量的多边形给多边形生成带来了严峻的考验,而每一根毛发之间复杂多变的即时光影关系更不是几个简单固定的指令所能实现的。 Piexl Shader的可编程性和运算能力很好的解决了这个问题 好啦,现在让我们来看看第二代GPU是如何完整处理一个画面的吧首先,来自CPU的各种物理参数进入GPU,Vertex Shader将对顶点数据进行基本的判断,如果没有需要处理的Vertex效果,则顶点数据直 接进入Transform&Lighting Unit进行传统的T&L操作以节约时间提高效率,如果需要处理各种Vertex效果,则 Vertex Shader将先对各种Vertex Programs的指令进行运算,一般的Vertex Programs中往往包含了过去转换,剪 切,光照运算等所需要实现的效果,故经由Vertex Shader处理的效果一般不需要再进行Transform&Lighting操作;另 外,当遇到涉及到曲面镶嵌(把曲面,比如弓形转换成为多边形或者三角形)的场合时,CPU可以直接将数据交给Vertex Shader进行处理另外,在DX8.0的Transform过程中,Vertex Shader可以完成Z值的剔除,也就是Back Face Culling—阴面隐去,这就意味着除了视野以外的顶点外,视野内被前面顶点遮住的顶点也会被一并剪除,这大大减轻了需要进行操作的顶点数目接下来,经由Vertex Shader处理完成的各种数据将流入Setup Engine,在这里一如既往的进行三角形的设置工作,到这里为止,Vertex Shader的工作就完成了过去,设置好的三角形本来应该带着各自所有的参数进入像素流水线内进行纹理填充和渲染,但现在则不同,在填充之前我们还需要进行Piexl Shader的操作其实Piexl Shader并非独立存在的,它位于纹理填充单元之后,数据流入像素流水线后先进入纹理填充单元进行纹理填充,然后便是 Piexl Shader单元,经由Piexl Shader单元进行各种处理运算之后再进入像素填充单元进行具体的着色,再经由雾化等操作后,一个完整 的画面就算完成了值得注意的是,第二代GPU中普遍引入了独立的显示数据管理机制,他们位于Vertex Shader,Setup Engine以及像素流水线之间,负 责数据的更有效率的传输、组合,各种无效值的剔除,数据的压缩以及寄存器的管理等工作,这个单元的出现对整个GPU的工作效率的保证其到了至管重要的作 用。 HyperZ系列:HyperZ技术本身就是一种类似nVIDIA的“Z-封闭甄别”的技术,但是比nVIDIA还更进一步。 它的主要功能简单说来就是分 析在Z轴上的场景,被遮挡的就会被忽略掉,只渲染我们能看到的部分场景;然后对渲染过的Z轴场景进行压缩处理,数据的压缩可减少他所占用的空间,从而在存 取Z-Buffer数据的时候可以保留更多的显存带宽。 而且这是一种画面质量没有损害的压缩算法,并不影响画面质量。 最后一步就是把经过渲染的场景中的Z -Buffer信息立刻清除掉,这样就更加大了显存带宽的利用率。 LMA(光速显存架构)系列:光速显存架构采用的第一个技术是“显存交错控制”技术, LMA中的显存控制器划分成了4个独立的显存控制单元,每个单元最 大可以进行32bit图形相关数据的存取工作,并且这4个单元之间以及它们和图形处理单元之间都保持密切的通讯联系,并随时协调平衡各个子单元之间的数据 流量,因此整体来看LMA的显存控制单元还是可以进行128bit数据的存储,但是保证了显存带宽的充分利用。 光速显存架构采用的第二个技术是“无损Z压 缩算法”。 传统的图形芯片对于每个待渲染的图形象素都要进行Z轴数据的读写工作,因此存储这些数据的Z缓存一向是消耗显存带宽的大户。 LMA中集成了硬件 “无损Z压缩”单元,采用“无损Z压缩算法”对Z-缓存数据进行4:1的完全无损压缩。 光速显存架构采用的第三个技术是“Z-封闭甄别”。 排除了图象中 被遮盖住而不可见的部分,这样GPU就不做隐面模型构建(节省处理器的多边形运算资源),并且渲染管线也不对隐面进行渲染(无需从帧缓存中读写隐面资料数 据,节省渲染管线的象素和纹理生成资源并完全消灭了隐面资料对显存带宽的占用)。 最后,LMA还包括了4组高速Cache,对数据传输进行缓冲。 3、梦中的镜花水月—可编程Shader2.0以及第三代GPU当你第一次看到3Dmark03中的MotherNature时,你有没有感觉到震撼?更加宽泛的色彩范围能够使得图形的逼真度上升,这就是Shader2.0的由来,Shader2.0的核心实际上就是以扩大指令数目以及FLOAT数据形 式的应用来提高色彩表达的精确度,而第三代GPU的Shader单元也由此而具备了高精度FLOAT色彩数据的运算能力。 从一般角度来讲,第三代GPU同 第二代GPU相比在基本的操作控制形式等方面并没有本质的区别,但是由于Shader2.0更大的指令长度和指令个数,以及通用程序+子程序调用的程序形 式等使得第三代GPU在处理高精度的庞大指令时效率上有了明显的提升,同时也使得第三代GPU的可编程性跃上了一个新的台阶让我们来看看第三代GPU到底有哪些改进吧Vexter Shader部分第三代GPU的顶点处理器部分除了一般的操作功能外还具备流程控制能力,包括循环,跳跃以及子程序调用等,这些控制指令以及更多向量(或标量)寄存器的应 用使得顶点处理器能够以更高的效率执行Vertex Programs,提高了Vertex的处理速度。 同时,加大的指令长度和指令数量使得顶点处理器的 功能得到了进一步的强化。 另外,在第三代GPU中,传统的T&L数据将完全交由顶点处理器来执行,Transform& Lighting Unit将彻底被顶点处理器“吞并”,这也是第三代GPU的一个重要特点Piexl Shader部分第二代GPU的Piexl Shader只能实现INT数据的运算,这势必会带来最终运算结果的不精确,而数据的不精确导致了颜色表现的不准确,干扰了最 终画面的质量以及效果的表现,第三代GPU的重点改进就是运算单元和寄存器所支持的运算格式,现在Piexl Shader可以进行更高精度的FLOAT 运算和输出,从而使得图形的色彩显示更加精确暴光正确的图象数据精度不当而无法实现的特种暴光另外,第三代GPU的像素处理器每周期所能处理的材质以及指令也分别增加了数倍,这些新特性使得第三代GPU可以处理各种复杂程度的效果,营造一个更为真实的3D画面,比如更加真实的水面效果INT Piexl Shader所表现的水面效果FLOAT Piexl Shader所表现的水面效果 传统的INT无法表现宽泛的波浪效果,程序员害怕数据精度范围狭窄引起的上溢或者下溢的发生而不得不在一个很小的物理参数范围内控制涟漪水面所需的波长、 波浪的大小、移动速度以及反射和折射效果等,现在,由于数据精度的提升,像素处理器完全可以处理一个非常宽泛的数据精度范围,避免数据的溢出,这就使得更 加真实的水面效果得以被表现。 第三代GPU的代表是NV3X系列,R3XX系列等,其中R3XX系列的基本处理方式和顺序与第二代GPU在本质上基本相 同,仅仅是Vertex Shader和Piexl Shader的具体操作和运算精度上有些许不同,而NV3X虽然在基本原理上也与之大略相同,但 从流水线的角度来看则与完全不同,应该算是个“异类”。 产生过程,只分析一下NV3X以NV35为例:首先,他具有8个纹理帖图单元,但8个纹理贴图单元并不在固定分布于每一条Piexl流水线,而是集簇在一起,根据情况来搭配,可以是4*2、8*1。 其次,他具有12条Shader流水线,但没有全盘采用浮点渲染流水线,而只是把12条Shader流水线中的8条做成具备浮点处理能力;不过全部12条Shader流水线都具备Fixed-Point Shader的执行能力。 另外,NV3X将流水线后部的各种渲染单元,如雾化,Alpha混合等大幅削减,使得流水线在一定程度上公用这些单元NV30的构架组成形式基本上与之相当,只是数目上略有不同由于这个构架并不是传统意义上的4*2或者8*1的固定构架,我们不能象过去那样说NV35“每个流水线具有2个纹理帖图单元”或者“每条管线具有3个Shader流水线”……我们只能说“NV35单位周期可以完成8次左右的纹理贴图或者12次Shader操作”另外,由于NV3X对于Fixed-Point Shader的支持精度是FP16和FP32,同时NV3X的Shader流水线的单位Fixed- Point Shader处理精度是16位,所以当遇到32位Fixed-Point Shader数据时,能进行Fixed-Point Shader 数据处理的8条Shader流水线也会根据情况进行搭配来运算32位的Fixed-Point Shader数据Pixel Programs往往是由多条指令构成的,不同的指令需要不同的执行时间来完成,每个像素必须在应用在它“身上”的Pixel Shader 操作完成后才能由像素流水线写入到帧缓存里。 故此,对于应用了Piexl Shader的像素实际上是需要多个以上的周期才能写入到帧缓存里,如果采用8 条完整的渲染流水线的话, 流水线后面的雾化、色彩混合等单元很多时候都会处在等待阶段,这部分单元需要占用的晶体管数量不在少数,如果这样浪费就怪可惜 的,砍掉后其中的雾化等单元后,对整体的性能虽然有一些影响,但是却可以把节省下来的晶体管用于加强Pixel Shader的功能和性能上来,同时可以 保证比较高的多重纹理效率,利大于弊。 简单的,这个有点诡异的体系节省晶体管的同时能确保相对较好的Pixel Shader效能,同时还有极高的多重贴图效能nVidia本指望4条Pixel管线+ 12条Shader流水线的设计能够在现在以及未来较长的一段时间的游戏里提供超过4条甚至8条 Pixel Pipeline显卡的效能。 不过,实际情况却与nVidia的初衷有些背道而驰,Shader的完美应用带来的一个结果就是越来越好的非多 纹理光效果,传统的多纹理贴图才能表现的很好的光效果现在只需要进行一次贴图或者直接使用Shader就可以达到,这使得NV3X的设计成为了空架子,实 用意义大大降低,而在单纹理处理过程中由于NV3X的后续效果单元被削减,它的渲染效能注定没有传统的完整流水线高,另外,由于DX9中的最终FP精度被 定义为FP24,这导致了NV3X的相对低下的FP效能。 最终,本来“先进”的NV3X构架落的个整体效能低下的下场从本质上来讲,图形数据在NV3X中的实际处理过程依然是沿着顶点处理器—Setup Engine—像素流水线的顺序进行的,这与R3XX以及所有的第二代GPU是相同的天堂的入口—可编程Shader3.0,DriectX Next以及未来的GPU在微软刚刚公布的Driect9.0C中,Vertex Shader和Piexl Shader已经具有了几乎相同的能力,而在nVidia新发布的第 四代GPU—NV40中,我们发现Vertex Shader包含了4个纹理取样器,可以使用texld指令进行查表操作, NV40可以在一个 shader pass里完成4个纹理的读取,这个对于通用替换贴图而言相当的重要,有了vertex texturing功能后, vertex shader就能读取纹理信息直接映射到顶点上,以实现displacement mapping(位移映射)等等效果,用不同的纹理和较 少的顶点传输时间就能实现外形复杂、平滑的模型,这表明GPU中Vertex Shader的功能正在逐渐接近Piexl Shader。 随着GPU的发 展,未来GPU中的Vertex Shader和Piexl Shader最终将被合并成一个统一的处理单元—Intergrated Shader,两 种处理单元将使用完全相同的语法以及指令集,Shader的统一将带来完全不同与现在的数据执行处理方式,GPU的内部结构将发生本质的变化, Intergrated Shader带来了更低晶体管数目的解决方案,以更少的晶体管数目来完成现在需要数亿晶体管才能完成的功能,同时统一 Shader将引出类似全通用I/O接口的设计以利资源的更合理的传输和分配,同时,为了解决越来越庞大的数据量,虚拟显存、无限资源访问以及帧缓冲操作 等技术的引入也势在必行。 另外,我们在DirectX Next中还发现了整数指令集,处理器等特殊的定义,这些新颖的设计为我们勾勒出了未来GPU的轮 廓整数指令集在编程中不必在担心指令限制是一个很大的进步,不过想使得GPU更为通用还需要更多的工作。 一个需要提高的主要区域就是整数处理能力。 目前基于在着色器中 处理的所有数据都是浮点,这对于大多数显卡操作而言是没有问题的,不过不适合动态分支预测、非内插式显存搜索(如顶点缓冲的索引)等操作。 在目前的GPU 中,唯一的内存寻址就是纹理查找,使用的也是浮点值。 这样的情况对于纹理定位而言没有什么问题,不过对于通用内存寻址而言就不合适了,这里的连续内存块可 以完全彼此没有关联,采用内插式查找没有任何意义。 微软对于这样的情况,在4.0版的Shader模型中引入了全新的、完整的整数指令集。 拓扑处理器实际 上,目前的显卡可以在某些情况下新生成三角形,比如在用到直线以及点的时候。 大多数的娱乐级显卡只具备对三角形进行光栅化处理的能力,这也就意味着所有的 点、线就必须转化为三角形。 点和线在最后都将以2个三角形结束,这样就需要用到2-6个顶点(根据索引方式的不同而变化)。 从本质上来说,这样的做法是有 益处的,通过可编程的管线,显示先前应该遮蔽的场景也就无需通过CPU,而可以通过微软的“拓扑处理器”直接完成。 从逻辑上来说,这个拓扑处理器和镶嵌单 元是相互独立的,这个处理器在两种操作集中均可以使用。 由目前的趋势来看,未来的GPU将向着高运算能力,高精度,高通用性的方向发展,GPU在工作方式 上将越来越接近CPU,由于高通用性等CPU特性的引入,GPU可能在一定程度上替代一部分CPU在非绘图领域的工作,也许在未来我们会看到由全GPU组 成的图形工作站。 尽管未来GPU需要面对由于这些改进而带来得的诸多问题,尤其是通用性导致的效率低下,比如Intergrated Shader的效率 低下,但随着时间的推移,各种问题都将会得到妥善的解决。

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论