科学网

 找回密码
  注册

tag 标签: 硬件

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

软件硬件化和硬件软件化
热度 10 lvnaiji 2012-5-24 08:35
吕乃基 软件硬件化和硬件软件化,是 IT 行业发展的路径之一。 软件硬件化,即将一些软件实现的功能集成到硬件电路中去。众所周知,直接实现的硬件电路的运行速率要大于软件控制的运行速率,因而,软件硬件化能够大大提升系统的运行速率,这样可以为绞尽脑汁设计高效算法的人提供另外一种提升系统效率的途径。举个很简单的例子,实现两个符号的异或运算,可以通过软件比较两个符号的值,再经过 if 控制语句输出运算结果,也可以直接利用硬件电路实现逻辑异或,而且后者的效率要高于前者,这就是软件硬件化的一个很简单的实例。 硬件软件化,就是指将硬件的功能由软件去实现,屏蔽掉一些复杂的硬件设计过程。在计算机演进的过程中,硬件软件化是非常有意义的,因为硬件的设计是复杂的,而要想提高硬件的性能,如果仅在硬件层次考虑,要求很严格,实现也较为困难。相反,如果在硬件层之上,就会容易许多。大多数情况下,硬件是由软件来控制的,因此,对一些设计较为简单的硬件电路,可以通过效率较高的软件对其进行控制,也能实现较为复杂的功能,这在系统设计上是具有很高的效率的事 . 在 OSI 七层模型中,物理层实现具体的比特传输,需要定义硬件设备标准,一些硬件功能也基本在这里实现。上面的六层则是如何控制比特传输,以实现传输的高效性和可靠性,目前来看,控制的方式主要是通过软件来实现的。事实上,在数据链路层和网络层较强地体现了软硬件之间的融合。数据链路层工作设备是交换机,网络层的主要设备是路由器,在这两台硬件设备上,都需要加载软件(比如成帧、路由算法等),以实现对传输的控制。如果只使用硬件电路,需要设计得很复杂,而且不一定能很好地实现控制功能,同时会带来巨大的功耗;如果只是用软件,程序也会变得很复杂,而且某些接口的功能可能无法实现,运行的效率也会比较低,这对某些具有实时要求的应用是很致命的。这个实例是对软硬件相互配合、协同工作的较好印证。 软件在计算机系统中可以算是主体,其通过一定的算法控制硬件、支配硬件,使得硬件能够较好的工作,以实现一定的功能,比如在计算机网络七层模型中实现数据传输的功能。为了实现这些功能,需要主客体之间相互配合、协同工作,以实现效率的最大化。 (由某年某次课若干学生的作业汇编) 还可以从不同的角度来理解 IT 中的软件硬件化和硬件软件化。博主于 IT 是标准的菜鸟,日后或许会就此说上几句,此刻是想将软件、硬件及二者的关系比附社会。 在社会中,相对刚性,也就是普遍适用和前后一致的法律条文和体系,在形式上属于非嵌入编码知识(请见 非嵌入编码知识的特征 , 什么是非嵌入编码知识 ),是社会管理中的硬件;柔性,如传统的伦理道德,现代的思想工作,在相当程度上因人因事而异,属于意会知识和嵌入的编码知识。硬件作为社会的底线,必不可少。没有底线的民族将万劫不复。但硬件不可能事无巨细面面俱到,在多变和细节处,需要软件的协调配合。刚柔相济,是社会管理的要义。 原有的法律条文若是不适应社会发展,如收容法、金融法,有必要突破,也就是硬件软件化,重新修订。社会中出现的新问题,若是频繁发生,以伦理道德和思想工作难求一律和难以服众,如 PM2.5 ,有必要形成相对固化的法律条文,这就是软件硬件化。 当下中国的情况是,硬件不足,软件有余。即使已经存在的硬件,也是习惯于打开来软件化。君不见高院提倡“庭外解决”,以及比比皆是的“下不为例”和“个案处理”。违规违法之事比比皆是,或是轻描淡写,或皆“临时工”的“临时”所为。 这样的情况,放在 IT 中,结果是: 如果只是用软件,程序会变得很复杂,而且某些接口的功能可能无法实现,运行的效率也会比较低,这对某些具有实时要求的应用是很致命的。
个人分类: 简介及学术方向|19884 次阅读|36 个评论
为什么官员们喜欢搞一些硬件建设的政绩工程?
热度 7 cutefay 2012-5-14 20:19
现在各地的官员们都喜欢搞一些硬件建设的政绩工程,并且是耗资越大规模越大的就越好,而对于软件建设,例如改善民生、城市管理的相关建设,虽然也会重视,但没硬件建设那么热衷。 我想,这是因为,如果是改善民生等软件建设,能够记住你的往往只有当时当地的受惠的老百姓;而如果是硬件的工程,还可以在全国乃至世界留名,并且还可能名留青史,未来的人也会记得。而这个也是得到历史验证的,中国历史上,能够被我们记住的伟大的人物,很多都是要么劳民伤财地建设了一些大工程的,例如秦始皇建长城和兵马俑等、武则天建大佛等;要么是通过劳民伤财的战争开拓疆土或保家卫国的,例如汉武帝、成吉思汗等。而对于其他一些能够被我们记得住的人物,例如唐太宗、康雍乾等,他们的政绩往往更多被歌颂的是使国力强盛,而不是老百姓安居乐业。 由此可见,让百姓过上幸福的生活,在历朝历代都不是很重视的,统治者更关心的是国家或者是说统治者自己的利益而不是老百姓的利益。
个人分类: 时事*评论|3904 次阅读|11 个评论
未来战争不仅硬件,还有软件
热度 4 outcrop 2012-2-27 23:54
《 未来战争会是机器人的战争吗? 》一文提到DARPA打算搞战场机器人,软件的重要性自不必说了。 但战场机器人,还是未装备的未来玩意。 实际上,在F-22、F-35等战斗机上,有大量的软件代码在运行,比如F-35战斗机的软件规模据说已经达到1800万行,这个量应该还会继续增加。 一个有意思的故事是,F-35战斗机软件的编程语言从原来的飞机软件常用语言Ada,转换为C++语言,原因之一是年轻人对不怎么感兴趣Ada了;当然,主要原因可能是Ada对新硬件的支持不足,C++面向对象编程更方便。 洛克希德·马丁公司还专门制定了一套严格的编程标准,所谓 JSF++ 。 因此,在可以预见的未来战争中,拼的不仅仅飞机坦克大炮的硬件……如果没有核威慑,很难想象中国现在的处境。 延伸阅读: 战斗机软件的编码规则 未来战争会是机器人的战争吗? =============================关于博主============================= 博主的主要兴趣是:知识管理;相关兴趣有:语义网、机电及DIY、哲学与心理、信息安全、科幻等。 我的常用博客在科学网 (访问可点链接,下同); 新浪微博是@outcrop ,欢迎互粉;建了一个超级QQ群:115359850,希望能闲聊无白丁,欢迎加入;自己打理着一个 机电工程师 小网站,欢迎来玩。无宗教信仰,提倡动物保护。最近在科学网关注“ 科学网大学 ”,欢迎加入 科学网大学群组 讨论、尝试。
个人分类: 计算机应用技术|3837 次阅读|12 个评论
2011-05Hi3515硬件设计用户指南
lcj2212916 2012-1-15 12:31
共41页。 http://radarew.5d6d.com/thread-560-1-1.html
2364 次阅读|0 个评论
[转载]第11讲 ubuntu+硬件配置与管理
dingpengwang 2012-1-13 11:57
  1. 开启Update Manager(升级管理器)   安装了最新版 的Ubuntu系统并不代表你就不需要任何升级和补丁了。首先你要确保你的升级管理器是启动状态(如果还没启动的话),这样能让你随时获得最新修复和功能 升级。   2. 享受3D显卡设备带来的乐趣   如果你想使用像Compiz(3D界面,晃动窗口)之类的高 级桌面效果的话,你需要在你的显卡上启动“正式版(official)”设备。   Ubuntu会自动检测并提示你的3D设备是否可用。如 果可用,则会在顶部面板上出现一个“电路板”图标,然后你就可以点击该图片,按提示操作。   如果Ubuntu硬件检测失败(请耐心点,硬 件检测过程不是瞬间完成的)的话,你可以手动启动系统参数配置下的“硬件配置管理工具”。   3. 启动Ubuntu One文件同步功能   Ubuntu One为所有的Ubuntu用户提供了一个2GB的免费在线存储空间,用来备份或者同步重要文件。例如Firefox的书签、Tomboy的记录以及 Evolution与电脑间的连接等所以你希望同步的文件和文件夹。   启动Ubuntu One步骤:点击应用网络Ubuntu One   4. 安装Ubuntu Tweak 让你生活更轻松    Ubuntu Tweak是一个集安装管理其他应用软件功能于一身的一站式商店,它类似于Windows的右下方的控制版,可以选择想要的图标到桌面上),通过 Ubuntu Tweak能够通过系统内置清理选项,让你的电脑保持流畅的状态。 ▲Ubuntu Tweak下载    5. 到软件中心寻找好软件   正所谓众口难调,所以如果你想要安装VLC、photoshop取代GIMP,或者还想玩很棒的游 戏的话,就一定要到软件中心去看看。在你的应用菜单下可以启动。 ▲   只需单击就可以安装你想要的软件。还不快去浏览一番,当然记得确定你选的软件够新够酷!    6. 整合你的浏览器   Ubuntu默认配置下的大多数浏览器都不怎么好用,所以赶紧升级整改下吧,为你的浏览器申请一个合适的 外观主题 ▲Ubuntu 10.10 Ambiance Radiance themes for Chrome, Firefox Opera   7. 安装一些indicators小工具    Ubuntu的Indicator-Applet项目是一个旨在维护各面板应用程序行为一致的工具,该项目很不错。 ▲   实际上,目前该项目已经具备了很多不错的小应用程序可以使用,比如,截屏工具、系统负载监视工具、工 作空间转换器以及USB卸载器等。   8. 添加Gmail、Thunderbird、谷歌语音邮箱等通信软件    把Gmail、雷鸟(Thunderbird)、谷歌语音邮箱(Google Voice)等加装到通讯软件菜单下。 ▲ Gmail Thunderbird Zimbra   9.安装Nautilus-Elementary    Ubuntu默认的文件浏览器Nautilus,但是这个浏览器不太好使。在你的系统上安装简洁美观的Nautilus-Elementary是个不错 的选择。更棒的是,这个简洁的替代品还包括许多标准Nautilus所不具备的功能,例如文件预览、工具栏编辑器、内置终端、可隐藏“主菜单”及缩放滑块 等。   你能通过官方版本的PPA(个人包裹档,Personal Package Archive)来更新你的Nautilus。安装这个更新可以让你自动更新到最新版本。在终端中(应用附件终端)输入以下命令即可加载 该更新:   sudo add-apt-repository ppa:am-monkeyd/nautilus-elementary-ppa   sudo apt-get update sudo apt-get dist-upgrade   10.尽情享用吧!    最后,让我们结束这些陈词滥调的建议,花点儿时间尽情享用吧!把花一个多小时找软件配置安装什么的都抛开。像大多数普通人那样使用你的Ubuntu:用 Firefox上Facebook,用Empathy跟伙伴聊天,用Open Office开封信,用Rhythmbox听听音乐。    Ubuntu10.10是10.04之后的一个了不起的升级版本,所以多花些时间沉浸在它带来的美妙感受中吧。   附注!    对了,还有——为什么不订阅OMG/Ubuntu呢?!你会找到最新的更新、很酷的应用、小建议、tweaks、漂亮的主题和壁纸、善意的建议和冷笑 话。来吧,你知道你要的就是这个。 原文地址 http://os.chinaunix.net/a2010/1012/1112/000001112799.shtml
