加3职业技能的装备,值得收藏的老车吗

钝宗和短宗,如果氪金的话哪个比较值得!装备都是3个技能宝珠齐全的9件套
可用积分 点
APP积分 点
本帖最后由 Dean和SAM 于
10:31 编辑
装备都是3个技能宝珠齐全的9件套,12红字属强右。大力氪红字凯恩附魔什么的话,到底哪个比较值得,武器都是12到13左右的杰诺和幽火!只打算弄一套,而且要3个20属强的宝珠。。。所以请大神说一些优劣势,结合安图妮单刷和打团的情况。9件套幽火,3保1能砍腿吗,哈哈哈!谢谢了
这帖子真心不错。我要推到微博啥的给小伙伴们看看:
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
来自移动设备
短宗并不很需要技能宝珠,钝也是……# |) y( Y6 O# E/ h% |5 h3 j3 k2 s
杰诺带奶+斩铁砍腿压力并不是很大
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
顿宗小米比较好,幽火擎天花火和火山地板娘不会灼烧,擎天第一个绿名也只是他自己制造的火焰圈才会让它灼烧
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
来自移动设备
氪金建议巨剑或者太刀。能出肩膀就太刀,不能出肩膀就凑幽魂或者熔岩玩巨剑爆发流
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
技能宝珠打在MRS上就可以了。。。。完美人剑,想去砍腿,钝器比较适合,因为短剑电脑网络不好可能丢失
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
短是堆短剑精通,两个白金徽章更重要。
这人还没添加签名啦。别再看她啦
Powered by
作者:八毛鱼
你有新的消息
弹出框标题
弹出框内容
弹出框标题
弹出框内容推荐 Agner Fog 的 5 本优化手册:&br&&ol&&li&Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms&br&&/li&&li&Optimizing subroutines in assembly language: An optimization guide for x86 platforms&br&&/li&&li&The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers&br&&/li&&li&Instruction tables: Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD and VIA CPUs&br&&/li&&li&Calling conventions for different C++ compilers and operating systems&br&&/li&&/ol&&a href=&///?target=http%3A//www.agner.org/optimize/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Software optimization resources. C++ and assembly. Windows, Linux, BSD, Mac OS X&i class=&icon-external&&&/i&&/a&。
推荐 Agner Fog 的 5 本优化手册: Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms Optimizing subroutines in assembly language: An optimization guide for x86 platforms The microarchitecture of Intel, A…
个人谈谈阅读hadoop源代码的经验。&br&首先,不得不说,hadoop发展到现在这个阶段,代码已经变得非常庞大臃肿,如果你直接阅读最新版本的源代码,难度比较大,需要足够的耐心和时间,所以,如果你觉得认真一次,认真阅读一次hadoop源代码,一定要有足够的心理准备和时间预期。&br&其次,需要注意,阅读Hadoop源代码的效率,因人而异,如果你有足够的分布式系统知识储备,看过类似的系统,则能够很快地读它的源代码进行通读,并快速切入你最关注的局部细节,比如你之前看过某个分布式数据库的源代码,对分布式系统的网络通信模块,调度模块等有一定了解,这对阅读hadoop源代码有极大帮助;如果你是一个初学者,对hadoop一无所知,只了解一些java语法,那阅读hadoop源代码是极具挑战的一件事情,尤其是从无到开始入门的过程,是极度煎熬和困惑的,这时候需要你在阅读代码过程中,不断补充缺乏的相关知识(比如RPC,NIO,设计模式等),循序渐进,直到入门。&br&接下来进入主题,说一下阅读源代码的个人经验。由于我也是从无到入门,再到修改源代码,逐步过渡的,所以,对于很多人而言,具有借鉴意义。&br&&br&============&br&第一个阶段:学习hadoop基本使用和基本原理,从应用角度对hadoop进行了解和学习&br&这是第一个阶段,你开始尝试使用hadoop,从应用层面,对hadoop有一定了解,比如你可以使用hadoop shell对hdfs进行操作,使用hdfs API编写一些程序上传,下载文件;使用MapReduce API编写一个数据处理程序。一旦你对hadoop的基本使用方法比较熟悉了,接下来可以尝试了解它的内部原理,注意,不需要通过阅读源代码了解内部原理,只需看一些博客,书籍,比如《Hadoop权威指南》,对于HDFS而言,你应该知道它的基本架构以及各个模块的功能;对于MapReduce而言,你应该知道其具体的工作流程,知道partition,shuffle,sort等工作原理,可以自己在纸上完整个画完mapreduce的流程,越详细越好。&br&在这个阶段,建议你多看一些知名博客,多读读《hadoop权威指南》(可选择性看相关的几章)。如果你有实际项目驱动,那是再好不过了,理论联系实际是最好的hadoop学习方法;如果你没有项目驱动,那建议你不要自己一个人闷头学,多跟别人交流,多主动给别人讲讲,最好的学习方式还是“讲给别人听”。&br&&br&============&br&第二个阶段:从无到入门,开始阅读hadoop源代码&br&这个阶段是最困苦和漫长的,尤其对于那些没有任何分布式经验的人。 很多人这个阶段没有走完,就放弃了,最后停留在hadoop应用层面。&br&这个阶段,第一件要做的事情是,选择一个hadoop组件。如果你对分布式存储感兴趣,那么你可以选择HDFS,如果你读分布式计算感兴趣,你可以选择MapReduce,如果你对资源管理系统感兴趣,你可以选择YARN。&br&选择好系统后,接下来的经历是最困苦的。当你把hadoop源代码导入eclipse或intellij idea,沏上一杯茶,开始准备优哉游哉地看hadoop源代码时,你懵逼了:你展开那数不尽的package和class,觉得无从下手,好不容易找到了入口点,然后你屁颠屁颠地通过eclipse的查找引用功能,顺着类的调用关系一层层找下去,最后迷失在了代码的海洋中,如同你在不尽的压栈,最后栈溢出了,你忘记在最初的位置。很多人经历过上面的过程,最后没有顺利逃出来,而放弃。&br&如果你正在经历这个过程,我的经验如下:首先,你要摸清hadoop的代码模块,知道client,master,slave各自对应的模块(hadoop中核心系统都是master/slave架构,非常类似),并在阅读源代码过程中,时刻谨记你当前阅读的代码属于哪一个模块,会在哪个组件中执行;之后你需要摸清各个组件的交互协议,也就是分布式中的RPC,这是hadoop自己实现的,你需要对hadoop RPC的使用方式有所了解,然后看各模块间的RPC protocol,到此,你把握了系统的骨架,这是接下来阅读源代码的基础;接着,你要选择一个模块开始阅读,我一般会选择Client,这个模块相对简单些,会给自己增加信心,为了在阅读代码过程中,不至于迷失自己,建议在纸上画出类的调用关系,边看边画,我记得我阅读hadoop源代码时,花了一叠纸。注意,看源代码过程中,很容易烦躁不安,建议经常起来走走,不要把自己逼得太紧。&br&在这个阶段,建议大家多看一些源代码分析博客和书籍,比如《Hadoop技术内幕》系列丛书(轩相关网站:&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop技术内幕&i class=&icon-external&&&/i&&/a&)就是最好的参考资料。借助这些博客和书籍,你可以在前人的帮助下,更快地学习hadoop源代码,节省大量时间,注意,目前博客和书籍很多,建议大家广泛收集资料,找出最适合自己的参考资料。&br&这个阶段最终达到的目的,是对hadoop源代码整体架构和局部的很多细节,有了一定的了解。比如你知道MapReduce Scheduler是怎样实现的,MapReduce shuffle过程中,map端做了哪些事情,reduce端做了哪些事情,是如何实现的,等等。这个阶段完成后,当你遇到问题或者困惑点时,可以迅速地在Hadoop源代码中定位相关的类和具体的函数,通过阅读源代码解决问题,这时候,hadoop源代码变成了你解决问题的参考书。&br&&br&============&br&第三个阶段:根据需求,修改源代码。&br&这个阶段,是验证你阅读源代码成效的时候。你根据leader给你的需求,修改相关代码完成功能模块的开发。在修改源代码过程中,你发现之前阅读源代码仍过于粗糙,这时候你再进一步深入阅读相关代码,弥补第二个阶段中薄弱的部分。当然,很多人不需要经历第三个阶段,仅仅第二阶段就够了:一来能够通过阅读代码解决自己长久以来的技术困惑,满足自己的好奇心,二来从根源上解决解决自己遇到的各种问题。 这个阶段,没有太多的参考书籍或者博客,多跟周围的同事交流,通过代码review和测试,证明自己的正确性。&br&&br&============&br&阅读hadoop源代码的目的不一定非是工作的需要,你可以把他看成一种修养,通过阅读hadoop源代码,加深自己对分布式系统的理解,培养自己踏实做事的心态。&br&最后,给大家推荐我个人的hadoop微信公众账号,我会定期发布hadoop文章,如果你对大数据感兴趣,欢迎加入,二维码如下:&br&&img src=&/92f084f7de3172cbd15819_b.jpg& data-rawwidth=&430& data-rawheight=&430& class=&origin_image zh-lightbox-thumb& width=&430& data-original=&/92f084f7de3172cbd15819_r.jpg&&
个人谈谈阅读hadoop源代码的经验。 首先,不得不说,hadoop发展到现在这个阶段,代码已经变得非常庞大臃肿,如果你直接阅读最新版本的源代码,难度比较大,需要足够的耐心和时间,所以,如果你觉得认真一次,认真阅读一次hadoop源代码,一定要有足够的心理…
我是1986前后开始学习编程的,最初用的是comx-pc1型电脑,到目前,已经编程近30年,自信符合题主“资深程序员”的标准。&br&我提高自己的方法很简单,就是自己编程,实现已有的程序的功能。&br&例1、学java的时候,对于网络这一块不太明白,比如三次握手,就逼着自己做了个代理服务器,做完以后,对于网络编程就算掌握了,顺便还掌握了线程的知识,而且对于浏览器访问服务器的整个流程都非常清楚了。&br&例2、开始web编程的时候,webwork里面的一些标签没看懂,就逼着自己做了个web服务器,一下子就明白了webwork为什么要这样设计。额外的好处是做web服务器的时候,顺便也把spring的很多东西也掌握了。&br&例3、炒股的时候,看到各种指标的使用心得,不太明白,就逼着自己做了一套股票软件,一下子就对各种指标的计算,运用烂熟于心。额外的好处是可以轻松实现选股及自动交易。&br&现在,我在做浏览器……&br&&br&COMX-PC1的主机:&br&&img src=&/a5dc76d09a4d350bcb0e12daf1c0f61b_b.jpg& data-rawwidth=&400& data-rawheight=&300& class=&content_image& width=&400&&&img src=&/b62e7fe2ce6e5f168ac5136ee4dea0b0_b.jpg& data-rawwidth=&400& data-rawheight=&300& class=&content_image& width=&400&&&img src=&/e5cb4cc9499ddbb0cf61b_b.jpg& data-rawwidth=&400& data-rawheight=&300& class=&content_image& width=&400&&&br&&img src=&/1dfb6b78ee3be16b9d5cf_b.jpg& data-rawwidth=&622& data-rawheight=&420& class=&origin_image zh-lightbox-thumb& width=&622& data-original=&/1dfb6b78ee3be16b9d5cf_r.jpg&&&br&附上两张COMX-PC1的说明书,缅怀逝去的青春&br&&img src=&/6ceac57d068ed0_b.jpg& data-rawwidth=&1080& data-rawheight=&1456& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&/6ceac57d068ed0_r.jpg&&&br&&img src=&/44a04aa2dbe8adcbabfe8ca_b.jpg& data-rawwidth=&600& data-rawheight=&444& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/44a04aa2dbe8adcbabfe8ca_r.jpg&&&br&&br&留言中,很多都是我那评论风骚的签名……有必要说一下这个签名的由来:当年在学校读书的时候,有一门basic语言,教这门课的老师以前也没有接触过电脑,都是现学现卖,于是,出现了荒诞的一幕:老师上课给我们讲basic语言,放学之后,我给他们讲c语言。这事反响很强烈,学校小报来采访,我装逼似的轻描淡写:“无它,唯手熟尔”,这话本来出自《卖油翁》,就是熟能生巧的意思,不知道记者听错了还是存心的,最后小报出来后,看到的就是:“无她,唯手熟尔”,大囧。
我是1986前后开始学习编程的,最初用的是comx-pc1型电脑,到目前,已经编程近30年,自信符合题主“资深程序员”的标准。 我提高自己的方法很简单,就是自己编程,实现已有的程序的功能。 例1、学java的时候,对于网络这一块不太明白,比如三次握手,就逼着…
更新:我新开通了知乎专栏 &a href=&/notageek& class=&internal&&Not A Nerd? - 知乎专栏&/a&,会不定期在上面发表一些编程方面的文章,欢迎大家关注。&br&&br&现在互联网上资源丰富,Java 学习并不难。贴个 Java 服务端入门和进阶指南,是给我们组新人入门用的,包括了学习目标、需要掌握的技能和参考资料,并规划了学习阶段和时间,希望帮助到题主。&br&前言&p&欢迎加入我们。这是一份针对实习生/毕业生的服务端开发入门与进阶指南。遇到问题及时问你的 mentor 或者直接问我。 建议:&/p&&ul&&li&尽量用 google 查找技术资料。&/li&&li&有问题在 stackoverflow 找找,大部分都已经有人回答。&/li&&li&多看官方的技术文档。&/li&&li&ibm developerworkers 的文章质量整体上有保障。&/li&&li&平时花一些时间在 github 上阅读优秀项目源码。&/li&&/ul&入门(1-2 个月)&ol&&li&目标:参与简单的项目开发。&/li&&li&技能:&ul&&li&掌握 Java。经典的《Java 核心技术:卷1 基础知识》(或者《Java 编程思想》)必看,跳过其中的图形和 applet 章节。习惯查阅 Java API Doc。为了保证代码的质量,《Effective Java》、《Clean Code》和《重构》也需要至少通读一遍。&/li&&li&熟悉 Linux 开发环境和 bash shell。Linux 是我们的开发和部署环境,你最好尽快熟练它。Linux 的基本使用可以通过《鸟哥的Linux私房菜:基础学习篇(第三版)》学习,开发 bash shell 脚本可以参考《Linux Shell脚本攻略》。&/li&&li&掌握开发工具&ul&&li&熟练使用一种 IDE。Intellij IDEA或者 Eclipse 都可以,推荐使用前者。至少熟悉常用的快捷键,会 debug(包括远程 debug)项目。&/li&&li&熟悉一种编辑器。比如 Vim/Emacs/Sublime Text,至少学会搜索/替换/代码补全。&/li&&/ul&&/li&&li&掌握 JDK 以外的常用类库和工具包。JDK 原生 API 在很多场景下使用并不方便。你需要掌握社区贡献的优秀类库和工具包,比如 apache commons、google guava 等,具体可以翻阅 &a href=&///?target=http%3A//xielong.me//%25E6%259C%258D%25E5%258A%25A1%25E7%25AB%25AF%25E6%258A%%259C%25AF%25E9%E5%259E%258B/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&服务端技术选型 &i class=&icon-external&&&/i&&/a&的Utility 篇。&/li&&li&掌握 Web 开发框架。我们使用 Spring(或Rose) + Ibatis(或Jade) 开发 web 服务,你需要熟练掌握它们。&/li&&li&学习代码规范。我们大致上遵循 oracle 的 Java 语言编码规范,你可以先阅读并熟悉它。Code Formatting 文件在 git@xxx/coding-standard.git,在编写代码之前,请把它导入到 IDE 中。另外,确认 IDE 已经安装 Findbugs 和 CheckStyle 插件。&/li&&li&熟悉开发流程。我们的开发流程大致如下:功能开发-&单元测试-&功能测试-&Code Review-&集成测试-&发布。确保你熟悉其中的每个环节。&/li&&li&其他。需要熟练使用版本控制工具 Git(阅读:《Git 权威指南》),以及项目构建工具 Maven(阅读:《Maven 实战》)。另外,在这个阶段可以尝试 TDD 开发。&/li&&/ul&&/li&&/ol&进阶(2-6 个月)&ul&&li&目标:独立负责某个服务端项目。&/li&&li&技能:&ul&&li&掌握 web 开发最佳实践,掌握 Restful API 设计,理解 Spring 原理。推荐阅读《Spring揭秘》。掌握项目分层、子模块划分。推荐阅读:《J2EE 核心模式》。&/li&&li&掌握 web 架构设计。包括 Http 反向代理,数据缓存,负载均衡,水平扩展和垂直扩展。推荐阅读:《分布式 Java 应用:基础与实践》。&/li&&li&掌握关系型数据库。包括设计 MySQL 表结构,根据业务特点分表分库,基于执行计划的 SQL 分析优化,以及数据库容量规划。推荐阅读:《MySQL 必知必会》、《高性能 MySQL》。&/li&&li&了解 NoSQL。我们大规模使用 Hadoop、HBase、Hive,同时部分项目使用 Redis、Storm。你需要学会这些工具最基本的使用。&/li&&li&学习 web 安全知识。了解 web 前端安全问题。设计安全 web 服务,包括加解密、防伪造、防重放攻击等。&/li&&li&掌握 Http (推荐阅读:《图解Http》、《http权威指南》)、Thrift 等协议。&/li&&li&掌握服务容量规划,性能调优,可靠性保证,以及故障处理。学习容量规划和性能调优知识,梳理业务监控点,熟练使用我们的监控报警系统。推荐阅读:《深入理解 Java 虚拟机》。&/li&&li&其他。设计模式:从项目中学习,有时间可以看看《深入浅出设计模式》、《JDK 里的设计模式》。学习Java Socket 编程与多线程知识,可以看看《Java 并发编程实战》,并翻翻并发编程网的文章。&/li&&/ul&&/li&&/ul&深入(6 个月-)&ul&&li&目标:分布式系统和中间件开发。&/li&&li&构建知识体系:《大型网站系统与 Java 中间件实践》、《大型网站技术架构:核心原理与案例分析》。&/li&&li&原理与设计:《大规模存储式系统》、《UNIX 网络编程 卷1:套接字联网 API》、《How Tomcat Works》。&/li&&li&学习开源项目:Apache Thrift、Zipkin、Netty、Rose、Jade、淘宝 RPC 系统 Dubbo 等。分析项目中的设计思路。比如,同样是RPC框架,Finagle 和 Dubbo 有什么异同。&/li&&li&其他。根据参与的项目加深学习吧。比如,如果需要写 DSL,可以读一下《领域特定语言》,对 Redis 感兴趣推荐读一下:《Redis 设计与实现》。有两本书,无论做什么项目,都推荐读:《Unix 编程艺术》、《UNIX 环境高级编程(第3版)》。&/li&&/ul&
更新:我新开通了知乎专栏 ,会不定期在上面发表一些编程方面的文章,欢迎大家关注。 现在互联网上资源丰富,Java 学习并不难。贴个 Java 服务端入门和进阶指南,是给我们组新人入门用的,包括了学习目标、需要掌握的技能和参考资料…
&b&1.算法性能比较&/b&&br&&blockquote&JMLR 2014 10月刊有一篇神文:Do we Need Hundreds of Classifiers to Solve Real World Classification Problems? 测试了179种分类模型在UCI所有的121个数据上的性能,发现Random Forests 和 SVM (高斯核,用LibSVM版本)性能最好。&a href=&///?target=http%3A//jmlr.org/papers/v15/delgado14a.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?&i class=&icon-external&&&/i&&/a&&/blockquote&&br&这个东西是前段时间在 &a data-hash=&ccb2adac4e1ae6ac00b83& href=&///people/ccb2adac4e1ae6ac00b83& class=&member_mention& data-editable=&true& data-title=&@刘知远& data-tip=&p$b$ccb2adac4e1ae6ac00b83& data-hovercard=&p$b$ccb2adac4e1ae6ac00b83&&@刘知远&/a&微博上看到的&a href=&///?target=http%3A////BvcVIE6RR%3Ftype%3Dcomment& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sina Visitor System&i class=&icon-external&&&/i&&/a&,JMLR是机器学习领域的顶级期刊。&br&&br&&b&2.算法的review&/b&&br&这篇东西对一些监督学习算法做了review.&br&&a href=&///?target=https%3A//s3-us-west-/mlsurveys/54.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&s3-us-west-&/span&&span class=&invisible&&/mlsurveys/54.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&文末有张表格。比较了各种算法的性质。&br&&img src=&/77f3527d0bdb4add7f97291f1fda9101_b.jpg& data-rawwidth=&1135& data-rawheight=&812& class=&origin_image zh-lightbox-thumb& width=&1135& data-original=&/77f3527d0bdb4add7f97291f1fda9101_r.jpg&&&br&&b&3.算法选择&/b&&br&除此之外,给你贴张图,供你选择机器学习算法用。&br&&br&&img src=&/109cc741b82c6d9eb752a9_b.jpg& data-rawwidth=&1600& data-rawheight=&888& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&/109cc741b82c6d9eb752a9_r.jpg&&
1.算法性能比较 JMLR 2014 10月刊有一篇神文:Do we Need Hundreds of Classifiers to Solve Real World Classification Problems? 测试了179种分类模型在UCI所有的121个数据上的性能,发现Random Forests 和 SVM (高斯核,用LibSVM版本)性能最好。
遇到问题都不知道搜什么关键词。
遇到问题都不知道搜什么关键词。
楼上的大V们压根就没有看原文吧。&br&&br&linus已经提到“并行在图形处理和服务器上是有意义的”,他反对的是终端用户和移动用户过度的使用并行技术,因为功耗和性能并不会因为提升并行计算而得到改善。&br&&br&不是linus老了,是你们压根还没长大。
楼上的大V们压根就没有看原文吧。 linus已经提到“并行在图形处理和服务器上是有意义的”,他反对的是终端用户和移动用户过度的使用并行技术,因为功耗和性能并不会因为提升并行计算而得到改善。 不是linus老了,是你们压根还没长大。
&a href=&///?target=http%3A//zh.wikipedia.org/wiki/%25E9%2598%25BF%25E5%25A7%%25BE%25BE%25E5%25B0%%25AE%259A%25E5%25BE%258B& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&阿姆达尔定律&i class=&icon-external&&&/i&&/a&:用于研究一个程序在使用多个处理器时与使用单个处理器时可能出现的加速比。考虑一个运行在单处理器上的程序,执行时间中的(1-f)部分表示其代码是固有的、只能被串行执行的部分,f部分表示其代码可以无限制地并行、无调度负载。则使用具有m个处理器的并行系统后,探索该程序整个并行部分的加速比如下:&br&&img src=&/bc9a0d70aa3b780ccb74fa0_b.jpg& data-rawwidth=&223& data-rawheight=&76& class=&content_image& width=&223&&&br&可以推导出两个重要的结论:&br&(1)当f非常小时,使用并行处理器只有一点的影响。&br&(2)随着m接近于无限大,加速比被1/(1-f)所限制。&br&Amdahl’s law是一个fixed-size model,就是要解决的问题的大小是固定的,可并行化的比例是固定的。&br&&b&斯塔夫森定律&/b&(&a href=&///?target=http%3A//en.wikipedia.org/wiki/Gustafson%2527s_law& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Gustafson's law&i class=&icon-external&&&/i&&/a&)从另一个角度研究了加速比。它考虑了数据大小与核心数量成比例的增加并计算应用的加速比(上限),假设大数据集能够以并行方式执行。扩展的加速比公式如 下:&br&&img src=&/77818d2cdde8b92bada2ef_b.jpg& data-rawwidth=&163& data-rawheight=&28& class=&content_image& width=&163&&&i&p&/i& 代表核心数量。为简化表述,对于指定的数据集大小,s 代表并行应用中的串行执行时间的百分数。&br&&br&两个定律,一个悲观,一个乐观,但是不矛盾。借用&a href=&///?target=http%3A//en.wikipedia.org/wiki/Gustafson%2527s_law& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Gustafson's law&i class=&icon-external&&&/i&&/a&页面上的比喻说明一下:&br&&br&阿姆达尔定律:假设你开车汽车从A开到B,总长60km,并且你已经已30km/h行驶了一小时。无论你接下来开多快,你都无法使整个行程的平均速度到达90km/h。因为你已经开了一小时并且行程总长60km。&br&斯塔夫森定律:假设你的车以小于90km/h的速度开了一段时间,只要给你足够的时间和行程,你总是可以使汽车平均速度到达90km/h。比如:已经以30km/h开了1小时,你只需要以120km/h的速度再开2个小时。&br&&br&斯塔夫森定律说问题规模足够大时,增加核心数目是好的。比如处理大数据,比如处理图形等一些问题时。直观上,可以把大数据问题看做可以完全并行的程序,这时,根据阿姆达尔定律,加速比是m(核心数)。&br&&br&linus的本意是说一些问题(大部分问题)都是被阿姆达尔定律框住的,因为他们问题规模不大,加速比被1/(1-f)所限制。&br&那么问题来了,为什么我们对他的说法这么大意见?&br&&a href=&/people/wonderful-vczh& class=&internal&&vczh&/a&提到&在我们写的并行程序还需要我们自己操作线程和锁之前,谈浪费时间还太早&这就必须提到另一个问题,我们目前容易实现并行程序吗,现在的并行机制够好吗?&br&实现并行程序的主要方法有多线程&锁等。其中多线程&锁效率高,但是TM的不好写啊!!!&br&我们直观的讲讲为什么难写。我们一般写程序时,我们只需要关注我正在写的函数就行,也就是说我只需要关心局部信息。并且在调用函数时,我不需要知道被调用函数的实现细节,这是抽象。我们处理复杂任务时希望处理方法能够满足这两个条件:&b&局部&抽象&/b&。但是锁机制破坏了这两个条件:&br&&p&”出于多种原因,可变状态和锁容易出问题。锁意味着要整理代码中的依赖性,使开发人员对于执行路径和预期结果有理可循。但是,由于锁的多个方面未加以实施,因此看到低质量代码是很常见的,这些代码包含可见性、安全发布、竞争条件、死锁和其他常见并发弊病方面的问题。&/p&&p&一个更严重的问题是,即使您一开始使用两个在并发性方面得到正确编写的组件,也有可能在结合它们时生成新的意外错误。因此编写构建于可变状态和锁之上、且该状态和锁随系统增长仍然可靠的并发系统很难。“ (参考自&a href=&///?target=http%3A///developerworks/cn/java/j-gpars/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&使用 GPars 解决常见并发问题&i class=&icon-external&&&/i&&/a&)&/p&&p&为了解决编写并发程序困难的问题,我们引入了一些方法:(&a href=&///?target=http%3A///developerworks/cn/java/j-gpars/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&使用 GPars 解决常见并发问题&i class=&icon-external&&&/i&&/a&)&br&&/p&&p&Fork/join(java)&/p&Actors(Erlang ,Scala )&br&Agents(Clojure)&br&&p&软件事务内存-STM&br&&/p&&p&通信顺序进程-CSP(go)&br&&/p&&p&当然,上面的方法解决的不仅是现有方法编写困难的问题,也对现有性能做了一定提升,&/p&&p&比如:&/p&&p&go语言声称:协程是轻量级的线程。协程十分轻量,Go语言可以在一个进程中执行有数以十万计的协程,依旧保持高性能。而对于普通的平台,一个进程有数千个线程,其CPU会忙于上下文切换,性能急剧下降。随意创建线程可不是一个好主意,但是我们可以大量使用的协程。&br&&/p&&p&又比如:&/p&&p&已知你现在有4个核心,你要使用多线程做wordcount的问题,问在1G的数据量下,开几个map线程,几个reduce线程能够使得处理时间最快?等这类最优调度问题。&/p&&p&但是,无论如何改进性能,他们仍然还是受到阿姆达尔定律和斯塔夫森定律的限制。&/p&&br&&p&&b&总结:linus说得有道理,在多核下一些问题(很大一部分问题)无法获得好的加速比。对于那些有好的加速比的问题(比如多线程处理大数据,图像处理,服务器),并行程序并且已经大量地运用了。但是我们在阿姆达尔定律和斯塔夫森定律的限制下,仍有对现有并行机制的改进余地,无论从编写难度和性能上。&/b&&/p&&br&&p&因为能力有限,本文权当抛砖引玉,就像坎宁安法则所讲:”在互联网上得到正确答案的最好方法不是提问,而是po一个错误的答案“,欢迎指正。O(∩_∩)O哈!&/p&&p&这里没有提到:&/p&&p&1、linus文中讲到的微体系架构对并行的影响,譬如:乱序执行,cache等&/p&&p&2、并行研究领域最新的研究,谈到并行必须看看他们在做什么啊~~~&/p&&p&希望能够看到这方面的答案。&/p&&br&&p&------------------------------------------------------------补充---------------------------------------------------------&/p&&p&今天与大神讨论,大神补充了我忽略的角度,&a href=&/people/kennethtse& class=&internal&&Kenneth&/a&聚聚提到了&/p&&p&功耗角度,Linus提到:”在移动领域里,不大幅增加能耗的情况下,你没办法再塞进更多的核。任何一个理智的人都不会为了要塞入更多的内核而阉割内核以降低其大小和性能,阉割内核的唯一理由是你想进一步降低功耗,因此你还是不会得到大量的核“&/p&&p&”假如你要做低功耗通用计算机视觉,我基本可以保证你不会使用通用图形处理器(GP CPU)。你甚至不会用图形处理器,因为其功耗也太高了。你大概会用特殊的硬件,很可能是基于某些神经网络的硬件“&/p&&p&功耗是一个相当重要的角度,这是我之前完全没有意识到的一个问题,Linus一语中的啊~~&/p&&p&另外,Linus提到的微体系架构的问题,估计也是重要的一点,只不过能力有限,不了解。。&/p&&br&&p&-----------------------------------------------------------瞎扯扯-------------------------------------------------------------&/p&&p&未来众核可能是趋势(?)但是是什么样子的?&/p&&p&是众多general核心?&/p&&p&是几个general核心拖着众多小核心?(intel MIC,CPU+GPU)(参考自&a href=&///?target=http%3A//.cn/s/blog_a43b3cf.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Intel MIC 没有免费的午餐_gpu并行计算&i class=&icon-external&&&/i&&/a&)&/p&&p&无论如何,能耗是关键(写到这里时,我旁边的伙计来了一句:”核多没关系,能关就行,频率可以调,电压可以调就行“,哈哈~~)&/p&
:用于研究一个程序在使用多个处理器时与使用单个处理器时可能出现的加速比。考虑一个运行在单处理器上的程序,执行时间中的(1-f)部分表示其代码是固有的、只能被串行执行的部分,f部分表示其代码可以无限制地并行、无调度负载。则使用具有m…
Linus并不是第一个出来抨击多核化、并行化的大佬,Donald Knuth也曾开足火力猛轰多核&br&&a href=&///?target=http%3A///articles/article.aspx%3Fp%3D1193856& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Interview with Donald Knuth&i class=&icon-external&&&/i&&/a&&br&&br&除了搞OS和上层应用、算法的人,在体系结构圈内部,Yale Patt(现代乱序执行微结构的重要贡献者之一)也曾在公开场合多次抨击多核,认为多核下的tuning很无聊、众核更是根本不知怎么用,等等。&br&&br&这些吐槽是有道理的,虽然说能够并行化的应用不少,但是也有极多的应用根本没办法并行或者并行的收益尚不如投入的成本,而且并行编程大大推高了程序员们的学习开销,抱怨吐槽都是免不了的。&br&&br&饶是如此,多核化在学术圈里面仍然认为是大势所趋,单核心性能早已经瓶颈,硬件乱序多发射的性能已经基本榨干,再花多大力气去嚼前人留下的那些干巴巴的渣渣也嚼不出多少甜头来了,多核心上倒是还有不少东西可以做,还没有到山穷水尽的地步。
Linus并不是第一个出来抨击多核化、并行化的大佬,Donald Knuth也曾开足火力猛轰多核
除了搞OS和上层应用、算法的人,在体系结构圈内部,Yale Patt(现代乱序执行微结构的重要贡献者之一)也曾在公开场合多次抨击多核,认为多…
&img src=&/6afae0f764cabbb64d42d0_b.jpg& data-rawwidth=&506& data-rawheight=&407& class=&origin_image zh-lightbox-thumb& width=&506& data-original=&/6afae0f764cabbb64d42d0_r.jpg&&&br&&br&马里奥碰到花朵就变身。&br&&br&什么是马里奥?一个装着 16 × 32 个小色块的长方形,其中一些色块填着颜色,另一些没有。什么是花?一个 16 × 16 的正方形。什么是「变身」?把马里奥这个方块里面代表衣服的褐色变成红色,代表背带裤的红色变成白色。什么是褐色?暂且说它是 0x887000 这个数字。什么是「碰到」?马里奥的长方形与花朵的正方形有所重叠。什么是「重叠」?假设马里奥的这个方块占据屏幕(什么是屏幕?一个能装下 256 × 240 个小色块的矩形)中 X 方向 101 到 116、Y 方向 21 到 52 之间的区域,那么只要这个区域内有一点或更多点也被花朵所占据(比如花朵处在 X 116 到 131、Y 21 到 36 之间的区域内),我们就认为两者有所重叠。&br&&br&若给定以八个数值代表的两个矩形区域,请写出判断两个区域是否有重叠的 C 语言程序。如果你能写出来,那么祝贺你,如果有朝一日你想自己做一遍 NES 版本的《超级马里奥》,你至少知道让他变身需要做什么了。&br&&br&是的,C 语言也许「只能」做数学题。可是,绝大多数游戏的运行过程就是不停地做数学题,而所谓编写游戏,也就是把游戏的规则和游戏的效果转化为数学题而已。其中不少题目电脑都已经知道怎么解——是别的程序员事先告诉它的——比如「求一堆散落在三维直角座标系之中的多面体在 8(x-3)-10(y+1)-11(z-1)=0 这个平面上一个给定范围内的投影」或者「给定一些彼此相连的顶点,求任意两点之间的最短路径」之类的数学题,它只需要千万分之一秒就能给你解好。这种能力有什么用?电脑上 FPS 游戏的本质活动就是不停地求三维座标系下的多面体经过变换之后在二维平面上的投影,不停地判断两个多面体是否彼此重叠,以及不停地寻找两个顶点之间的最短路径,最终达到让怪物冲到你面前咬你一口的目的。不止游戏如此,其他软件也都差不多,每一个细节都是某种数学题——比如知乎页面顶端的蓝色导航条背景,就是 CSS 描述的一个浅蓝到深蓝的渐变——渐变是怎么回事呢?给出两个数字分别代表两种颜色,以及第三个数字代表一段距离,求一系列颜色的数值以及次序,使得这段距离中两种相邻颜色之间的变化最小。数学题。别说 C 语言,一切编程语言最终都只能做数学题,根据给定的数据,算出另一些数据,算出更多的数据,然后存贮、发送或者呈现算出的数据。&br&&br&不过我能理解你的困惑。投入大量时间看完教程,结果只能在黑框里输出一串数字。这是在学编程还是在向七十年代致敬?编程是这样无法给人成就感的活动吗?是,也不是。看你的表述,应该不是小孩子了,因为小孩子不会因为初学编程能做的事情很少而没有成就感,或者说,觉得这样做没有成就感的小孩子根本不会继续学下去。最初学编程的成就感单纯来自于「我居然可以指挥机器做一些事」,至少我小时候用中华学习机编一个程序帮我算暑假作业上的四则运算题时是这样感觉的。写出这些程序并用它解题虽然远比自己动笔去把题目算出来费时,却让人乐此不疲。那时候我还不知道马里奥碰到花会变身这种事情其实也是靠编程编出来,所以我也不会去想学编程「并&b&不能&/b&做什么」。&br&&br&无奈大多数人过了一定年纪就很难再靠「我能指挥机器」这种简单原始的快乐来驱动自己学编程。见过世面,听过传言,欲望和野心变得复杂而庞大,你想要图形界面,音乐音效,人工智能,云端同步,可是你闷头学了几堂课,还是只学会在黑框里显示一串数字。你怀疑这是学 C 语言的错,于是你到知乎上来问了这个问题。&br&&br&你的疑惑是有道理的。&br&&br&如果能把编程学下去,日后你就会明白,任何程序都是一座冰山,最终用户能看到的界面和使用的功能,只是程序浮在水面上的十分之一。知乎这个网站其实也是个运行在某台电脑上的程序,你能看到的十分之一是用什么编写的呢?HTML,CSS,JavaScript,或者 Objective-C。而你看不到的那十分之九是用什么编写的呢?Python。这些你无法直接观测到的 Python 程序运行在世界某个角落的某些计算机上,隔着光缆、双绞线和无线基站,为你面前或掌上的用户界面注入生命。&br&&br&&img src=&/4e6cabdb54c15_b.jpg& data-rawwidth=&518& data-rawheight=&588& class=&origin_image zh-lightbox-thumb& width=&518& data-original=&/4e6cabdb54c15_r.jpg&&( &a href=&///?target=http%3A///353/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/353/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& )&br&&br&……可是 Python 是用什么编写的呢?C 语言(当然,这么说并不严谨,Python 理论上可以用任何其他语言实现,实际上也已经被用很多其他语言实现了,不过这并不是重点)。任何编程语言都是实现某个功能的工具,Python 实现了知乎这个网站的大部分功能,而 C 实现了「用 Python 写程序」这个功能。为什么是 C?&br&&br&&blockquote&C 很别扭又缺陷重重,却异常成功。固然有历史的巧合推波助澜,可也的确是因为它能满足对于这样一种系统实现语言的需要:既有相当的效率来取代汇编语言,且又足够地抽象而流畅,能够用于描述各种各样的环境之下的算法与交互。&br&&i&C is quirky, flawed, and an enormous success. Although accidents of history surely helped, it evidently satisfied a need for a system implementation language efficient enough to displace assembly language, yet sufficiently abstract and fluent to describe algorithms and interactions in a wide variety of environments.&/i&&br&——C 语言之父,Dennis M. Ritchie&/blockquote&&br&C 是初代程序员所使用的语言,那时候硬件很贵,软件必须高效;而计算机的用户都是职业程序员,对于硬件有足够的理解。C 贴近硬件,就意味着它容易译成机器能懂的语言,而它的设计者也并不需要操心普通人学起来可能会比较困难——而且,说真的,其实也不很难。但是,这么多年过去之后,软件规模变得越来越大,C 就像锤子和手锯,修小木屋得心应手,造摩天楼就比较力不从心;但 C 语言可以用来造出其他更适合建造摩天楼的工具,乃至组成摩天楼的预制件,就好比用锤子和手锯造出挖掘机和吊车、混凝土板和一体门窗一样(当然,这个类比并不十分贴切。可是没有什么类比能贴切地描述软件工程,因为软件工程像许多东西,却又什么东西都不像)。&br&&br&所以,回到你的问题上来,是的,学会 C 计算机语言真的可以开发出很多东西,但除非内力深厚,场合适当,并且闲得蛋疼,大多数人不会拿 C 或者只拿 C 来开发太大的东西。如果你只是想要一门能够让你「编辑出一个啥子游戏或者软件出来」的语言,而且你用 Windows,那建议你转去学学 C#。它长得和 C 挺像,但却能迅速地写出至少是带有图形界面的程序,用起来也很方便,鼠标点一点就能让你对自己的程序看起来什么样有个比较直观的印象。还有,在国内,C# 的教材也相当容易找到。当然 Python 也是一个很好的选择。&br&&br&&img src=&/601cf5b6adc3d883a8cc9e_b.jpg& data-rawwidth=&640& data-rawheight=&429& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/601cf5b6adc3d883a8cc9e_r.jpg&&&br&另外,还有一件事你必须弄明白:现代的所谓编程这一活动,其实大部分时候是在「合理地堆砌别人已经实现的功能来实现新的功能」,C 语言莫不如是,比如 printf 这个东西,是别人做出来的「把一些数据按照指定格式输出到屏幕上」这一功能。而别人还做出来许多其他功能,比如「在发现用户短时间内连续两次按下鼠标又松开的时候调用你写好的一个函数」。学会怎样在 C 或者其他任何程序语言中使用这些既有功能,也是学习编程的一门重头戏。等你弄明白这一点,你也就找到了你问题的答案。&br&&br&尾注:题图画错了。马里奥身宽应为 16 像素,我画成了 17。
马里奥碰到花朵就变身。 什么是马里奥?一个装着 16 × 32 个小色块的长方形,其中一些色块填着颜色,另一些没有。什么是花?一个 16 × 16 的正方形。什么是「变身」?把马里奥这个方块里面代表衣服的褐色变成红色,代表背带裤的红色变成白色。什么是褐色…
已有帐号?
无法登录?
社交帐号登录
10901 人关注
212 条内容
2247 人关注
151 条内容
308 人关注
7640 人关注
1533 条内容}

我要回帖

更多关于 值得收藏的白酒 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信