存算一体方案解析


存算分离是将计算和存储功能分开部署在不同的节点或设备上的概念。在存算分离架构中,计算任务通常在独立的计算单元(如CPU或GPU)中执行,而数据存储在独立的存储设备中。这种架构可以提供更大的灵活性和可伸缩性,但可能需要进行大量的数据传输和通信。【冯诺依曼架构的特点为存算分离】
存算分离不可避免地存在以下问题:

内存墙计算机系统中处理器速度远远快于内存访问速度而导致的性能瓶颈。解决内存墙问题可以考虑高速缓存、内存层次结构优化、内存访问模式优化以及使用更快速的内存技术(快闪存、非易失性内存等)。

功耗墙指的是处理器和其他组件的功耗增加速度超过了散热和功耗管理技术的改进速度,从而导致系统性能增长受限的现象。为了应对功耗墙,处理器制造商和系统设计者采取了多种策略。其中包括优化芯片设计和电源管理,改进散热技术,采用节能的制造工艺,以及引入新的架构和技术,如低功耗处理器、异构计算和功耗管理技术等。


存算一体方案可以分为三类:近存计算(Processing Near Memory),存内处理(Processing in Memory,PIM)和行内计算(Computing in Memory,CIM)。


近存计算是将存储单元和计算单元集成,增加访存带宽、减少数据搬移,提升整体计算效率。近存计算仍是存算分离架构,本质上计算操作由位于存储外部、独立的计算单元完成,其技术成熟度较高,主要包括存储上移、计算下移两种方式。(华为昇腾910系列芯片为冯诺依曼架构和达芬奇架构的组合,达芬奇架构的本质应为采用多级cache实现近存计算。)

  1. 存储上移(Memory Uplift):存储上移是指将计算操作或部分计算操作移到内存子系统中执行。传统上,计算主要在中央处理器(CPU)中完成,而内存主要用于数据存储。但通过存储上移,内存子系统可以提供一些计算功能,使其具备在处理数据时进行一些简单的计算能力。这样做的好处是可以减少数据从内存到CPU的数据传输量,从而降低数据传输延迟和功耗。
  2. 计算下移(Compute Offloading):计算下移是指将计算任务从主处理器(如CPU)下移到内存子系统中的专用计算单元或加速器中执行。通过计算下移,计算密集型任务可以在专用硬件加速器或内存中的计算单元中进行处理,从而释放主处理器的负担,提高计算效率和能效。计算下移可以采用定制的硬件加速器,如图形处理器(GPU)、向量处理器、FPGA(可编程逻辑门阵列)等,这些加速器专为特定类型的计算任务进行优化。

存内处理的关键点是将计算操作和数据紧密结合,以在存储器内部进行计算,而不需要将数据从存储器传输到计算单元。这种架构可以减少数据传输的需求,降低延迟,并提高计算效率和能效。存内处理的本质是将计算操作直接嵌入到存储器中,以在数据存储位置附近进行计算。


存内计算是真正的存算一体,在芯片设计过程不再区分存储和计算单元,真正实现存算融合。存内计算是计算新范式的研究热点,本质是利用不同存储介质的物理特性,对存储电路重新设计使其同时具备计算和存储能力,直接消除存算界限,在存储原位上实现计算。(后摩时代在2023.5.12发布的H30车载芯片应满足存算一体架构方案。)

本文转载于网络 如有侵权请联系删除