7 次阅读|0 个评论
[转载]SIMULINK s-function的设计2
willzhang198 2011-12-7 17:25
s函数是system Function的简称,用它来写自己的simulink模块。(够简单吧,^_^,详细的概念介绍大伙看帮助吧)可以用matlab、C、C++、Fortran、Ada等语言来写,这儿我只介绍怎样用matlab语言来写吧(主要是它比较简单) 先讲讲为什么要用s函数,我觉得用s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API等的 先介绍一下simulink的仿真过程(以便理解s函数),simulink的仿真有两个阶段:一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行,直至结束。 在matlab的workspace里打edit sfuntmpl(这是matlab自己提供的s函数模板),我们看它来具体分析s函数的结构。 它的第一行是这样的:function =sfuntmpl(t,x,u,flag) 先讲输入与输出变量的含义:t是采样时间,x是状态变量,u是输入(是做成simulink模块的输入),flag是仿真过程中的状态标志(以它来判断当前是初始化还是运行等);sys输出根据flag的不同而不同(下面将结合flag来讲sys的含义),x0是状态变量的初始值,str是保留参数(mathworks公司还没想好该怎么用它,嘻嘻,一般在初始化中将它置空就可以了,str= =mdlInitializeSizes; flag=0表示处于初始化状态,此时用函数mdlInitializeSizes进行初始化,此函数在 sfuntmpl.m的149行 我们找到他,在初始化状态下,sys是一个结构体,用它来设置模块的一些参数,各个参数详细说明如下 size = simsizes;%用于设置模块参数的结构体用simsizes来生成 sizes.NumContStates = 0;%模块连续状态变量的个数 sizes.NumDiscStates = 0;%模块离散状态变量的个数 sizes.NumOutputs = 0;%模块输出变量的个数 sizes.NumInputs = 0;%模块输入变量的个数 sizes.DirFeedthrough = 1;%模块是否存在直接贯通(直接贯通我的理解是输入能 %直接控制输出) sizes.NumSampleTimes = 1;%模块的采样时间个数,至少是一个 sys = simsizes(sizes); %设置完后赋给sys输出 举个例子,考虑如下模型: dx/dt=fc(t,x,u) 也可以用连续状态方程描述:dx/dt=A*x+B*u x(k+1)=fd(t,x,u) 也可以用离散状态方程描述:x(k+1)=H*x(k)+G*u(k) y=fo(t,x,u) 也可以用输出状态方程描述:y=C*x+D*u 设上述模型连续状态变量、离散状态变量、输入变量、输出变量均为1个,我们就只需改上面那一段代码为: (一般连续状态与离散状态不会一块用,我这儿是为了方便说明) sizes.NumContStates=1;sizes.NumDiscStates=1;sizes.NumOutputs=1;sizes.NumInpu ts=1; 其他的可以不变。继续在mdlInitializeSizes函数中往下看: x0 = (离散和连续的状态变量我们都设它初值为0) str = 就可以了,反正没什么用,可 %能7.0会给它一些意义 ts = ; %采样周期设为0表示是连续系统,如果是离散系统在下面的mdlGet %TimeOfNextVarHit函数中具体介绍 嘻嘻,总算讲完了初始化,后面的应该快了 在sfuntmpl的106行继续往下看: case 1, sys=mdlDerivatives(t,x,u); flag=1表示此时要计算连续状态的微分,即上面提到的dx/dt=fc(t,x,u)中的dx/dt,找到 mdlDerivatives函数(在193行)如果设置连续状态变量个数为0,此处只需sys= ;表示没有离散状态,我们这而可以改成 sys=fd(t,x(2),u)或sys=H*x(2)+G*u;%sys即为x(k+1) 看来后面几个一两句话就可了,呵呵,在sfuntmpl的118行 case 3, sys=mdlOutputs(t,x,u); flag=3表示此时要计算输出,即y=fo(t,x,u),找到mdlOutputs函数(在218行),如上,如果sys= ;这个函数主要用于变步长的设置,具体实现大家可以用edit vsfunc看vsfunc.m这个例子 最后一个,在sfuntmpl的130行 case 9, sys=mdlTerminate(t,x,u); flag=9表示此时系统要结束,一般来说写上在mdlTerminate函数中写上sys= = sfungain(t,x,u,flag,gain) switch flag, case 0, sizes = simsizes; sizes.NumContStates = 0; sizes.NumDiscStates = 0; sizes.NumOutputs = 1; sizes.NumInputs = 1; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; sys = simsizes(sizes); x0= ; ts= ; case 3, sys=gain*u; case {1,2,4,9}, sys = []; end 做好了s函数后,simulink--user-defined function下拖一个S-Function到你的模型,就可以用了 在simulink----user-defined function还有个s-Function Builder,他可以生成用c语 言写的s函数 在matlab的workspace下打sfundemos,可以看到很多演示s函数的程序
2550 次阅读|0 个评论
查看硬件信息
liujd 2011-12-5 21:04
1,查看硬件型号 dmidecode | grep "Product Name" 2,查看linux系统内核版本 cat /proc/version 3,查看cpu的信息 cat /proc/cpuinfo | grep name 4,查看内存信息 free -m 5,查看内存信息 df -h 6,查看网卡信息 dmesg | grep -i 'eth' 7,查看显卡 dmesg | grep -i 'VGA' 8,查看操作系统 uname -a 9,查看主板信息 cat /proc/pci
个人分类: linux|1494 次阅读|0 个评论
[转载]院士评选
dongzg101 2011-11-29 20:59
两年一度的院士遴选又开始公示。享有国际盛誉的神经学科学家、北大生命科学院院长饶毅第一轮出局,可以说是在他本人意料之中,却出乎所有人的意料之外。在可惜之余,饶毅落选的原因成了大家的茶余谈资:是他素日特立独行、成了媒体圈里的“大嘴巴”得罪了太多人?还是硬件条件根本不满足评选资格?抑或是盛传的“院士制度”的不公和透明度不够让公众有了猜想的空间? 【网友评论】 http://edu.ifeng.com/news/special/raoyi/
1336 次阅读|0 个评论
小孩做的实现:软件就是硬件
热度 3 罗岚 2011-9-6 15:58
在前两年国际上有一篇文章:软件就是硬件。当时不置可否,最近,14岁的小孩教育了我,这是正命题。 以前的电脑:ACER ,大屏幕,为了看下载的电影,稍显粗旷了一些。用了没多久,触摸鼠标失灵了,拎着这个本子外出就必须带上鼠标。上网查了查,这款确实散热性能不完美,触摸板娇气。但是购买时,商家送了个散热支架,非常漂亮,也就把送修和换货的想法收了。前一阵,又购了一稍微小巧的 三星 本,ACER 就顺手送给了小孩。 暑假里,小孩游戏加看动画片,在网络上的时间太久,有些反对。因此,抽空悄悄查了查他的电脑,吃惊的是:小孩恢复了失灵的触摸鼠标。提起这件事,小孩很淡定,既然明确电脑归他了,当然尽心尽力把各类问题处理好:我只看到了清洁硬件的一面;软件问题,可是花销了他一整天的时间,从网上重新下了个驱动,待到软件清洁完成,认认真真安装了上去。功夫不负有心人!本来想狠狠表扬一下,后来改为,你每天八个小时网络时间,我不再反对、干涉了! 大人想问题看表面,没有想到其他的方法去跳出条条框框:只要找到正确的驱动路线和方法,软件确实就是硬件!
2801 次阅读|6 个评论
中美科技的差异软件?硬件?文化?
热度 1 dongzg101 2011-8-26 04:37
上回在清华听讲座,有一个美国人,结果中国的学生都没有几个提问,从美国留学回来的老师还问了几个问题。那个美国人问了几十个问题。看来这就是差距。不由得让我想起以前读硕士的时候,那时候导师要一些菌种,问了国内的做相关实验的,没有。问美国人要,寄来一大堆!还说,有需要就发邮件。
2031 次阅读|8 个评论
硬件工程师必杀技
lcj2212916 2011-6-16 20:51
http://radarew.5d6d.com/thread-332-1-1.html
2428 次阅读|0 个评论
seminar 5 宋英森09硕士
热度 1 gaobaozhong 2011-6-1 10:33
宋英森报告内容: 移动P2P组节点的选择 移动P2P网络特点及问题描述 (1)拓扑结构变化频繁 (2)节点性能的有限性 (3)网络带宽的有限性 (4)网络“孤岛”问题 (5)网络安全性问题 GAA ( greedy approximation algorithm) MIS (maximal independent set) BPTS ( Based on physical topology structure) SSABC( super peer selection algorithm based on capacity) RASS ( Reputation-Aware Super Node Selection) 信誉感知的超级节点选择算法:每个节点赋予一个信誉值,用于表示该节点提供服务的质量.服务的质量不仅包括了节点机器的硬件性能,还包括节点提供服务的可靠性.不可靠的节点即使它的性能很好,也不能作为超级节点。 每个节点具有一个信誉值R,表示提供资源的质量,三个方面(完整性、真实性、可靠性) 节点B对节点A评分为: ScoreAB =α × ScoreXAB +β × ScoreYAB +γ × ScoreZAB (评分比率分别为:α、β、γ,且α +β +γ =1,α <β <γ) (ScoreXAB 、 ScoreYAB 、 ScoreZAB , ScoreAB [0,1]) RASS ( Reputation-Aware Super Node Selection) RASS ( Reputation-Aware Super Node Selection) OGNS( Optimal Group Node Selection algorithm ) 1 无线区域的划分 2 区域节点信誉度 3 区域节点硬件性能(CPU,POWER,MEMORY,BANDWIDTH) 4 区域节点稳定度 OGNS( Optimal Group Node Selection algorithm ) 1 无线区域的划分 根据每个组网形式(WLAN(AP),蜂窝网络(基站),蓝牙网络等) OGNS( Optimal Group Node Selection algorithm ) 2 区域节点信誉度 OGNS( Optimal Group Node Selection algorithm ) 3 区域节点硬件性能 OGNS( Optimal Group Node Selection algorithm ) 4 区域节点稳定度 OGNS( Optimal Group Node Selection algorithm ) 参考文献 1 SSABC: a super􀀁peer selection algorithm based on capacity 2 基于半分布式P2P系统超级节点的选取机制 3 一种基于聚集超级节点的P2P 网络信任模型 4 P2P系统中基于信誉感知的超级节点选择算法研究 5 Mobile Peer-to-Peer systems using Super Peers for Mobile Environments 6 TRABPT: 一种移动P2P 网络可信路由选择算法 7 移动P2P网络中超级节点的选择 姜浩然09硕士 总结: 听取了宋应森同学关于超级节点选择算法的总结后,我对超级节点的选择算法有了一些新的认识,总结来看,超级节点选择算法主要从以下几个方面考虑: 1. 节点的硬件特性:这点主要是指节点的自身性能,包括 CPU 、内存、存储空间等等。将节点硬件性能考虑进去是很好理解的,只有性能优异的节点才有足够的能力胜任超级节点的一些工作。这与我的研究方向网格副本也有一定的相似性。 2. 节点的服务性能:这点主要是指节点的在线时间及信任度等等。由于 P2P 网络具有高度动态的特点,因此超级节点最好是能长期在线,并且服务相对稳定的节点。在这中算法中,节点信任机制是研究的一个热点。 3. 网络拓扑结构:这种选择超级节点的算法考虑的主要是选择连接度数多的节点作为超级节点,尽管这样做从直观上来看能够使网络划分成最少个子域,但是超级节点的性能和网络稳定性都无法保证。 我认为,超级节点的选择算法并不是一个新的研究方向,研究移动 P2P 环境下超级节点的选择算法需要考虑更多与普通 P2P 环境不同的因素,可以借鉴普通 P2P 中的一些方法。另外,超级节点选择算法归根结底是属于一个选优的过程,因此可以使用一些智能算法如蚁群算法、遗传算法和模拟退火算法等等。
个人分类: seminar|1496 次阅读|0 个评论
[转载]R的内存管理和垃圾清理
yyby 2011-5-17 19:05
R的内存管理和垃圾清理 原文: http://www.lijian001.com/r/blog_comment.asp?article_id=214   写R程序的人,相信都会遇到过“cannot allocate vector of size”或者“无法分配大小为...的矢量”这样的错误。原因很简单,基本都是产生一个大矩阵等对象时发生的,最干脆的解决办法有两种,第一种是加大内存换64位系统,第二种是改变算法避免如此大的对象。第一种办法,是最好的办法,不过大对象的需求是没有止尽的,终究不是长久之道。第二种办法是最好的思路,无论多么大的对象都是可以弄小的,无非就是分而治之、时间换空间等,对算法的研究也是没有止尽的。   升级硬件和改进算法是解决内存问题的永恒的办法,超出了本文想要表述的范围。在这里,只是简单谈谈R语言的内存管理和垃圾清理机制,只有对这些有所了解,才能对任何问题都能找到针对性的解决办法。   相信所有人在遇到无法分配矢量这一问题后,都能很快地找到改变“--max-mem-size”(假设都是在Windows下)或者“memory.limit”的方法,的确,这是最直接的方法。因为出现新对象无法分配内存的直接原因就是内存不够,R获取内存的方式和其他应用程序一样,都是向操作系统要内存,如果无法获取连续的某个大小的内存空间,就会出现无法分配内存的错误。由于大家使用R时通常都是自动安装自动运行,操作系统愿意分配给R多少内存都是采用的默认设置,在R中使用命令memory.size(NA)或者memory.limit()可以看到当前设置下操作系统能分配给R的最大内存是多少。同时可以使用memory.size(F)查看当前R已使用的内存,memory.size(T)查看已分配的内存(注意刚开始时已使用内存和已分配内存是同步增加的,但是随着R中的垃圾被清理,已使用内存会减少,而已分配给R的内存一般不会改变。)。如果memory.limit()得到的数是一个很小的内存,说明操作系统太小气了,留那么多内存给别的程序用不给R。解决办法很简单,就是打开R时不通过双击图标,而是在“运行”中输入“Rgui --max-mem-size 2Gb”(假设要分配2G内存且在环境变量中正确设置了R的安装文件夹),在运行memory.limit()就会发现内存加大了,其实更简单的方法是直接在R中运行memory.limit(2000),效果一模一样,而且不用重启R。   可惜大多数情况下改变这个值也不会有效果,因为这个值已经足够大,那么无法分配内存的原因不是操作系统小气对R不公,而是它确实拿不出来,谁找它要也拿不出来。这个时候就需要了解R的内存管理到底是怎么回事了。   R的操作基本都是通过变量来实现的,变量可以是各种各样的对象类型,R中的对象(比如矩阵)在内存中存于两种不同的地方,一种是堆内存(heap),其基本单元是“Vcells”,每个大小为8字节,新来一个对象就会申请一块空间,把值全部存在这里,和C里面的堆内存很像。第二种是地址对(cons cells),和LISP里的cons cells道理一样,主要用来存储地址信息,最小单元一般在32位系统中是28字节、64位系统中是56字节。在R中,可以通过ls()来查看当前所有对象名,对于每一个对象,可以通过object.size(x)来查看其占用内存的大小。   如果是因为当前对象占用内存过多,那么可以通过处理对象来获取更大的可用内存。一个很有用的方法是改变对象的存储模式,通过storage.mode(x)可以看到某个对象的存储模式,比如某个矩阵默认就是“double”的,如果这个矩阵的数值都是整数甚至0-1,完全没必要使用double来占用空间,可以使用storage.mode(x) - "integer"将其改为整数型,可以看到该对象的大小会变为原来的一半。   对于当前对象占用内存过多的情况,一个很主要的原因就是在写程序的过程中造成了太多的中间对象,R是一个很方便的语言,大家使用它一般都是写各种复杂的模型和算法,很多问题构造几个矩阵经过一系列的矩阵运算就可以很快解决,但是这些辅助算法的大矩阵如果不清理,就会留在系统中占内存。因此在写程序中对于中间对象,经常使用rm(x)是一个很好的习惯,如果是非常重要的信息不想删掉,可以存在硬盘里,比如csv文件或者RSqlite等。   rm()用来删除对象时,只会删除变量的引用,并不会立即清除占用的内存空间,失去引用的对象就成了内存中的垃圾,R清理垃圾的机制和JAVA很像,都是在一定时间内自动发现垃圾再集中清理。所以通过rm()删除对象后在Windows的任务管理器可以看到R进程占用的内存并没有被立即释放,而是过一段时间后才会清理。如果想要删除的对象立刻被清理,可以运行垃圾处理函数gc(),将会立刻释放空间。但是通常不是很必要,因为当内存不够时系统会自动清理垃圾的,我们要做的只是将不再使用的对象rm()掉,在写R程序时应该养成习惯。   很多时候,在程序中尤其是循环里,如果内存处理不当,还没来得及垃圾清理,就会把内存撑爆,因此新建对象时一定要考虑到R的内存管理机制。大家都知道R中矩阵的维度并不需要赋一个固定的值(很多语言的数组长度不能为变量),这为写程序带来了极大的方便,因此经常在循环中会出现某个矩阵越来越长的情况,实际上,矩阵每增长一次,即使赋给同名的变量,都需要新开辟一块更大的空间,假设初始矩阵为100K,第二个为101K,一直增到120K,那么,将会分别开辟100K、101K一直到120K的连续堆内存,如果一开始就开一块120K的,使之从101K逐渐增长到120K,将会大大地节约内存。cbind函数也是这个道理,所以在循环中要注意不要滥用。   要处理好内存的问题其实很简单,养成随时关注内存的习惯即可,每新建一个对象或者循环赋值的时候适当估算一下所占内存,大内存的中间变量用完后记得清理。如果实在需要新建一个巨大的对象,那么就该考虑一些专门处理大内存对象以及并行处理的包,比如bigmemory等。
个人分类: R|5098 次阅读|0 个评论
[转载]android GPS 应用
bluewind23 2011-3-24 15:38
HAL introdution: HAL(hardware abstraction layer)存在的目的在与让android framework与linux device driver分离开来.上层应用通过Dalvik VM与core services【runtime】(如sensor service,camera service等)来加载动态库文件(*.so),这里的so文件指的是HAL的实现,core service通过JNI接口调用HAL层提供的接口,这样就实现了android 应用程序对硬件的操作。 在Android源码中,HAL的主要实现位于hardware/目录下,老的实现版本和新的实现版本并存,老的HAL实现是通过JNI层直接加载动态链接库的方式,如下图所示: 图引用自: http://www.jollen.org/blog/ 新的HAL实现仍然是以加载动态链接库的方式来与linux device driver通信,不过libhardware屏蔽了具体的加载细节,每种应用以HAL stub的概念呈现给JNI层,一个HAL stub编译成一个动态链接库文件,结构如下图所示: 图引用自: http://www.jollen.org/blog/ 移植一个新的HAL实现需要开发人员编写HAL module(stub),上层应用通过libhardware获取HAL module的一系列回调函数(callback ops),这一系列回调函数直接与底层的linux device driver通信(一般是通过读写设备文件来实现的)。 目前,HAL对上层还不能完全做到与硬件无关,往往厂家添加自己的硬件设备需要改动相应的runtime(service)实现,android手机一般情况下需要的实现的HAL功能有: Camera GPS RIL WLAN BlueTooth Sensor vibrator等 GPS的HAL 实现: 在这里探讨的GPS HAL实例采用的是老的HAL实现方式,主要的实现代码位置: frameworks/base/location/* (client) frameworks/base/core/jni/android_location_GpsLocationProvider.cpp (JNI ) frameworks/base/services/java/com/android/serverLocationManagerService .java(service) hardware/libhardware_legacy/gps/* (HAL) 首先介绍几个重要的数据结构: /** Callback with location information. */ typedef void (* gps_location_callback)(GpsLocation* location); /** Callback with status information. */ typedef void (* gps_status_callback)(GpsStatus* status); /** Callback with SV status information. */ typedef void (* gps_sv_status_callback)(GpsSvStatus* sv_info); /** GPS callback structure. */ typedef struct { gps_location_callback location_cb; gps_status_callback status_cb; gps_sv_status_callback sv_status_cb; } GpsCallbacks; /*GPS 接口*/ typedef struct { /** * Opens the interface and provides the callback routines * to the implemenation of this interface. */ int ( * init) ( GpsCallbacks* callbacks ) ; /** Starts navigating. */ int ( * start) ( void ) ; /** Stops navigating. */ int ( * stop) ( void ) ; /** Closes the interface. */ void ( * cleanup) ( void ) ; /** Injects the current time. */ int ( * inject_time) ( GpsUtcTime time , int64_t timeReference, int uncertainty) ; /** Injects current location from another location provider * (typically cell ID). * latitude and longitude are measured in degrees * expected accuracy is measured in meters */ int ( * inject_location) ( double latitude, double longitude, float accuracy) ; /** * Specifies that the next call to start will not use the * information defined in the flags. GPS_DELETE_ALL is passed for * a cold start. */ void ( * delete_aiding_data) ( GpsAidingData flags) ; /** * fix_frequency represents the time between fixes in seconds. * Set fix_frequency to zero for a single-shot fix. */ int ( * set_position_mode) ( GpsPositionMode mode, int fix_frequency) ; /** Get a pointer to extension information. */ const void * ( * get_extension) ( const char * name) ; } GpsInterface; GPS 的HAL 实现主要工作就是填充一个 GpsInterface结构,android应用启动 LOCATION_SERVICE时,将检测系统是否支持GPS应用,若支持GPS,则在JNI层初始化GPS设备时将返回一个 GpsInterface结构,然后通过JNI层的回调函数将GPS信息发送给framework层,调用过程如下所示: 在GpsInterface-Start后,启用读线程通过epoll检测GPS设备文件的状态,若受到数据则读取NEMA数据,将数据解析后,根据解析后的数据填充GpsStatus, GpsLocation和GpsSvInfo结构,然后调用相应的JNI层在Init时传进来的回调函数,service部分的代码将自动更新GPS信息。 转载: http://blog.csdn.net/evilcode/archive/2010/09/03/5860759.aspx
个人分类: 转摘文章|4777 次阅读|0 个评论
新建文本文档
热度 4 zxczxc0417 2011-1-28 00:28
新建文本文档
个人分类: 好好学习|412 次阅读|4 个评论
你丢了内存么?
热度 1 fs007 2010-12-24 01:30
寻正 如果你使用的是电脑是多核心的,同时安装了Win7操作系统,你需要查看是否丢了内存。你应当知道自己拥有多少内存,然后查看: 控制面板==》系统;然后看到系统下列举的内存。 这说明你没有丢内存,但是你也可能会有如下的悲惨境况: 有时有的人还只有2GB可用呢。我一台电脑8GB内存,结果只有7GB可用。内存哪里去了? 进一步地核查内存去向,要把任务管理器调出来,(Ctrl+Alt+Delete),查看Performance(性能?),其中有一个按扭:Resource Monitor(资源监视器),点击该按扭调出资源监视器。在资源监视器中查看内存: 你会看到硬件保留(Hardware Reserved)内存占多少,那就是属于不可用内存,因为被硬件择址占据了地址空间而变得不可用了。硬件占据地址而减少内存的使用主要发生在32位的操作系统,因为在32位系统下,地址映射能力总的只有4GB,如果你安装了4GB的内存,你的实际使用内存会减少,减少的部分正好是你的硬件包括显卡得占据的地址部分。你要全部使用4GB或以上的内存,就得用64位的操作系统,扩大择址能力。 但你如果用了64位系统(32位下是否会发生同样的事我不清楚,自己查一下罢),接着出现了上面的情况,结果你仍然因为硬件保留地址而失去相当多的内存,为什么呢? 一者可能因为你的主版仍然局限于32位,只有4GB择址能力,你用了64位系统也没用,你仍然会损失掉那些内存。如果你的主版有动态调整能力,那么一定要把这个选项选上,然后主版在加载硬件后会自动调整,把内存都用上,不会为硬件保留了。对大多数人来说,新瓶装新酒,主版多半不是问题,问题出现在系统加载上。 在设置系统启动时,由于我们有多核心,有大量内存,我们调整了启动(Boot)程序:(在开始上面的命今框中键入msconfig可以调出系统启动设置窗口(System Configuration),然后在启动(Boot)菜单下选择高级设置(Advanced Options),你就看到了下面的选择。 对于高级玩家来说,让电脑启动更快是一个不可克制的诱惑,启动时用多个核心处理器?好呀,更快么,使用所有内存?好呀,不是更快么?于是么你把这两个选项都选上了,感觉电脑启动是不是快多了?嗯,的确如此其实不是那样,应该还是一样快,但你心理上觉得快就快了。 你回去查你的内存使用情况,就知道这样的启动方式浪费了许多内存,具体会浪费多少,视你的硬件配置而定。有的人会多达2GB假如你的显存很高的话。 这两个选项有什么作用我不太清楚,据说跟调试系统有关,并不能改变系统的启动速度,看来你还是得把这两个选项改回来,清空,再启动,硬件保留的内存空间就大大减少了我的电脑减少到2M,另一台8GB内存的减少到100多M。 想当然是不行的,会丢内存浪费资源的。
个人分类: 科学普及|8105 次阅读|1 个评论
超级计算机让竞争对手—和用户--望尘莫及
热度 1 郝炘 2010-11-5 04:58
Richard Stone 、郝炘 中国最新的超级计算机,天河一号 A ,也是世界上最快的,比现任冠军美国田纳西州橡树岭国家实验室的 Jaguar XT5 系统快 47%. 但是,正当中国官方盛赞这台每秒能做 2500 万亿次计算的超级计算机是自主创新的典范时,一些中国研究人员被另一个事实所困扰:他们同事中能利用这台机器即使极小部分能力的人微不足道。 天河一号 A 是中央军委直属的长沙国防科学技术大学开发的。机器放在国家超级计算天津中心,该中心是保密机构。尽管出身这样的门第,但据超级计算中心主任刘光明说,这台机器预期将主要用于民用,包括天气预报、动漫、以及模拟石油贮藏等。 不过要等中国的软件赶上硬件的水平也许还要许多年。计算物理学出身的网络安全专家许榕生说,对中国超级计算机的研制者来说,他们强有力的机器没有多少用户是一大尴尬。许说: 没有几个中国研究者知道如何给科学问题建数学模型。 这台超级计算机装在 120 个冰箱大小的柜子里,机罩下是 14,336 个英特尔 Xeon 中心处理器 (CPU) 和 7168 个 Nvidia Fermi 图形板。国防科大的工程师们设计了一个新的互连网,速度是美国标准的两倍,以便更好地利用图形芯片处理数据的速度和 CPU 解复杂方程的能力。开发者们还用一些自己研制的飞腾 -1000 CPU 替换了一些英特尔芯片。 (天河一号 A 的)表现证明我国的 CPU 性能非常高,本周在福州参加中国科学技术协会年会的科技部长万刚说。美国 Knoxville 田纳西州大学计算科学家 Jack Dongarra 说, (新机器)大幅度提升了天河一号的性能,天河一号在六月发布的计算机全球 500 强名单上名列第七。最新的全球 500 强名单将于 11 月 15 日公布。 不过关键的考验是应用。刘对新华社记者说,培养 超级计算机用户就像餐馆既要满足不同顾客的口味,还得有大客户,才能保证餐馆不会经常空着。 眼下,中国的超级计算机的大多数用户还在从儿童菜单上点菜。据去年中国超级计算机 100 强的一个讨论会上的报告,超级机算上海中心的速度曾是中国第一的曙光 5000A 机上运行的应用软件中,只有 1% 用了该机 30,720 核心的 160 个以上。与此相比,运行在 Jaguar XT5 上的应用软件有 18% 用了该机 150,162 核心中的 45,000 到 90,000 个。中国科学院软件所的并行计算研究者张云泉说,没有软件的超级计算机就像没有上套的野马,马力浪费了。 部分原因是费用。张说,中国超级计算机上运行的工业应用大部分用从美国或其它国家进口的商业软件。因为这些软件的价格与它们支持的 CPU 数成正比,中国很少有用户买得起支持很多 CPU 的软件许可。 万刚告诉《科学》他希望看到中国在气候模型、生物技术等领域开发自己的应用软件。这就需要在第 12 个五年计划期间有相当大的资金投入。张说,目前软件开发的经费大约是硬件开发的 1%. 天河一号 A 的 理论 运算能力是每秒 47 00 万亿次,要实现其全部潜力也许还需要几个月的时间。到那时,它也许将会把冠军的头衔让给其他机器。据 Dongarra 说,日本和美国正在分别开发 5 台万万亿次级的超级计算机,美国拥有超级计算机 500 强中一半以上的机器。 原文发表于2010年11月5日《科学》 http://www.sciencemag.org/cgi/content/full/330/6005/746-a
个人分类: 英译中|12584 次阅读|15 个评论
“混成”理论
liwei999 2010-9-20 00:21
镜某趋向于这个混成理论。 (62463) Posted by: mirror Date: March 05, 2007 06:44PM 硬件是基因决定的。但是构成一个反应还需要有个触发。触发可以是外因性的,也可以是内因性的。 最简单的事例就是雄性器官的硬件。有骨头没骨头是基因决定的。但是这个硬件并不是总硬,即便是有骨头在内。外因性的触发不难理解,内因性的触发也不难理解,至少在本池内。 -------- 就是论事儿,就事儿论是,就事儿论事儿。
个人分类: 镜子大全|1886 次阅读|0 个评论
硬件实现两个无符号数相加时,结果是否溢出的判断方法
eecs 2010-4-21 12:30
这里讲用硬件如何实现两个无符号数相加时,结果是否溢出的判断方法。 假设两个加数为A和B,和为C,即A+B=C,其中A、B、C都是n位的,假设溢出位为o。 方法1:o=(A B )|(((A (~B ))|((~A )B ))(~C )) 使用的时候,通过组合电路生成C和o,然后将C和o寄存。 这种方法适用于硬件中 没有全加器 , 只有半加器 的情况。 方法1指出溢出的条件为:当A、B的最高位为1时,和溢出;当A和B的最高位有一个为1时,当C的最高位为0时溢出。 证明:假设A的最高位为1,B的最高位为0,则A的取值范围 ,B的取值范围 。那么A+B的取值范围为 ,当A+B的值位于 时,没有溢出,C的最高位肯定为1;当A+B的值位于 时,溢出,C的最高位肯定为0(因为数值范围 的次高位,也就是C的最高位都为0)。 方法2:当硬件中 有全加器 时,将C扩展为n+1位,则o=C 。 方法3:当CB或者CA时,肯定就溢出了。
个人分类: 文章专区|7490 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-15 03:18

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部