相关文章

  • Arm起诉高通及其子公司侵权,恐影响高通重返服务器芯片市场

    据外媒报导,日本软银集团旗下的处理器IP公司Arm于当地时间8月31日表示,该公司已经对移动处理器大厂高通(Qualcomm)与其子公司Nuvia发起诉讼,控告这两家公司侵犯Arm专利。报导指出,这次的诉讼集中在高通于2021年收购的芯片创业公司Nuvia。根据美国德拉瓦州地方法院的起诉书中指出,Nuvia在芯片设计中使用了Arm的专利设计,但是这些设计在未经许可的情况下不得转让给高通使用。Arm表示,在双方谈判未能达成解决方案后,Nuvia的Arm专利设计许可已经在2022年2月被终止。Arm在一份声明中表示,由于高通试图在未经Arm同意的情况下转让Arm对Nuvia专利权许可,而Nuvia的许可则已经在2022年3月被终止的情况下,Arm做出了多次真诚的努力沟通,以寻求解决方案。但是事件最终仍没有获得妥善的解决,因而提起本次的诉讼。高通和Arm是全球最具影响力的两家半导体芯片设计公司,其中高通是智能手机处理器和基带芯片的重要供应商之一。即便如此,高通仍与许多芯片产业的许多其他公司一样,持续依赖于Arm的处理器IP。而一直以来,Arm持续创造了许多CPU/GPU内核IP,提供给数千家

  • LeetCode 0384 - Shuffle an Array

    ShuffleanArrayDesicriptionShuffleasetofnumberswithoutduplicates.Example://Initanarraywithset1,2,and3. int[]nums={1,2,3}; Solutionsolution=newSolution(nums); //Shufflethearray[1,2,3]andreturnitsresult.Anypermutationof[1,2,3]mustequallylikelytobereturned. solution.shuffle(); //Resetsthearraybacktoitsoriginalconfiguration[1,2,3]. solution.reset(); //Returnstherandomshufflingofarray[1,2,3]. solution.shuffle();复制SolutionclassSolution{ private: std::vector<int>nums; public: Solution(std::vec

  • 教妹学 Java 第 42 讲:try-catch-finally

    “二哥,上一节你讲了异常处理机制,这一节讲什么呢?”三妹问。“该讲try-catch-finally了。”我说,“try关键字后面会跟一个大括号{},我们把一些可能发生异常的代码放到大括号里;try块后面一般会跟catch块,用来处理发生异常的情况;当然了,异常不一定会发生,为了保证发不发生异常都能执行一些代码,就会跟一个finally块。”“具体该怎么用呀,二哥?”三妹问。“别担心,三妹,我一一来说明下。”我说。try块的语法很简单:try{ //可能发生异常的代码 } 复制“注意啊,三妹,如果一些代码确定不会抛出异常,就尽量不要把它包裹在try块里,因为加了异常处理的代码执行起来要比没有加的花费更多的时间。”catch块的语法也很简单:try{ //可能发生异常的代码 }catch(exception(type)e(object))‏{ //异常处理代码 } 复制一个try块后面可以跟多个catch块,用来捕获不同类型的异常并做相应的处理,当try块中的某一行代码发生异常时,之后的代码就不再执行,而是会跳转到异常对应的catch块中执行。如果一个try块后面跟了多个与之关联的cat

  • 技术创作101训练营-CRC校验没那么难

    目录前言CRC算法简介CRC计算CRC校验CRC计算的C语言实现CRC计算工具总结前言最近的工作中,要实现对通信数据的CRC计算,所以花了两天的时间好好研究了一下,周末有时间整理了一下笔记。一个完整的数据帧通常由以下部分构成:2020-09-20_151837校验位是为了保证数据在传输过程中的完整性,采用一种指定的算法对原始数据进行计算,得出的一个校验值。接收方接收到数据时,采用同样的校验算法对原始数据进行计算,如果计算结果和接收到的校验值一致,说明数据校验正确,这一帧数据可以使用,如果不一致,说明传输过程中出现了差错,这一帧数据丢弃,请求重发。常用的校验算法有奇偶校验、校验和、CRC,还有LRC、BCC等不常用的校验算法。以串口通讯中的奇校验为例,如果数据中1的个数为奇数,则奇校验位0,否则为1。例如原始数据为:00010011,数据中1的个数(或各位相加)为3,所以奇校验位为0。这种校验方法很简单,但这种校验方法有很大的误码率。假设由于传输过程中的干扰,接收端接收到的数据是00100011,通过奇校验运算,得到奇校验位的值为0,虽然校验通过,但是数据已经发生了错误。2020-09-

  • 【命令执行】命令执行漏洞总结v1.0

    Hello各位小伙伴晚上好,这里是你们的小编~话说最近网络安全越来越火了,连电视剧也要来蹭一波热度。不知道里面的技巧大家都学会了吗今天要讲的内容是命令执行漏洞的基础知识,让我们一起来看看吧~ Part.1什么是命令执行漏洞?漏洞概述在Web程序中,因为业务功能需求要通过Web前端传递参数到后台服务器上执行。 但由于开发人员没有对输入进行严格的过滤,导致攻击者可以构造一些额外的“带有非法目的”命令,去欺骗后台服务器执行这些非法命令。在存在命令执行漏洞的情况下,如果Web应用使用的是root权限,则该漏洞可以导致攻击者在服务器上执行任意命令。以DVWA平台low安全等级为例,我们来看看这个漏洞的具体成因,漏洞页面如下:输入IP地址,点击Submit,就会执行ping命令:查看后端代码:首先通过php_uname('s')读取操作系统名,与'WindowsNT'对比,判断是不是Windows系统。 如果是windows系统,则通过shell_exec()函数执行ping命令。如果不是,则判断为Linux系统,执行ping-c4命令。(因为Linux系统

  • 从零开始单排学设计模式「装饰模式」黑铁 I

    阅读本文大概需要3.6分钟。本篇是设计模式系列的第四篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统。所以现在打算重写,加上距离现在也有一段时间了,也算是自己的一个回顾吧!学而时习之,不亦说乎。 目前段位:黑铁ILet'sGo!前言设计模式不是语法,是一种巧妙的写法,能把程序变的更加灵活。架构模式比设计模式大,架构模式是战略,而设计模式是战术。设计模式分为3大类型:创建型,行为型,结构型,总共有23种。装饰模式装饰模式(Decorator)指的是在不必改变类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。业务需求公司接到一个任务,需要为某平台开发一个搭配不同服饰的小项目,比如类似QQ、网络游戏或论坛都有的Avatar系统(为了简化代码,直接使用控制台模拟)。代码实现经过公司的慎重讨论(实际就几秒钟),开发这一个项目的重任,又当仁不让的被产品经理交给了我,我:脸上笑嘻嘻,心里MMP。

  • springboot+security整合3

      这篇讲解如何自定义鉴权过程,实现根据数据库查询出的url和method是否匹配当前请求的url和method来决定有没有权限。security鉴权过程如下: 一、重写metadataSource类编写MyGranteAuthority类,让权限包含url和method两个部分。publicclassMyGrantedAuthorityimplementsGrantedAuthority{ privateStringmethod; privateStringurl; publicMyGrantedAuthority(Stringmethod,Stringurl){ this.method=method; this.url=url; } @Override publicStringgetAuthority(){ returnurl; } publicStringgetMethod(){ returnmethod; } publicStringgetUrl(){ returnurl; } @Override publicbooleanequals(Objectobj){ if(

  • StreamingPro

    DeclarativeworkflowsforbuildingSparkStreamingSparkStreamingSparkStreamingisanextensionofthecoreSparkAPIthatenablesstreamprocessingfromavarietyofsources. Sparkisaextensibleandprogrammableframeworkformassivedistributedprocessingofdatasets, calledResilientDistributedDatasets(RDD).SparkStreamingreceivesinputdatastreamsanddividesthedataintobatches,whicharethenprocessedbytheSparkenginetogeneratetheresults. SparkStreamingdataisorganizedintoasequenceofDStreams, representedinternallyasasequenceofRDDs.Str

  • Caffe2现已并入PyTorch,图像处理的孩子有福了!

    近日,GitHub发布一则通知,深度学习框架Caffe现已将代码并入了PyTorch。Caffe(卷积神经网络框架),全称ConvolutionalArchitectureforFastFeatureEmbedding。是一种常用的深度学习框架,在视频、图像处理方面应用较多。Caffe2是开源Caffe框架的升级版,在组织运算方面具有更大的灵活性。图片源自知乎用户@王健飞此次Caffe2与PyTorch的合并也引得多方质疑,知乎上“如何看待Caffe2代码并入PyTorch?”的话题已有53358的浏览量。面对大家的评论,Caffe2的开发者贾扬清是这样回复的:以下是其他知乎er对于此事的看法:Caffe2与PyTorch的合并对于tensorflow将会是一个不小的冲击,但对于开发者而言,二者的合并会大大提高他们的开发效率。

  • 157. [USACO Nov07] 奶牛跨栏

    157.[USACONov07]奶牛跨栏★★  输入文件:hurdles.in  输出文件:hurdles.out简单对比 时间限制:1s  内存限制:128MB译byCmYkRgB123描述FarmerJohn想让她的奶牛准备郡级跳跃比赛,贝茜和她的伙伴们正在练习跨栏。她们很累,所以她们想消耗最少的能量来跨栏。显然,对于一头奶牛跳过几个矮栏是很容易的,但是高栏却很难。于是,奶牛们总是关心路径上最高的栏的高度。奶牛的训练场中有N(1≤N≤300)个站台,分别标记为1..N。所有站台之间有M(1≤M≤25,000)条单向路径,第i条路经是从站台Si开始,到站台Ei,其中最高的栏的高度为Hi(1≤Hi≤1,000,000)。无论如何跑,奶牛们都要跨栏。奶牛们有T(1≤T≤40,000)个训练任务要完成。第i个任务包含两个数字Ai和Bi(1≤Ai≤N;1≤Bi≤N),表示奶牛必须从站台Ai跑到站台Bi,可以路过别的站台。奶牛们想找一条路径从站台Ai到站台Bi,使路径上最高的栏的高度最小。你的任务就是写一个程序,计算出路径上最高的栏的高度的最小值。输入行1:两个整数N,M,T行2..M+1:行

  • linux(十)配置ssh免密登录实现

    知道ssh的朋友应该知道它是用来干什么的,如果你不知道什么是ssh远程登录的话,可以去看一下我的上一篇博客,关于linux的网络基础的知识。 备注:ssh是用于远端登入。执行ssh指令开启终端机阶段作业,并登入远端主机。一、ssh远程登录    今天要和大家说的是,当我们一台客户机要远程登录到服务器的时候,输入密码才能登录成功。过程流程图:  所以我们在想能不能我们不需要输入密码,直接使用ssh用户名@服务器ip就可以登录呢?二、ssh免密登录原理       看到这个图可能大家有一点蒙逼。我给大家解释一下。    我们在主机A和主机B中分别使用ssh-lkeygen命令,生成用来加密的公钥和私钥。然后我们把主机A的公钥放到主机B下面的.ssh/authorized_keys文件当中。    当我们下次使用ssh用户名@服务器ip登录的时候,主机B呢就使用:主机A的公钥+主机B的密码发送给主机A,然后主机A使用自己的私钥解密,得到主机B的密码,    这样就实现了ssh免密登录的功能。三、和ssh相关的远程拷贝命令scp3.1、命令说明    进行远程拷贝3.2、命令语法    scp

  • Mobile First! Wijmo 5 之 架构

    本文就开发者关心的话题之一架构,展开叙述。Wijmo5是一组JavaScript控件,但是不要与Widgets混淆。在此前开发Wijmo的时候,我们能够用像jQueryUI和jQueryMobileWidget框架来构建它,同时也为我们构建Web框架--Wijmo节省了时间。但是,当我们希望构建一个更现代的Wijmo5,我们认为现在是时候重新审视JavaScriptUI组件,尤其是语法和API接口。在做了大量的研究和讨论后,我们使用了“真正的JavaScript控件(trueJavaScriptControls)”,如你在.NET中使用类似的属性,方法和事件等API,同样的在JavaScriptUI组件的使用方法几乎完全相同。同时,我们选择IE9作为Wijmo5浏览器支持的基准版本,因为IE9支持ECMAScript5语法,而这点对我们的Wijmo5架构非常关键,由此创造了新的Wijmo5架构。ECMAScript5Controls我们的Wijmo5框架直接采用了ECMAScript5。我们的源码使用TypeScript,这使得开发非常容易。如,使用它创建了控件基类(BaseContr

  • 记一次内存变更引起的NFS故障

    最近由于一些原因,做服务器资源调整,其中一台服务器是做NFS服务,通过NFS挂载到其他几台服务器做共享,服务器内存从8G调整到了4G,其他不变 降配完成后,重启服务器,看着一切正常,就没管了第二天DBA和我说数据备份没写入,登录服务器查看,df-H命令卡住,凭经验,NFS挂了登录NFS服务器,查看NFS服务正常,查看message日志,发现大量关于RPC的日志日志报错,分片太大为什么之前是好的,降内存后,就出现分片太大,无法处理的情况?通过查找NFS源码,发现如下一段:/* *TochangethemaximumrsizeandwsizesupportedbytheNFSclient,adjust *NFS_MAX_FILE_IO_SIZE.64KBisatypicalmaximum,butsomeserverscan *supportamegabyteormore.Thedefaultisleftat4096bytes,whichis *reasonableforNFSoverUDP. */ #defineNFS_MAX_FILE_IO_SIZE(1048576U) #define

  • 蓝桥杯练习(基础十二)十六进制转八进制

    试题基础练习十六进制转八进制 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述   给定n个十六进制正整数,输出它们对应的八进制数。 输入格式   输入的第一行为一个正整数n(1<=n<=10)。   接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 输出格式   输出n行,每行为输入对应的八进制正整数。   【注意】   输入的十六进制数不会有前导0,比如012A。   输出的八进制数也不能有前导0。 样例输入   2   39   123ABC 样例输出   71   4435274   【提示】   先将十六进制数转换成某进制数,再由某进制数转换成八进制。   代码+总结:   自己想着c++中的cin和cout可以控制输入输出的数的进制,所以就想偷懒直接十六进制输入,八进制输出。啊哈哈哈,太简单了(提交后瞬间被打脸),提交之后我才发现这个题没这么简单.因为测试数据特别大,就算用longlong也过不了。所以只能采用字符串处理的方式来解决

  • 非技术人员也能看懂云计算,大数据,人工智能

      我今天要讲这三个话题,一个是云计算,一个大数据,一个人工智能,我为什么要讲这三个东西呢?因为这三个东西现在非常非常的火,它们之间好像互相有关系,一般谈云计算的时候也会提到大数据,谈人工智能的时候也会提大数据,谈人工智能的时候也会提云计算。所以说感觉他们又相辅相成不可分割,如果是非技术的人员来讲可能比较难理解说这三个之间的相互关系,所以有必要解释一下。 一、云计算最初是实现资源管理的灵活性   我们首先来说云计算,云计算最初的目标是对资源的管理,管理的主要是计算资源,网络资源,存储资源三个方面。 1.1管数据中心就像配电脑   什么叫计算,网络,存储资源呢?就说你要买台笔记本电脑吧,你是不是要关心这台电脑什么样的CPU啊?多大的内存啊?这两个我们称为计算资源。   这台电脑要能上网吧,需要有个网口可以插网线,或者有无线网卡可以连接我们家的路由器,您家也需要到运营商比如联通,移动,电信开通一个网络,比如100M的带宽,然后会有师傅弄一根网线到您家来,师傅可能会帮您将您的路由器和他们公司的网络连接配置好,这样您家的所有的电脑,手机,平板就都可以通过您的路由器上网了。这就是网络。   您

  • [转]python-元类

    转载于:刘羽冲 两句话掌握python最难知识点——元类 千万不要被所谓“元类是99%的python程序员不会用到的特性”这类的说辞吓住。因为每个中国人,都是天生的元类使用者 学懂元类,你只需要知道两句话: 道生一,一生二,二生三,三生万物 我是谁?我从哪来里?我要到哪里去? 在python世界,拥有一个永恒的道,那就是“type”,请记在脑海中,type就是道。如此广袤无垠的python生态圈,都是由type产生出来的。 道生一,一生二,二生三,三生万物。 道 即是type 一 即是metaclass(元类,或者叫类生成器) 二 即是class(类,或者叫实例生成器) 三 即是instance(实例) 万物 即是实例的各种属性与方法,我们平常使用python时,调用的就是它们。 道和一,是我们今天讨论的命题,而二、三、和万物,则是我们常常使用的类、实例、属性和方法,用helloworld来举例: #创建一个Hello类,拥有属性say_hello----二的起源 classHello(): defsay_hello(self

  • linux下如何破解myeclipse

    这是我分享的两个下载,一个myeclipe一个是激活补丁!这个在其他地方都行的(链接:http://pan.baidu.com/s/1jGG9cTC密码:fi8a)这个比较扯淡,虽说激活补丁上告诉你,可以在windows、linux和mac上都可以用,但是当你真的在linux上激活是你发现run.bat就是个没有用的东西,点击根本没有反映。但可惜的只能告诉你bat文件是针对DOS的。好了不扯淡了。还有个条件就是你必须安装好你的jdk和myeclipse。(提示如果你解压的有乱码建议重命名)。准备好之后就可一打开你的终端,先用一下javac或java测试一下你是否安装好jdk,如果都安装好了。好了,你可以用cd命令进入你解压的激活补丁中目录中[root@lzw Myeclipse10.6pojie]#lscracker.jar        jniwrap.dll     libjniwrap.jnilib publicKey.bytesh

  • MySQL知识点整理

    一、存储引擎 MySQL常见的两种存储引擎:MyISAM与InnoDB 区别点: 1.MyISAM是MySQL的默认数据库引擎(5.5版之前),5.5版本后默认的存储引擎为InnoDB。 2.InnoDB支持事务,MyISAM不支持,InnoDB每一条SQL语言都默认封装成事务,自动提交,会影响速度,所以最好把多条SQL语言放在begin和commit之间组成一个事务。 3.InnoDB支持外键,MyISAM不支持,包含外键的InnoDB表转为MYISAM会失败。 4.MyISAM是非聚集索引,使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。 文件组成:*.frm是描述了表的结构,*.MYD保存了表的数据记录,*.MYI则是表的索引 InnoDB是聚集索引,使用B+Tree作为索引结构,索引文件和数据文件是在一起的。必须要有主键(如果设置了主键,那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则会选择第一个不包含有NULL值的唯一索引作为主键索引,如果也没有,则会选择内置6字节长的ROWID作为隐含的聚集索引

  • SqlServer-数据旋转-知其然也指其所以然

      在日常开发中,尤其是数据统计制作报表的时候,我们经常需要一种把行转换成列的技术,用于展示我们的统计结果,也许有人会说,我不能在设计表结构的时候就按照我想展示的结构进行设计么?虽然这也是一种办法,但日常的统计都是随着业务不断的运行,而逐步积累的动态数据,这时新的数据就会平凡导致表结构的修改。   例如:我们现在有一个需求,在数据库中存储每个人的名字、所掌握的专业技能与每项技能的熟练度,并且我想以一种简单的统计方式,看每个人的每项技能的熟练度,统计结果的要求如下:       那么我们应该如何考虑设计数据库中的表结构?当然你可以就按照上面输出的结果格式设计表结构,但这种结构在后期随着业务的变化会过度愈来愈数据定义语言(DDL),试想一下后面再来一位赵六,并且赵六以上技能都会的同时还会Flink,我们势必要面对对表结构的修改,这将是我们的编程非常痛苦,所以我们通常会选择设计一张包含:姓名,专业与熟练度着三个列的表结构来存储基本信息,这样我们以后只需要对表中的数据进行增删改的操作即可满足要求,当然这在统计的时

  • [CentOS_7.4]Linux编译安装mono环境

    一安装mono 安装过程:下载mono安装源,配置,编译,安装,设置环境变量。 #wgethttp://download.mono-project.com/sources/mono/mono-5.4.0.201.tar.bz2 #tar-jxvfmono-5.4.0.201.tar.bz2 #cdmono-5.4.0.201 #./configure--prefix=/usr/local/mono #make&&makeinstall #vi/etc/profile 在最后添加环境变量: PATH=$PATH:/usr/local/mono/bin exportPATH 保存并退出 #source/etc/profile设置生效 #echo$PATH输出环境变量PATH的值,验证添加的变量是否生效 #mono-V查看mono版本 复制   说明:--prefix=/usr/local/mono是设置mono安装的目录,因此PATH添加的就是该安装目录下的bin目录路径。   二测试 #vihello.cs usingSystem; usingSyst

  • 基于色彩调和的专题图自动生成系统

      作品介绍文档 一、   作品背景 专题地图是指突出而尽可能完善、详尽地表示制图区内的一种或几种自然或社会经济(人文)要素的地图。专题地图的制图领域宽广,凡具有空间属性的信息数据都可用其来表示。其内容、形式多种多样,能够广泛应用于国民经济建设、教学和科学研究、国防建设等行业部门,因此,制作专题图也就显得非常重要。与此同时,我们现在可以利用一些优秀的专业GIS软件或图像处理软件来帮助我们制作专题地图,由此我们可以由过去的手工绘图变为计算机数字制图,从而节省大量时间。但在用这些软件制作专题图的过程中,我们依然可以清晰的感受到诸多不便:制图时间缩短但地图质量无法保证、专题图制作依然需要花费人们大量精力,于是我们便决定开发一个“基于色彩调和的专题地图制图系统”来解决这个问题,帮助我们在最短的时间内做出效果最好的专题图。 二、   功能介绍 1.    制作专题图 系统通过调用三大模块:颜色管理器、图元管理器、报表管理器完成专题图主体部分的制作,最后调用内容整饰器添加图名、比

相关推荐

推荐阅读