精华内容
下载资源
问答
  • Excel中避免计算结果出错的技巧

    千次阅读 2011-01-23 19:39:00
    下面就介绍一下几种常见的错误信息和避免出错的方法: <br /> 错误值:#### <br /> 说明:输入到单元格中的数据太长或单元格公式所产生的结果太大,使结果在单元格中显示不下或是日期和时间...

    下面就介绍一下几种常见的错误信息和避免出错的方法:

      错误值:####

      说明:输入到单元格中的数据太长或单元格公式所产生的结果太大,使结果在单元格中显示不下或是日期和时间格式的单元格做减法,出现了负值。

      解决:增加列的宽度,使结果能够完全显示。如果是由日期或时间相减产生了负值引起的,可以改变单元格的格式,比如改为文本格式。

      错误值:# DIV/0!

      说明:试图除以0。这个错误的产生通常有下面几种情况:除数为0、在公式中除数使用了空单元格或是包含零值单元格的单元格引用。

      解决:修改单元格引用,或者在用作除数的单元格中输入非零的值。

      错误值:# VALUE!

      说明 :如果使用了不正确的参数或运算符,或者当执行自动更正公式功能时不能更正公式,都将产生这样的错误信息。

      解决:这时应确认公式或函数所需的运算符或参数是否正确,并且公式引用的单元格中包含有效的数值。

      错误值:# NUM!

      说明:提供了无效的参数给工作表函数,或是公式的结果太大或太小而无法在工作表中显示。

      解决:确认函数中使用的参数类型正确。如果是公式结果太大或太小,就要修改公式。

      错误值:# NULL!

      说明:在公式中的两个范围之间插入一个空格以表示交叉点,但这两个范围没有公共单元格。

      解决:取消两个范围之间的空格。

    展开全文
  • 抵押 一个Web应用程序,用于计算抵押贷款的摊销时间表。 与许多此类Web应用程序不同,该应用程序避免出错 用户手册 尚无用户指南。
  • 此文觉得非常有逻辑性,而且有很多量子计算方面的常识介绍。大部分资料都是网络公开的,这里做了一个汇集。因此,转发到博客里。 文章目录 (一)量子是个啥? (二)各种量子技术都是啥? (三)量子计算机有啥用?...

    写在前面

    此文觉得非常有逻辑性,而且有很多量子计算方面的常识介绍。大部分资料都是网络公开的,这里做了一个汇集。因此,转发到博客里。

    文章目录

    (一)量子是个啥?

    (二)各种量子技术都是啥?

    (三)量子计算机有啥用?

    (四)量子计算机怎么做?

    (五)当前量子计算实验研究的各路高手都是谁?

    (六)量子计算到底难在哪?进展到哪一步了?

    (七)量子计算何时商业化?

    (八)中国的量子计算处于什么水平?

    (九)结束语:我们为什么研究量子计算?

    前言

    首先也最重要的是,我们在谈论任何科技进展的时候都必须分清三个概念:科学事实、理论构想、未来展望。

    科学事实必须是清晰、准确、可重复的实验结果。确凿的实验事实是最扎实的科学知识。例如,氢原子有一个质子和一个电子,正常人有23对染色体等等。当前量子计算机的研究也是建立在非常坚实的实验基础之上——后面会讲到,在过去的二十多年里,科学家已经在量子物理的两条新战线上分别取得了里程碑式的重大进展。

    理论构想是依据已知科学事实、通过逻辑推演得出的预言或设计。再精妙的理论构想也要经过实验检验之后才能被称为事实。例如,1916年,爱因斯坦在广义相对论的基础上提出了引力波的预言;但是这个构想直到1974年天体物理学家 Russell Hulse 和 Joseph Taylor 用 Arecibo 射电望远镜发现脉冲双星 PSR 1913 16 后才首次得到明确验证(敲黑板,并不是最近的 LIGO 实验)。不过,不是所有的理论家都像爱因斯坦一样伟大。科学史上,优美的理论预言最终没能通过实验的检验是再常见不过的事。

    另一类未能实现的理论构想存在于工程设计中。很多童鞋可能都知道达·芬奇的“飞机”设计手稿,这里我们说另外一个例子——英国数学家和工程师 Charles Babbage 最早在1837年设计出了一种叫分析机 (Analytical Engine) 的机械计算机。用现代的计算理论看,分析机就是一台图灵完备 (Turing-complete) 的通用计算机,它有内存、有算数逻辑单元、有指令集、有条件与循环控制,编程方式很接近今天的汇编语言,理论上可以用纯机械方式完成现代电子计算机的所有运算。1843年,英国数学家 Ada Lovelace(著名诗人拜伦的女儿)为分析机编写了一段伯努利数的计算程序,被认为是地球上的第一只程序猿。但是,分析机的复杂与精密程度超过了十九世纪机械工程的水平,Babbage 生前也没能为此得到足够的经济支持,于是这个原本可以成为人类第一台通用计算机的伟大设计就永远地停留在了图纸上,直到一百年后电子计算机问世。

    其实,今天我们研究的量子计算机很像当年 Babbage 的分析机——都是非常精妙的理论构想,但在工程实践上都超前于时代,并且量子计算机的超前程度要远大于分析机。今天的“量子算法”研究者也很像当年的 Ada Lovelace——在给一台现实中还不存在的机器写程序。探索未来是基础研究非常迷人的地方;但我们同是要明白,不是所有构想都能成为现实,量子计算机从理论设计到真正问世中间有很长很长的路要走。

    未来展望不用多说,举一个例子就够了:“二十一世纪是生命科学的世纪。”

    事实、理论和展望在科研中都是必要的,但它们可靠性依次显著降低。科技炒作的核心手段之一就是在宣传中把构想当作事实,把主观展望当作客观结论。当下关于量子计算的种种“大新闻”大多如此。所以请大家在阅读下文的时候特别注意三者的区别。分清这几个概念,在我看来是比具体知识更重要的科学素养的体现。

    (一)量子是个啥?

    量子不是一种粒子,它在多数情况下是一个形容词而不是名词。它也不是指分立、不连续,而是一套自然规律的总称——这套规律是人类现有认识范围内物质世界的“基本法”。

    用个类比:古时侯人们就懂得万物生长靠太阳、种田栽树要浇水施肥,这些都是农作物生长的规律;而现在我们知道,这些绿色植物生命活动的本质是细胞中的光合作用、呼吸作用等一系列生物化学过程。物理世界也是如此。我们日常生活中接触到的各种力、热、电、光现象大多可以用建立于十七到十九世纪的经典物理学解释;但进入二十世纪后,科学家们发现世界是由原子组成的,如果想从分子、原子水平的上更本质地理解自然现象,就必须引入一套与经典物理很不一样的新规律,这就是量子力学。引用当代最知名的理论物理学家 Sheldon Cooper 博士的话:

    Quantum physics makes me so happy. It’s like looking at the universe naked.
    量子物理是人类迄今为止建立的最基础、最精确的科学理论,现代物理学的主体就是量子力学在各种不同物质尺度上的具体延伸和应用。然而,依人们日常的经验和直觉来看,这套规律非常诡异,尤其是下面三点:

    量子叠加 (quantum superposition):在量子世界中,物体可以同时处于不同状态的叠加上。从另一个角度说就是“波粒二象性”。
    量子纠缠 (quantum entanglement):在量子世界中,相互作用的物体之间存在着一种不受距离限制的、用任何经典规律都无法解释的关联。这种关联携带着信息,使得发生纠缠的各个物体处于一种不可分割的整体状态,不能分别描述。著名的“薛定谔猫态”就是思想实验中一只猫和一个放射性原子的纠缠态(猫也因此成为了量子物理学家的图腾,喵星人表示很无辜)。控制和利用量子纠缠,是量子信息处理的物理本质。
    量子测量 (quantum measurement):量子世界中不存在安静的暗中观察者,测量不是被动地读取信息,而会根本地改变被测物体的状态。它最简单的表现就是“海森堡不确定关系”。量子测量的这种必须干扰被测物体的诡异属性使得人们从量子系统中获取信息变得极其困难。实际中,我们制造量子计算机遇到的大部分难题最终都能归结到量子测量。

    量子在不少人的印象中可能非常前沿甚至有点玄妙;但熟悉现代物理的童鞋都知道,量子力学正式建立距今已有九十多年,是一套相当成熟的科学理论。那么今天的科学家又在研究什么?按照理论造一台量子计算机不就完了?

    不是这样的。科学家对任何一种自然现象的研究必须经过“发现-理解-控制”三个阶段之后才有可能将其转化为实际应用。以我们比较熟悉电磁学为例:人们在古代就发现了雷电、磁石,在近代又发现了电流磁效应、电磁感应、电磁波…;经过库伦、安培、法拉第、麦克斯韦等几代科学家的努力,人们逐渐理解了各种电磁现象的内在规律,并最终形成了统一电、磁、光的经典电磁理论;与此同时,科学家们发明了莱顿瓶、伏打电堆、螺线管、电动机、发电机、天线等最基本的物理装置来控制电磁场,使得人们最终可以利用这种自然力进行工程实践,才有了后来的电气革命和信息革命。

    那我们对量子的研究走到哪一步了?量子的概念主要起源于19世纪末、20世纪初的一系列原子物理发现;量子力学在1925年后建立并迅速成熟,但是这套完备的理论建立在一些诡异的基本原理之上,人们对这些基本原理的理解至今还很欠缺;不过真正要命的是,尽管量子力学可以用来解释和预测海量的自然现象,“如何控制量子物体”的研究却一度进展地相当缓慢——在1990年代之前,科学家都几乎没有控制单量子态的能力。由此导致的结果是,人类对量子力学的应用至今仍非常初级。类比来说,晶体管、激光、核磁共振、原子钟这些发明对量子原理的开发程度,大概也就和指南针对电磁原理的开发程度差不多。简言之,相比于对微观世界的认识,人类在实验上控制、测量量子系统的能力还很落后,这至今仍是量子技术发展的最大瓶颈。

    (二)各种量子技术都是啥?

    A. 涉及量子原理的经典机器

    这一类发明大多在上世纪中期出现,包括晶体管、激光、原子钟、核磁共振等等。

    “涉及量子原理”是指这些仪器的核心工作原理都源自原子尺度上的、必须用量子力学解释的物质性质——半导体的能带、原子的受激辐射、超精细能级结构、原子核的自旋磁矩等。

    那为什么说它们是“经典机器”?这是因为这些仪器只是在微观组成上涉及量子力学,人机交互的过程是完全经典的。例如,晶体管的功能来源于半导体中电子和空穴的运动;但是人使用晶体管不是去控制每一个电子和空穴,而是控制各个接口电压、电流的输入输出。这里的电压、电流都是有大量微观粒子参与的、完全经典的物理量,观测不到什么量子涨落 (quantum fluctuation)、不可同时测量之类的怪事。电路中的晶体管也不会处于开和关的量子叠加,晶体管之间也不会发生量子纠缠… 所以,晶体管只是在工作的微观原理上涉及量子现象,人使用晶体管的过程、用晶体管设计电子电路的方法则完全不涉及量子物理。

    把晶体管、激光这类发明称为量子技术很容易让我们落入逻辑滑坡——万物的微观组成都是量子的,半导体是,木头、棉线也是,那照着么说木工、针线活也都算是量子技术咯?因此,活在21世纪,我们需要明白:尽管微观组成不同,激光器和缝纫机一样属于经典机器,真正的“量子机器”是我们需要依据量子力学原理来控制、使用的机器,比如——

    B. 量子通信 (quantum communication)

    激光、晶体管不算量子机器的本质上是因为人们在这些仪器中控制的只是大量微观粒子的集体运动,而不能对单个原子、电子或光子的量子态进行单独操控。人类在单量子态水平上的第一种工程实践直到上世纪末才出现,那就是量子通信。

    量子通信直白地说就是“量子电报”。传统电报机收发的是经典电磁波,信息加载在电磁波的幅度、频率或者相位上;“量子电报机”收发的是单个光学频率的光子,信息加载在光子的不同量子态上。量子通信的物理基础就是单光子的产生、操纵、传输和测量。

    量子通信最早的理论方案在1984年和1991年被分别提出,1992年第一次得到了实验的原理性验证,随后在科学家们的努力下向着距离更长、装置更简单实用的方向发展。此中贡献尤其大的是瑞士日内瓦大学的 Nicolas Gisin,他领导的实验室除了一系列使用纠缠光子实现量子通信的标志性实验外,最重要的是在1997年发明了不用纠缠光子的“plug & play”实验方案,成为实用量子通信的经典方法。1995年, Gisin 实验室借用瑞士电信公司跨日内瓦湖的湖底光纤,在日内瓦和尼永 (Nyon) 两个相距23公里的城市之间实现了第一次长距离户外量子通信。Gisin 与同事创办的 ID Quantique 公司于2003年实现了量子通信的商业化。2007的瑞士大选中,日内瓦大学与 ID Quantique 为日内瓦州的电子选票传输提供了量子加密,这是量子通信技术第一次被官方公开使用。此外,美国的 MagiQ Technologies 和法国的 Smart Quantum 公司等也很早都开始提供商业化的量子加密服务。

    那么,这种收发单个光子的“量子电报机”究竟强大在哪?人群中对此流传着几个误解:

    误解一(低级错误):量子通信可以超光速

    不可以。所有利用了量子纠缠的量子通信方案同时还都需要一个经典信道的辅助,而经典通信不可以超光速。

    误解二(中级错误):量子通信比经典通信更快

    不是。量子通信的主要意义不是加速,而是保密。它传递的不是信息正文,而是加密密钥(也就是余则成藏在抽屉里的密码本)。量子通信的实际应用通常也被称为量子密码学 (quantum cryptography) 或量子密钥分发 (quantum key distribution)。经过量子加密的信息正文依然是由普通通信方式传递的。

    误解三(高级错误):量子通信是绝对保密的

    并不是。正确的说法是:在理想条件下,量子通信在信息传输过程中是无条件安全的。特别地,这种的安全保障并非来自加密的数学复杂度,而是测量必须干扰量子态、未知量子态不可复制等基本物理原理——这是量子加密与经典加密最本质的区别。

    然而,量子通信的安全性只是理想条件下的数学结论——假设光子传输过程中没有损耗、假设单光子态的制备、测量是完美的等等,很显然这些条件在实际中都不成立。在2008年到2010年间,就至少有三个利用由实际中非理想条件导致的安全漏洞攻击 ID Quantique 或 MagiQ 商用量子通信系统的实验取得了成功,从事实上证明了第一代量子加密技术绝非不可破解。现实条件下量子通信的安全问题和优化方式目前仍是一个活跃的研究领域。

    更重要的是,量子通信的安全范围仅限于光子的传输过程中;而一个完整的通信过程至少包括编码、发送、传输、接收、解码几个步骤,量子力学定律可以保证密钥在理想的量子信道中不被窃听,但对收发两端的经典安全问题无能为力。这一点其实让量子通信的实用价值大打折扣——在现代保密系统中,安全隐患不仅出现在传输过程中,还经常出现在收发两端。所以,尽管物理学家一直在大力宣传量子通信,不少信息安全专家却对此持有怀疑——不可否认,量子通信是非常有趣的物理实验,但它在现实中真正对信息安全有多大提高还存在疑问。鉴于这些实际问题,尽管量子通信的基础研究在1990年代就已非常火热(瑞士之外比较有代表性的还有奥地利维也纳大学、美国 Los Alamos 国家实验室、伊利诺伊大学、IBM 实验室、英国电信实验室等),进入新世纪之后却逐渐降温,除了小范围之外没有得到大规模的应用和政府支持,直到2017年中国的量子保密通信“京沪干线”开通。

    如此说来,量子通信的意义到底在哪?我认为客观地说,量子通信的基础研究意义大于实用价值。且不谈量子加密在实际中的安全问题,保密通信本身在科技发展的大局中也只是一件小事。但是,量子加密技术的基础是1980年代以来一轮量子物理的重大进展——利用光学光子研究量子纠缠。这轮研究的主要动机是对量子力学基本问题的探索——在此之前,人们对量子力学诡异属性的理解主要限于量子叠加,对更加诡异的量子纠缠、特别是纠缠和测量结合后出现的一些严重挑战经典世界观的深刻问题主要限于哲学讨论,而缺乏科学实验。这其中最著名的就是量子非定域性 (quantum non-locality) 检验,它将直接判明经典世界观中的局域因果性 (local casuality) 和客观实在性 (objective reality) 是否在真实世界中同时存在。对此的实验探索起源于1970年代的美国,但最关键的工作主要出现在欧洲——除 Nicolas Gisin 外,最具代表性的还有法国光学研究所 (Institut d’optique) 的 Alain Aspect 和奥地利维也纳大学的 Anton Zeilinger 等。这一领域的科学家们在二三十年间通过一系列基本而巧妙的光子实验极大地深化了人类对于量子纠缠的理解,让量子力学通过了最严苛的检验;同时积累了大量制备、操纵、测量单光子的实验技术,并开始思考量子纠缠的实际应用,直接导致了量子通信技术的诞生。这在我的理解中是当代量子科技的第一个里程碑。即使当前实用价值有限,理解和控制量子纠缠都是构造更复杂量子机器的必要前提,比如——

    C. 量子计算 (quantum computing)

    量子计算机不是“下一代计算机”,不是电子计算机的升级版,而是科学家构想中的一种高度复杂、高度可控的人造量子系统,兼具信息处理的功能。量子计算机是人类当前设想中最复杂、实现难度最大的量子机器,一旦建成对科学和社会的影响也最深远。

    量子计算是本文之后全部内容的主角。

    此外,量子技术还包括量子仿真(quantum simulation)、量子传感 (quantum sensing) 等。

    (三)量子计算机有啥用?

    先澄清一种流言:量子计算机一旦做成,直接秒杀经典计算机。

    正确的说法是:理论构想中的大型、通用、容错量子计算机会在几类特定问题上有超出经典机器的计算能力。

    量子计算机和“摩尔定律”到没到头关系不大。

    量子计算机并不是一种更快的计算机。它在逻辑、输出方式等方面与经典计算机根本不同,其中最本质的就是量子纠缠的存在。在量子信息学的观点中,量子纠缠是与物质、能量、信息并列的一种自然资源,利用好这种资源能使量子计算机发挥出巨大威力。但是,如何用它设计更快的算法,在理论上就是很大的挑战。目前,对绝大多数计算问题,理论家们都还没有找到超过经典算法的量子算法;但在一些特殊问题上确实有了新的发现。哪些问题呢?最早发现的主要有两类:一类可以归结为质因数分解(Shor 算法),比已知最快经典算法有指数加速(准确说是超多项式加速);另一类可以归结为无序搜索(Grover 算法),比经典算法有多项式加速。

    Shor 算法和 Grover 算法分别于1994年和1996年被提出,可以说是它们的发现引起了科学界对量子计算的真正重视——尽管量子计算的初步概念在80年代初就已出现,但十几年来都只是很小圈子内的理论游戏,被认为既无法实现也没有用处;Shor 算法和 Grover 算法终于为量子计算机找到了可能的实际应用。其中 Shor 算法的影响尤其大——现代密码学中,几类常用的公钥系统包括 RSA (Rivest–Shamir–Adleman) 和 ECC (elliptic-curve cryptography) 等的基本加密原理都可归结为大数分解的计算复杂度。因此量子计算机一旦出现,将给现有的信息安全带来巨大威胁。

    不过这种威胁并不紧急——想运行 Shor 算法破解密码需要有至少上百万个量子比特的通用、容错量子计算机,这其中的任何一个词在短时间内都无法实现。并且,关于量子计算机无法破解的“后量子时代加密技术”的研究也已经有了不少成果。所以,单是破密码这类“黑客活动”并不会赋予量子计算机科技革命式的重要意义。在 Shor 和 Grover 算法提出后的十来年里,再没有第三类重要的量子算法被发现,量子计算理论的发展一度走向平缓。

    但新的突破在2008年出现—— Aram Harrow、Avinatan Hassidim 和 Seth Lloyd 提出了 HHL 算法:在一系列前提假设下,量子计算机可以在对数复杂度内求解一些特殊的线性方程组。这让这个领域又一次火了起来——与 Shor 算法只有“黑客应用”不同,线性方程组在现代计算中可以说是无处不在。特别地,它是很多拟合、推断、优化问题的基础。HHL 的各种衍生算法与这些年人工智能的热潮结合,让这类研究有了个不能更时髦的名字——量子机器学习,这也让量子计算机第一次拥有了商业价值。更好的是,一些量子机器学习算法只需要有50到100个量子比特的小型量子计算机就能展现出优势,这在当前实验发展的趋势下并非遥不可及。在潜在利润的驱动下,从2011年开始,特别是2014年之后,各大商业公司开始纷纷关注量子计算。这也是量子计算开始在各种媒体上频繁出镜的时候。

    该说但是的时候又到了。HHL 算法与之前的 Shor 算法和 Grover 算法有根本的不同——严格地说 HHL 不是一个具体算法,而是一个在特殊假设和限制条件下的算法模版,或者说是一个完整算法的一部分。它没有回答数据应该怎样读入读出,没有回答如何才能让量子计算机按照给定的参数演化,并且有非常苛刻的适用范围。任何一个细节条件不满足,量子加速都会消失。以 HHL 为模版设计一个具体算法就需要填补上这些细节,但极少有实际问题满足全部的限制条件,且满足这些条件的特殊问题很多时候都有更好的经典算法(各种量子机器学习算法中声称的加速绝大多数都是在用特殊条件下的量子算法和通用的经典算法做比较)。当前量子机器学习的研究多是在抽象地发掘量子算法在某些计算步骤中的优势,而少有人下大功夫考虑具体问题和完整的计算过程。简言之,理论家们找到了算法模版,但还没有明确落实可以使用这套模版的具体问题,也没有可以运行这套算法的机器。因此,现在我们的结论只能是:量子算法有希望加速机器学习中的某些步骤,但具体该怎样做还有待研究。

    以上似乎有些悲观:量子计算机短时间内在传统的计算问题上还没有清晰明确的应用。但其实从物理学家的视角看,量子计算机最有价值的潜在应用并不是传统意义上的计算,而是量子仿真 (quantum simulation)——自然界中原子、分子的微观过程遵守的都是量子力学;可由于量子纠缠的存在,再强大的经典计算机也不能对规模稍大的量子系统(比如几十个原子)进行严格求解,而只能借助近似(密度泛函、Monte Carlo 等),这就是现代计算物理、计算化学的核心。然而,量子计算机就是一台自带量子纠缠的机器,最适合在编程之后模拟待研究的复杂量子系统,也就是用量子机器求解量子问题。最原始的量子仿真在近二十年里已经是冷原子物理的重要方向,但它真正发挥出威力还是要等量子计算机的出现。那时,凡是涉及大量微观粒子的研究,例如凝聚态物理、量子化学、分子生物学都将发生很深刻的变革;相应的应用学科,例如材料合成、药物研发等,也都会有很本质的改变。

    说了这么多,量子计算机到底有啥用?量子计算起源于好奇心驱动的思维游戏,近二十年有了坚实的实验进展,但它在短期内还将是一种基础研究,没有立即可操作的实际应用。可从长远来说,它将给给现有的计算理论带来深刻变革,将极大加深人类对物质与信息的理解;特别地,它将是一种前所未有的计算微观世界的强大工具。类比来说,量子计算机像是计算机中的火箭。火箭再强大,也不能取代火车、汽车、自行车,因为它们的根本用途不同。同理,量子计算机价值的并不是取代经典计算机,甚至主要不在于加速传统计算,而是在于一些经典计算机不能解决的特殊问题,比如复杂微观系统的模拟。量子计算并不是“后摩尔时代”的计算,它与传统的微电子是两个目标不同、平行发展的领域,不可以相互替代。未来量子计算机的第一波应用也将是对科学的意义大于对商业,对科学家的意义大于对普通人。

    所以,现在的程序员们大可继续安居乐业。研究奇怪的新机器就交给一小撮量子发烧友就好啦~

    (四)量子计算机怎么做?

    量子计算机是用“原子”和光子做的。更确切说,是直接用“原子”和光子做的。这里的“原子”既可以是天然原子,也可以是固体系统中的“人造原子”;光子有的在光学频率,有的在微波频率。

    量子计算机运行的物理过程,就是单量子尺度上的原子-光子相互作用。这是人类有史以来最精巧的物理实验之一。

    量子力学主要是微观粒子的科学。但是在它创立之初,科学家们没有能力在实验上控制单个微观粒子,以至于玻尔、海森堡、薛定谔、爱因斯坦这一代前辈们只能在脑子里做单个粒子的思想实验,例如关着一个光子的盒子、观测单个电子的显微镜之类。真的在实验中做到这些一度被认为是根本不可能的。

    1971年在巴黎高等师范学院,一位叫 Serge Haroche 的博士生用光学泵浦 (optical pumping) 方向的课题参加答辩。一位评委问他:“你的实验中有大量的原子和光子,为什么要用量子理论去描述呢?” Haroche 回答:“老师,有一天我会用一个光子做这个实验。”

    这是 Serge Haroche 在他的 Nobel Lecture 上讲的。2012年,他与 David Wineland(美国国家标准与技术研究所 NIST)因为首先实现单个原子和光子之间的非破坏测量与控制获得诺贝尔物理学奖。Haroche 的实验系统叫腔量子电动力学 (cavity quantum electrodynamics)——让处于极高激发态的原子一个个地飞过微波腔,与腔中囚禁的一个或几个光子相互作用,用原子控制和测量光子的量子态;Wineland 的实验系统叫离子阱 (ion trap)——用激光冷却和射频电场囚禁一个或几个带电离子,再用电磁场和激光对离子进行量子操纵和测量。

    在这里插入图片描述
    腔量子电动力学实验概念图(巴黎高等师范学院 Serge Haroche 实验室)

    在这里插入图片描述

    Paul 离子阱实验概念图(奥地利因斯布鲁克大学 Rainer Blatt 实验室)

    腔量子电动力学和离子阱实验刚开始时,量子计算的概念还很不受重视。它们本来也只是纯粹的基础物理研究。但是到了90年代后期,大家开始意识到单量子态的操纵和测量就是量子计算的基础。随后,物理学家又在几类不同的物质系统(超导量子电路、半导体量子点、固体缺陷等等)中实现了非常可靠单量子态控制,宣告了量子计算实验研究的开始——在我的理解中这是当代量子科技的第二个里程碑。如果把未来的“量子工程”比作建高楼,那么这一步就好比是学会了烧砖。人类从此可以开始以高度可控的方式操纵量子世界的基本单元,逐渐构建复杂的人造量子系统。

    每一种高度可控的单量子系统理论上都有可以作为量子计算机的基本组成。然而在实际中,不同的物理方案的差别很大。目前最领先的量子计算实验系统只有两种——一个是离子阱,另一个是超导量子电路。

    用电磁场囚禁带电离子的研究从1950年代就已经开始。Paul 阱和 Penning 阱的发明人—— Wolfgang Paul(德国波恩大学)和 Hans Dehmelt(美国西雅图华盛顿大学)在1989年分享了诺贝尔物理学奖。1970年代,原子的激光冷却技术出现并迅速应用于离子阱;1989年,David Wineland 实验室首次实现了汞离子的基态冷却,离子阱走入量子时代。早期,离子阱主要的发展动力是精密测量,例如测量电子反常磁矩、提供超高精度频率标准(原子钟)等。直到1995年,科学家们才意识到这是一个非常理想的量子计算平台。21世纪的头十年里,离子阱几乎在各类量子计算实验系统中保持绝对领先,它最明显的优势有:

    干净:单个或几个离子是干净的无杂质系统,量子相干时间很长。
    精密:离子的量子逻辑门和测量的保真度 (fidelity) 很高。
    容易多体纠缠:任意两个离子之间都可以相互作用(产生纠缠)。另外,自然中的同种原子是完全相同的,离子阱也特别适合模拟量子多体系统。
    而然它的劣势也是明显的:

    慢:天然原子与光子的相互作强度有限,导致离子的控制和测量都很慢(大概比超导量子电路慢一千倍)。
    实验手段复杂:冷原子类实验都需要非常精巧复杂的激光、真空和电磁场装置。
    集成困难:离子依靠电磁场“悬浮”在阱中。同一个阱中最多也就囚禁十几到几十个完全可控的离子,直接大规模集成几乎没有可能。
    在离子阱的研究者试图攻克这些难题的时候,一种很不一样的系统开始逆袭。

    量子理论自创立之初就一直有个重大疑问:这套理论究竟是只适用于微观粒子,还是也适用于宏观物体?这与量子纠缠一样都是历史遗留问题,长期只有理论争辩而没有实验进展。1982年,一支伯克利加州大学的三人小组——英国物理教授 John Clarke、法国博士后 Michel Devoret 和美国博士生 John Martinis,开始用一种叫 Josephson 结的超导体-绝缘体-超导体三明治结构试图观测宏观量子现象;几年之后,他们通过宏观量子隧穿和微波谱的测量得到了明确结论——在极低温下,Josephson 结的宏观相位遵守量子力学规律。特别的是,这里的宏观量子现象不是指“大量量子力学粒子组成的宏观物体(例如超导体)”,而是一个必须用量子力学描述的宏观自由度(Josephson 结相位)。尽管这个人造器件中有几百亿甚至更多的原子,它们的一个集体运动自由度却是量子的,我们可以像控制单个原子一样控制这个超导器件。因此,这类包含 Josephson 结的宏观量子器件也被称为超导人造原子 (superconducting artificial atom),它们组成的电路就是超导量子电路 (superconducting quantum circuits)。

    2000年前后,世界各地的多个实验团队( 法国 Saclay 原子能研究所、日本 NEC 基础研究室、荷兰 Delft 理工学院、美国国家标准与技术研究所 NIST 等)先后实现了几类不同超导人造原子的量子叠加。2004年,耶鲁大学 Robert Schoelkopf 实验室首先观察到单个微波光子与超导人造原子的相互作用,这类实验系统被称为电路量子电动力学 (circuit quantum electrodynamics)。2007年和2009年,耶鲁大学 Robert Schoelkopf 实验室和 Michel Devoret 实验室发明了两种目前最重要的超导人造原子——transmon 和 fluxonium。接二连三的重要进展让超导量子电路在十年内迅速成为最有希望的量子计算系统之一。

    在这里插入图片描述
    一些重要的超导人造原子:
    左上:超导电荷量子比特(日本 NEC 基础研究室蔡兆申实验室)
    左下:超导磁通量子比特(荷兰 Delft 理工学院 Hans Mooij 实验室)
    中上:超导相位量子比特(圣芭芭拉加州大学 John Martinis 实验室)
    中下:quantronium 人造原子(法国 Saclay 原子能研究所 Michel Devoret 实验室)
    右上:transmon 人造原子(耶鲁大学 Robert Schoelkopf 实验室)
    右下:fluxonium 人造原子(耶鲁大学 Michel Devoret 实验室)

    在这里插入图片描述

    电路量子电动力学实验概念图(耶鲁大学 Robert Schoelkopf 实验室)

    超导量子电路最大优势在于它是一套可以在宏观尺度上对光子和“原子”进行相互控制和测量的“人造工具箱”。它的各种参数和性质不是由大自然设定,而是可以通过设计在很大范围内进行调整,让科学家可以通过工程方法解决各种实验问题。这使得它相比天然原子

    快:通过器件设计可以增大“原子”-光子相互作用强度,实现纳秒速度的量子逻辑门。
    实验手段简化:超导量子电路需要在 20 mK(绝对零度之上0.02摄氏度)以下的极低温工作,这用目前已经商品化的稀释制冷机 (dilution refrigerator) 很容易实现,无需各种复杂的激光冷却和囚禁装置。
    作为固体器件,很容易通过现代微纳加工进行大规模集成。
    但是超导量子电路也有不少缺点。人造原子终究没有天然原子干净完美,超导量子电路在量子相干时间、逻辑门准确度、频率稳定性等方面一直都不如离子阱。但科学家们一直在不断通过新的器件设计来试图解决这些问题——超导人造原子的相干性在十几年内已经提高了十万倍(从最初的几纳秒到现在的上百微秒)。这几年来,超导量子电路已经成为最受关注的量子计算技术,在学界和业界都很受青睐。

    除此之外,比较热门的量子计算实验系统还有固体缺陷(金刚石色心、碳化硅色心等)、半导体量子点等。但是,离子阱和超导量子电路目前处于明显的领先状态,我认为有两个根本原因:

    基本组成简单。人们对单个原子的结构和低温超导体的性质已经相当清楚。
    控制方法成熟。激光和微波技术都已经经过了半个多世纪的发展,激光冷却和稀释制冷目前也都相当成熟。
    这使得物理学家不再需要花很大精力研究“原子”和光子本身,而是可以把它们作为可靠的基本工具来构造更复杂的量子系统。而很多关于固体缺陷和量子点的研究重点还是制备、控制方法和基本物理性质,它们是非常有价值的物理和材料研究,但是在量子计算的水平上暂时与离子阱和超导量子电路不处在同一个发展阶段。此外,中性原子、线性光学等系统在基本的原理验证上有一定意义,但一般认为在实用方面的发展空间比较有限。

    最后需要单独一提的是“拓扑量子计算 (topological quantum computing)”,它基于一种理论预言中的非阿贝尔任意子 (non-Abelian anyon)——Majorana 费米子。过去五年间,已有多个实验室在固体系统中观察到了 Majorana 费米子存在的迹象,但至今仍未确定,也无法对其进行任何量子操作。准确地说,当前的“拓扑量子计算”是一种以量子计算为潜在应用的凝聚态物理研究,而非真正的量子计算研究,处于基本单元尚未发现的最初构想阶段。这个方向近几年热度很高,但它还属于基础的凝聚态物理,暂时不应该和其他量子计算实验系统并列起来,相互比较没有太大意义。

    不同实验系统之间孰优孰劣一直是大家津津乐道的话题。然而绝大多数宣传(包括学术论文和报告)的基本思路就是以己之长比他人之短,为自己的方案吸引关注、申请经费,撕来撕去没有什么客观结论。从我自己的角度认为,

    所有实验系统都为量子计算的原理验证做出了贡献
    离子阱和超导量子电路暂时领先
    超导量子电路更接近一种灵活实用的工程系统,未来的设计空间和发展潜力更大(当然这属于展望,我很有可能是错的~)

    (五)当前量子计算实验研究的各路高手都是谁?

    离子阱和超导量子电路作为最领先的实验系统,已经开始出现“巨头垄断”的趋势——在长期的经验积累下,个别超一流实验室已经和其他竞争者拉开了一个身位。这种优势并不只是技术领先,更重要的是所挑战问题的难度、复杂性和前瞻性。这些超一流实验室全都在美国和欧洲。

    目前,全世界大概有三十几个离子阱实验室。积累最深、影响力最大的除诺奖得主 David Wineland 外,还有美国马里兰大学的 Christopher Monroe 团队和奥地利因斯布鲁克大学的 Rainer Blatt 团队。这两个实验室在实现多体量子纠缠、尝试量子纠错以及离子阱技术实用化等方面都走在全世界的最前列。

    超导量子电路实验室全世界也已经有了几十个。其中处于最核心位置的有两个,分别在美国东西海岸——东海岸的耶鲁大学和西海岸的圣芭芭拉加州大学/Google。它们各自的掌门人就是当年伯克利宏观量子隧穿三人小组中的两位年轻人。

    1984年,Michel Devoret 在两年博士后之后回到法国,在法国原子能研究所 (CEA Saclay) 建立了自己的实验室。与法国物理学家 Daniel Esteve 和 Christan Urbina 一起,他们的 Quantronics 实验室在九十年成为世界著名的介观超导结构单电子输运研究组,致力于探索宏观电路的量子效应,最终在1998年在2002年分别发明了超导电荷量子比特 (Cooper pair box) 和 quantronium 人造原子。2002年,Devoret 与因研究分数量子霍尔效应闻名的理论物理学家 Steven Girvin 一起加入耶鲁大学,与当时年轻的助理教授 Robert Schoelkopf 组成了密切合作至今的“三驾马车”。耶鲁团队2004年发明了电路量子电动力学结构,成为当前超导量子电路最核心的控制和测量方法;2007年发明 transmon 人造原子;2009年发明 fluxonium 人造原子;2010年发明量子极限放大器,实现 single-shot 量子非破坏测量;2010年首创三维电路量子电动力学;2013年提出 cat-code 量子纠错码;2016年实现超导电路的远程量子纠缠 (remote entanglement)…… 可以说,耶鲁团队在过去15年间贡献了当前超导量子计算主要的电路结构与控制、测量方法,并且目前在逻辑量子比特、远程量子纠缠、量子极限测量等方面都在领跑世界。

    1987年,John Martinis 博士毕业,在 Michel Devoret 实验室做过博士后之后,加入美国国家标准和技术研究所 (NIST) ,成为低温超导器件的专家,并在2002年发明超导相位量子比特。2004年,Maritnis 加入圣芭芭拉加州大学 (UCSB),此后十年与同门师弟、纳米力学专家 Andrew Cleland 密切合作,实现了多种量子电路构架,在材料、工艺等工程细节方面尤其精湛,特别注重实验设计的实用性。2014年,Martinis 实验室全员被 Google 收购,开始着力于具有一定规模的实用量子芯片的研究,目前在平面量子电路的复杂度和技术质量上保持领先。

    除了两大领头羊外,全世界还有十来个原创能力较强的超导量子电路实验室。其中,美国伯克利加州大学、芝加哥大学、普林斯顿大学、马里兰大学、瑞士苏黎世联邦理工学院、荷兰 Delft 理工学院、法国原子能研究所、巴黎高等师范学院的实验室都是由耶鲁团队曾经的学生和博士后带领。此外,美国 IBM Watson 研究中心和麻省理工学院林肯实验室各有一支人数很多、工程执行力很强的研究团队。日本理化研究所 (RIKEN)、瑞典 Chalmers 理工学院也有竞争力较强的实验室。

    其它量子计算系统也都有各自的超一流实验室,例如(不完整名单)

    金刚石、碳化硅色心:德国斯图加特大学 Jörg Wrachtrup、荷兰 Delft 理工学院 Ronald Hanson、美国芝加哥大学 David Awschalom、哈佛大学 Mikhail Lukin……

    半导体量子点:美国普林斯顿大学 Jason Petta、哈佛大学 Amir Yacoby、荷兰 Delft 理工学院 Lieven Vandersypen……

    “拓扑量子计算”:荷兰 Delft 理工学院/微软 Leo Kouwenhoven、丹麦哥本哈根大学/微软 Charles Marcus……

    不过与离子阱和超导量子电路非常关注量子系统的设计、控制和测量不同,量子点与“拓扑量子计算”当前最关键的主要还是材料和工艺,更接近基础的凝聚态物理;固体色心除了量子信息,还在纳米光子学、材料和生物成像等方面有不少应用。所以这些系统还没有那么“巨头垄断”,一流研究组比较多,新实验室的发展机会也更多。

    (六)量子计算到底难在哪?进展到哪一步了?

    在这里插入图片描述
    这是2013年 Michel Devoret 和 Robert Schoelkopf 发表在 Science 上的“量子计算台阶图”。下一层实验是上一层实验的基础;但这并不是一个直线升级过程——为了上一个新台阶,在它之下的所有台阶都必须不断优化。所以,我们站的越高工作量就越大,量子计算机越往后做越难。

    图上的前三层大致对应量子力学的三大诡异属性——叠加、纠缠、测量。到目前,主要的量子计算实验系统(不计“拓扑量子计算”)都已经站上了前两层。但不是每种系统都站上了第三层。

    迄今为止,没有任何一种系统完成了第四层(量子纠错、逻辑量子比特)。

    开头说过,人们研究量子计算遇到的麻烦大多都能归结到各种形式的量子测量。

    对经典计算机来说,数据输出是很直接的——按高低电平区分二进制数就好。然而,量子计算的过程一般只涉及几个基本能量量子,比如一次电路量子电动力学色散读出 (dispersive readout) 一般只用5到10个微波光子,如此微弱的信号如何测量?要知道,世界上最好的半导体微波放大器(液氦温度下工作的高电子迁移率晶体管 HEMT)放大一个光子大概要添20个光子的噪声。另外,单量子水平的测量一般都要改变粒子的量子态,甚至直接毁灭粒子(比如光电倍增管的原理就是通过光电效应将入射光子转化为电流并放大,但测量之后被测光子直接被吸收)。总之,想从量子系统中高效地读出信息是件非常困难的事。

    对量子计算来说,最理想的测量是 single-shot 量子非破坏测量 (quantum non-demolition measurement)——测量不毁灭被测粒子、第一次测量后粒子状态不再改变、每次测量结果都可分辨。对于离子阱和金刚石色心,这可以通过激光荧光 (laser-induced fluorescence) 实现。但超导人造原子只有微波跃迁,且微波光子的能量只有光学光子的十万分之一,单光子探测非常困难。2010年后,这个问题终于由电路量子电动力学色散读出加量子极限放大器 (quantum limited amplifier) 解决——后者是也是一类极低温下工作的超导电路,放大一个光子只添一个光子的噪声,这是量子涨落导致的海森堡极限。对量子极限放大器的发明贡献最大的是耶鲁大学 Michel Devoret 实验室和伯克利加州大学 Irfan Siddiqi 实验室。这让超导量子电路成为第一个站上台阶图第三层的人造系统。

    第四层(逻辑量子比特)困难就更大了,原因还是量子测量——理论构想中,我们总希望人是量子计算机的唯一观察者。可实际上,环境无时无刻不在对量子系统进行测量。这种测量会导致量子计算机与环境产生纠缠,不再保持理想的量子纯态,逐渐失去量子相干性,这个过程叫量子系统的退相干 (decoherence)。从信息的角度讲,量子信息会逐渐丢失在环境中而不是进入我们的测量装置,实验者是在与环境抢信息。量子信息丢失的时间就是这个系统的相干时间 (coherence time)。目前,最好的超导人造原子的相干时间大多在10到100微秒之间。也就是说,直接用它们做成的量子计算机最多只能连续工作万分之一到十万分之一秒。

    任何量子系统都无法避免退相干。更麻烦的是,相干性与可控性之间有密切联系——相干时间越长,表明系统与环境越隔绝,但这同时意味着它和人也越隔绝,对它的控制和测量也越难。我们总是希望量子计算机与环境隔离,但容易被人控制,这本身就是矛盾的。现实中,不同物理系统的相干时间会有很多数量级的差别,但相干时间越长的系统逻辑操作也越慢(比如天然原子、离子),在相干时间内能完成的运算量差别并不大。所以,不谈控制、测量的速度和精度、单纯强调某种系统相干时间长是没有意义的。

    由于退相干,量子计算机一度被认为永远不可能做成,直到量子纠错 (quantum error-correction) 概念的出现。

    纠错在经典信息技术中就很常见。最简单地,我们可以对信息复制多个副本来防止个别副本的误码,这与重要文件一式多份防止篡改同理。但是,未知的量子态是不可复制的,我们不能为量子信息制作多个副本。新的思路在1995年出现——我们可以把一量子比特信息分散存储在几个高度纠缠的量子比特里,通过测量错误征状 (error syndrome) 来查错纠错。单独的天然或人造原子称为物理量子比特,多个物理量子比特纠缠形成容错的逻辑量子比特。经过量子纠错,逻辑量子比特的寿命会远超过物理量子比特的相干时间,这才是真正计算意义上的量子比特。

    到目前,任何实验系统都没能做出逻辑量子比特。没有量子纠错的“量子计算机”就只能在相干时间内做一些最简单的运算。Google、IBM 等公司近两年一直在比拼芯片上“量子比特”的数量,但它们都只是寿命几十微秒的物理量子比特,逻辑量子比特的数量都是零。

    量子纠错是人们研究量子计算机迄今为止遇到的最难的问题。在我的理解中,它的实现将是当代量子科技的第三个里程碑——人类从此有方法保护在自然界中转瞬即退相干的量子态,就好比从原始人从采集到种植、从狩猎到畜牧;在工程上,它将为大型通用量子计算机提供基本逻辑单元。当下量子计算最大的挑战就是实现逻辑量子比特,而不是在一块芯片上集成多少物理量子比特。

    量子纠错理论在90年代末就达到了第一个高潮,其中最重要的成果是 stabilizer code。然而问题远没有这么简单:查错、纠错的过程都是复杂的多比特量子操作,本身就会引入错误。stabilizer code 只有在量子逻辑门本身精度非常高的情况下才会有效,否则就是纠错过程中出的错要比不纠错还多。举例来说,如果用三级 Steane 7比特纠错码级联(432个物理量子比特编码一个逻辑量子比特),对一个130位的整数分解质因数需要大概一百万个物理量子比特,且比特和逻辑门的出错率不能超过百万分之一。这在短期内是任何技术都无法企及的。所以,stabilizer code 尽管非常简洁通用,但受到当前实验水平的限制,不是实现逻辑量子比特的首选。

    新一代的量子纠错方法通过放弃通用性来降低对实验精度的要求——纠错码不再是抽象的数学方法,而是为特定实验系统、特定电路结构专门设计。但这带来一个结果:不同团队就如何爬第四个及之后各个台阶的路线出现了明显的分歧;即使做同一种物理系统,也会因为不同的实验方案选择不同的纠错码。在超导量子计算领域,目前主要的路线有两条:一是平面结构、单片集成、使用 surface code 纠错;另一条路线是三维结构、模块化集成、使用玻色纠错码。以下将它们简称为 Google/UCSB 路线和耶鲁路线。

    A. Google/UCSB 路线

    Surface code 本质是一种拓扑纠错码,它用超导量子电路的具体实现方案由UCSB(现Google)团队与理论合作者在2012年提出。它的基本物理组成非常简单:近邻耦合的超导人造原子按照平面方格(国际象棋棋盘)排列即可。它对量子操作精度的要求远低于 stabilizer code,当前最好的实验水平几乎已经达到。这种路线受到很多团队、特别是商业公司实验室的欢迎,Google、IBM、Intel、Regetti Computing 都选择平面集成大量 transmon 人造原子,其中 John Martinis 带领的 Google 团队在工作质量和思路创新上明显领先。

    但是 surface code 的劣势也是非常明显的。它的基本单元很简单,但代价是系统极其复杂,电路规模巨大。目前,Google 9比特芯片中的两比特逻辑门保真度 (fidelity) 约是99.3%,要提高到99.5%以上才有用 surface code 进行量子纠错的可能。但即使逻辑门保真度再提高十倍(这非常非常困难),实现一个逻辑量子比特也需要几千个物理量子比特,质因数分解一个5位数需要约四千万个物理量子比特,分解一个600位数需要约十亿个物理量子比特!要知道微电子学经过了半个多世纪的发展,今天的 Intel Core i7 芯片上才有十亿个晶体管。并且量子电路的集成并不像经典电路一样直接——芯片做大会大大增加量子比特之间的串扰和噪声,想维持小规模电路的质量非常困难。所以,通过 surface code 实现量子纠错,并不比大规模运行 Shor 算法这种遥远的宏伟目标简单多少。

    选择 surface code 的商业实验室都明白这一点。但他们在宣传上几乎都对此少谈或不谈,转而强调不经过量子纠错的小规模量子电路可能的实际应用。但如第(三)部分所说,50到100个相干时间几十微秒的物理量子比特是否真有实际应用现在还很不确定。于是这些团队再退而求其次,将近期目标设为实现 quantum supremacy——在实验上证明量子电路在解决某个特定问题时比所有经典计算机都快。2016年Google 团队在理论上提出,49个物理量子比特可以在随机量子电路的输出采样这个特殊问题上超过所有经典计算机,这离当前的技术前沿并不遥远。Quantum supremacy 一旦实现将会是量子计算威力的第一次真实展示,也因此成了各个商业实验室短期内竞争的焦点;但这个实验的象征意义远大于实际价值——这个量子电路算得更快的问题是专门为验证 quantum supremacy 设计的,并不是一个实际问题。Google 团队及其理论合作者也多次公开表示,quantum supremacy 只是通向实用量子计算的长征上的一个近期阶段性目标,目的在于演练对小规模量子系统的控制能力;仅实现 quantum supremacy 的芯片依然不能做任何有用的工作。

    B. 耶鲁路线

    2013年起,耶鲁团队与其理论合作者提出了另一种非常不同的量子纠错方案——用谐振腔内的微波光子作为逻辑量子比特,超导人造原子仅用来控制和测量微波光子,通过量子非破坏测量对微波光子的宇称 (parity) 做持续追踪来实现纠错。按编码逻辑量子比特的光子态的不同,具体的纠错方法有 cat code、pair-cat code、binomial code、GKP code 等很多种,统称为玻色纠错码(光子是一种玻色子)。以微波光子做逻辑量子比特有很多好处——谐振腔内光子的寿命长、能级多、误码原因简单(光子损耗)、与超导人造原子相互作用强… 更重要的是,这是一种高效利用硬件的纠错方案——一两个物理量子比特和一两个谐振腔就能构造一个逻辑量子比特,不像 surface code 需要成千上万个物理量子比特。过去五年里,耶鲁团队已经对 cat code 进行了大量实验,在2016年突破了量子纠错的 break-even point——第一次在实验中测得逻辑量子比特的相干时间长于它的所有物理组成;在2018年初实现了误码征状的容错测量,将逻辑量子比特的相干时间提高到1.9毫秒,遥遥领先于其他团队。另外,分别位于巴黎高等师范学院、芝加哥大学、清华大学的几个实验室也都在用相似电路结构进行玻色纠错码的实验研究。

    玻色纠错码的实现难度也很大。我们需要非常巧妙地设计系统中超导人造原子和微波光子之间的相互作用,来实现一些精巧的人造量子光学过程(例如四光子泵浦等)。另外,如何纠正多光子损耗、如何平衡各种玻色纠错码的利弊等问题都很挑战。但在当前进展下,这些难题很有希望在短期内被攻克,而不是非常遥远的目标。

    总结说,Google 路线是先集成、再纠错,基本单元简单,电路规模庞大,主要难度在于工程复杂性;耶鲁路线是先纠错、再集成,电路精简,主要难度在于精巧的量子光学过程。但无论哪条路线,最重要的都不是物理量子比特数量。

    耶鲁路线无需集成大量物理量子比特就有希望实现逻辑量子比特。Google 路线需要大规模平面集成,但比数量更重要的是质量——数量做大并非难事,真正困难的是如何在芯片做大的同时保证每个量子比特的相干时间以及量子逻辑门和量子测量的保真度。这也是 Google 团队过去几年工作最出色的地方:5比特、9比特芯片上每一个物理量子比特的质量几乎都与单独测量的时候一样高,并希望能延续到22比特 Foxtail 芯片。这个数字不是随便选的——与5比特、9比特的一字排开不同,22比特将采用双排排列,这是形成二维阵列的第一步,将带来很多芯片结构和工艺的新挑战。这就是量子电路研究,每往前一步都要无比谨慎,越往下走越难。John Martinis 一向以治学严谨甚至苛刻闻名,在他的领导下 Google 团队正在高质量、有章法地沿着自己提出的路线步步为营。然而不是所有团队都像这样扎实,这两年超导量子计算领域最流行的宣传卖点就是量子比特数,不考虑量子纠错方案、不强调控制和测量的精度,好像谁的芯片上物理量子比特多谁就领先了一步。各家 IT 巨头和创业公司动不动就在新闻或年会上“发布”一块多少比特的芯片,以证明自家的“进展”和“竞争力”,这样是纯粹的商业炒作,在科学上没有意义。2018年3月5日早上,Google 团队的 Julian Kelly 在美国物理学会三月年会一场邀请报告的最后简单展示了一下计划中的72比特 Bristlecone 芯片的设计版图(我就在会场),这根本不是那场报告的重点;但它立刻被宣传成“Google 发布72比特量子芯片”,甚至在半天内席卷中文媒体,朋友圈里排队转发,还引发了各种一本正经的对当下“量子争霸”的“战略评论”,实在让人觉得荒唐。看过这些乱象,我向大家推荐三条屡试不爽的经验判据:

    所有以量子比特数作为首要亮点的“进展”几乎都是炒作
    所有在新闻媒体上首发或大肆渲染的“进展”几乎都是炒作(包括麻省理工科技评论,那是一家独立运行的商业创投杂志,不是学术期刊)
    所有在朋友圈里大量转发、被非专业人群大量关注的“进展”几乎都是炒作

    量子纠错之上的各个台阶(逻辑量子比特的控制、纠缠、测量,到最终的容错量子计算)难度只会更大,具体有哪些挑战现在还无法预计,因为我们的实践还根本没有到那个阶段。不过在这方面耶鲁团队再次领先一步——2016实现两个谐振腔之间的纠缠、2017年底实现光子收发 (photon pitch-and-catch),2018年初通过量子隐形传态实现两比特逻辑门 (teleported CNOT gate)。这些都是直接对逻辑量子比特的操作,只是微波光子还未经量子纠错。耶鲁路线允许我们现在同时开始挑战第四、五、六个台阶,一系列结果还是非常振奋人心的。

    相信以上都看下来的童鞋已经明白,量子计算是一条越爬越陡的天梯,我们现在还只处于很初步的阶段。我们遇到的问题会越来越多、越来越难,但我们解决问题的能力也会越来越强。大型、通用、容错量子计算机什么时候做出来?任何明确答案都是不负责任的,因为它太难做、未知挑战太多、现在我们根本没法给出负责任的估计。用另一条经验判据结束这一部分:

    在现阶段,所有“多少年后做出量子计算机”的承诺都是炒作。

    (七)量子计算何时商业化?

    进军量子计算的商业公司很早就有了。2007年,在学术界还在研究基本的物理量子比特的时候,一家叫 D-Wave System 的神秘加拿大公司突然宣布自己做出了一台量子计算机的原型机 Orion。Orion 不是一台基于逻辑门的通用量子计算机,而是一台量子退火机 (quantum annealer)。它有16个超导量子比特,但不对量子比特做单独控制,而是用绝热演化的结果求解一些特定问题。之后,D-Wave 的退火机越做越大,2011年推出128比特的 D-Wave One,这是世界第一个量子计算商品,售价1000万美元,被军火巨头洛克希德·马丁 (Lockheed Martin) 公司买下;2013年推出512比特的 D-Wave Two,被 Google、NASA、USRA 联合买下;之后在2015和2017年又推出了1000比特和2048比特的 D-Wave 2X 和 D-Wave 2000Q,全都找到了买主。

    这些听上去很厉害的 D-Wave 机器到底有多强大?这在十年来一直争议不断。问题是,科学家甚至说不清 D-Wave 退火机到底是不是一台量子机器。D-Wave 机器里有没有量子纠缠?一些实验表明很可能有。那 D-Wave 机器有没有量子加速?绝大部分测试表明没有。特别在2015年,一支合作团队(包括 John Martinis 在内)用 D-Wave Two 最适合解决的专门问题对它的计算复杂度随问题规模的增长规律做了严谨的测试,结果是这台512比特的机器没有任何量子加速!这一大堆量子比特放在一起到底发生了什么?谁都说不清楚。不过测试 D-Wave 机器的过程很大程度上帮助科学家们明确了量子加速 (quantum speed-up) 的严格定义。另外一点是很有趣的:人们用一堆量子比特很容易地就造出了一台自己不理解的机器。直到现在,基于量子退火的绝热量子计算 (adiabatic quantum computing) 还是量子计算中的一个比较独立的分支,不少人都在继续发掘它的潜力,希望它能对解决一些特定的优化、仿真问题发挥作用。

    量子计算真正的商业热潮从2014年开始——Google 全员买下了 John Martinis 在圣芭芭拉加州大学的实验室,成为“ Google 量子人工智能实验室”的一部分,并立刻给这群低调的科学家配上了强大的宣传团队。各家 IT 巨头纷纷坐不住了,各种专营量子计算的创业公司也开始出现。

    目前,各种参与量子计算的商业公司主要分四类:

    第一类是 IT 或工业巨头,其中 IBM 和微软上场远比 Google 早。IBM 十多年前就在 Waston 研究中心建立了以耶鲁毕业生和博士后为骨干的、颇具规模的超导量子计算实验室和理论组。IBM 的量子实验室曾经专注于扎实的基础研究,领取政府经费,与大学实验室无异;直到几年前才开启商业竞争模式。

    微软很早就在圣芭芭拉加州大学内建立了 Station Q,专注于“拓扑量子计算”理论,也曾是完全的学术导向。这两年微软在荷兰 Delft 理工学院、丹麦哥本哈根大学、澳大利亚悉尼大学、美国马里兰大学、普渡大学、Redmond 总部都新建了 Station Q;最重要的是,把这一领域最有影响力的两位实验物理学家 Leo Kouwenhoven 和 Charles Marcus 收入麾下。

    Intel 2015年起也不甘落后,并且兵分两路,在 Delft 理工学院与 Leonardo DiCarlo 实验室(前耶鲁博士后)合作发展超导量子电路,同时与 Lieven Vandersypen 实验室合作发展硅量子点。

    通用汽车公司与波音公司联合所有的 Hughes Research Laboratories (HRL) 也已经在半导体量子点方向投入多年。

    ……

    第二类是大学教授兼职创办的新公司,支持与转化自己学术实验室的成果。

    2015年底,耶鲁超导量子计算实验室的领导者——Robert Schoelkopf 和 Michel Devoret 与研究员 Luigi Frunzio 创办 Quantum Circuits, Inc.,2017年11月完成 A 轮1800万美元融资。

    2016年,马里兰大学实验物理学家 Christopher Monroe 与杜克大学电子学家 Jungsang Kim 创办主攻离子阱的 IonQ, Inc.,2017年7月完成 B 轮2000万美元融资。

    2018年初,因斯布鲁克大学实验物理学家 Rainer Blatt、Thomas Monz 与理论物理学家 Peter Zoller 在政府和大学的支持下创办离子阱公司 Alpine Quantum Technologies,也已得到1200万美元经费。

    ……

    第三类是自主创业、有完整硬件实验室的新公司。其中最有名的是位于加州伯克利的 Rigetti Computing,由耶鲁博士毕业的 Chad Rigetti 在2013年创办,现在融资已接近7000万美元,员工近百人。

    第四类只做周边软件产品。这样的公司这两年出现了很多。

    这些“量子企业”到底多有希望?我的个人观点是:不同类别公司的性质是非常不同的。

    第二类(学术实验室 spin-off)会对当前的量子计算发展非常有帮助。量子实验正朝着越来越复杂的方向发展,除了核心的物理原理外还涉及大量的工程细节,其工作量已接近传统大学实验室的极限。此时,来自专业工程团队的支持,例如标准化的零件、加工工艺、专用的电子设备、控制程序将会极大地提高科研的效率。这类公司一方面解决实验中的工程问题,另一方面将学术实验室的成果做大做规范,这是一种非常良性的互动。不过,它们短期内一般没有很大的盈利计划,规模也很小。

    第一类和第三类公司都有很强的盈利目的,但都自建或接管强大的实验团队,身体力行做量子计算机,在工作和宣传方式上也都很类似。它们的主要区别在于承受风险的能力不同,巨头企业更能承受长期投入而不见回报的基础研究(当然这也很容易导致项目下马)。

    当前量子计算的主要瓶颈显著集中在物理实验,离开硬件基础提出的各种过于超前的软件概念实际意义非常有限。但这恰恰成为近几年量子商业热潮的焦点。第四类企业主营的有面向量子计算的编程语言、编译器、云服务,还有其它各种把信息技术概念前面加上量子两个字,组成一些听起来高大上、但实在不知道是什么意思的名词。这些开发成本低、周期快、新闻效应强(庞大的 IT 业界都能听懂),但其实与量子没有直接关系。在我看来,它们是纯粹的商业行为,重点是借当前的量子热潮用“概念”盈利,无关于量子计算的主要挑战和长期发展。换句话说,这些公司就没打算真做量子计算机。

    所以,量子计算商业化了吗?没法说,因为眼下的“量子产业”处于一种奇怪的形态。经过二十多年的发展,“量子硬件”仍明显在拖“量子软件”的后腿。可以预见至少在未来的一二十年里,量子计算的最大挑战还将集中于基本的物理实验和复杂、开放量子系统的物理理论,将长期是一种基础研究。但这几年它被突然推到了产业的浪潮里,人类历史上都几乎从没有过一种基础研究如此受到产业界关注。大家在物理实验还非常原始的情况下,拼命地寻找它可能的实际应用,开发各种周边产品和“服务”,配合及其高调的宣传,竭尽全力地寻找商机。产业界是现代科技发展的一大推动力,但我不认为眼下这种形式的“商业化”会明显促进量子计算的发展,也不认为这波热潮能持续多久。量子计算面临的不只是工程挑战,还有许多基本的科学问题,很有可能属于“世纪难题”。它与现实的距离比无人驾驶、电动车、商业航天等要远的多得多,我们千万不能用科技产品研发的思路理解量子计算机的研究。它的真正问世需要长期、稳定的支持,而不是利益驱动的商业炒作。

    (八)中国的量子计算处于什么水平?

    与美国和欧洲相比,处于很初级的阶段。

    为什么?首先因为量子计算不是一个凭空出现的学科,它根源于物理和工程的长期发展之上。例如,离子阱的基础是现代原子物理;超导量子电路是介观凝聚态物理和量子光学的结合;低温物理有超过百年的历史,稀释制冷技术最早出现在1960年代,至今仍基本被欧洲垄断;我们每天实验用的电子设备很多都来自美国几十年前的军工研究… 在这样的积累下,量子计算非常自然地在欧美首先出现,并且持续积累、领先至今。对这一领域贡献最大的科学家们(第五部分中提到的各位)青年时代从事的都是相关方向的基础研究,一步步创造了各种理论与实验方法,建立起这个活跃的新学科。

    1996年,奥地利维也纳大学 Anton Zeilinger 实验室来了一位叫潘建伟的中国博士生。他参与了许多重要的光子纠缠实验,五年后回到中科大。十几年来,潘建伟的实验室在多光子纠缠方面有许多漂亮的基础工作,并且大力推广实用化量子通信。2016年,中国发射了第一颗量子通信卫星,并在2017年实验成功;同年,中国开通了超过2000公里的“量子保密通信京沪干线”。目前,中国是对量子通信技术投入最大的国家,实践上也最为领先。(关于量子通信的讨论见第二部分)

    但中国在量子计算方面就要落后的多。全世界顶级的量子计算实验室本来就很少,其中的中国人更少,不少实验室甚至从不招收未在欧美受过训练的中国学生(主要是出于对中国学生动手实验能力的不信任,不是什么涉密问题)。直到这几年才开始有训练有素的年轻科学家回到中国。例如在超导量子电路方面,John Martinis 的博士后王浩华老师回到浙江大学,Robert Schoelkopf 的博士后孙麓岩老师回到清华大学,成为两大阵营在中国的代表。其它实验系统也大多如此。所以说,专业的量子计算实验室在中国只是刚刚落地出现,经验积累、合作者水平、学生水平都比世界顶级组差一大截,当前的主要任务是训练团队和基本技术,模仿、追踪世界前沿,暂时不具备做出重大成果甚至引领方向的能力。这是所有后来者都必须经过的起步阶段,是最最正常不过的。

    最近,中国的量子计算已经有了非常可喜的进步。例如去年,浙江大学与中科大的联合团队按照 UCSB/Google 路线,平面集成了10个超导人造原子(物理量子比特)并实现了它们的量子纠缠。上周,清华孙麓岩老师的实验室在美国物理学会三月年会上展示了一个量子纠错实验,很接近耶鲁团队2016年发表的工作。这都是非常好的趋势,说明中国现在已经有了第一批专业的、有高质量产出的量子计算实验室。

    但是,有一点进步就开始浮夸宣传是非常危险的。

    去年五月,我的朋友圈里排队转发了一条“重大新闻”:中国研制出世界第一台量子计算机!打开一看,是中科大的五光子玻色采样实验。虽然这两年早已习惯了各种夸大宣传,但这个标题实在超出了我的想象力(正确的说是:中科大发表了一个有趣的量子光学实验)。这种宣传气势再与量子通信、“量子卫星”的新闻结合,甚至让很多在国外读博的同学都相信了中国的量子科技已经领先世界。最近,国内几家互联网巨头纷纷开始了自己的量子“战略布局”,但从新闻稿来看,除了一些“量子软件”概念外,看不到清晰的物理实验方案(与上一部分提到的第四类公司类似)。2015年,阿里巴巴与中科大建立了联合量子实验室,各方领导隆重出席,但新闻稿充满科学错误,“中国10亿人,每个人能分到10万台天河二号”之类的豪言无异于“亩产十万斤”。美国各家公司的宣传大战尽管都有夸大、避重就轻,但总体还是有尺度的;中国的浮夸宣传完全则看不到底线在哪儿。

    可喜的进步也被各种夸大。浙江大学与中科大的10比特芯片被重点强调比 UCSB/Google 多一比特,也开始加入没有意义的比特数大战(见第六部分最后的解释)。其实这个实验中量子比特的质量、控制精度、复杂度和 Google 比还都有差距,也没有明显的方法创新。这是一个非常好的、符合现阶段发展需求的追踪工作,但不应该继续夸大。很多貌似专业的知乎答主都说这项工作至少代表中国的量子计算进入了世界第一集团,我只能说这么认为的人大大低估了世界第一集团的水平。如果非要说这是一项“重大成果”,我只能说不同人对“重大成果”的定义很不一样。

    量子计算与科技创投、大型工程(比如土木、机械、航天)都不一样,它不是人到钱到说发展就发展,而是一个在优秀实验团队主导下漫长的积累过程。为此我的另一个担心是国内的人才储备:中国的基础教育乃至大学本科都是以书本为中心,非常轻视科学直觉和动手能力的培养,善于做题而不善于解决具体问题,这是大多数亚洲学生的通病。这一点不得到根本改变,中国的实验科学还将长期落后于欧美,包括量子计算在内。这是我在耶鲁实验室工作两年多的深刻体会。只有当高水平的实验训练成为了年轻学生不难得到的资源,中国的科学才真正有能力在质量上和西方竞争。

    (九)结束语:我们为什么要研究量子计算?

    最后,说几句个人观点,涉及到自己的科学史观。

    量子计算机能做什么?破密码、做优化、加速机器学习… 这些还都很不确定,在短期内也很难实现。那还费劲做这东西干嘛?我自己认为,量子计算的研究过程将是人类物质科学和工程的一次本质进步。

    在历史上,人类的大多数科技和产业革命都是物质科学(特别是物理学)推动的。变革产生的前提是人能发现新的自然现象、控制新的“自然力”、扩展在自然中的实践范围。学会工具、学会用火、农业出现、铁器出现、蒸汽革命、电气革命无不如此。但有一个例外,就是最近的信息革命。信息革命虽然以物理为基础(电磁场、半导体、激光),但核心不是物理,而是数字逻辑。随着信息技术的发展,软件与硬件逐渐分离——底层硬件逐渐标准化,一步步接近物理极限,方法越来越受限制;主要的创新集中于顶层软件,这种趋势在今天的互联网、人工智能的热潮中日益明显。其它学科也大多如此,机械、材料等传统的“硬工科”虽然也在发展,但很少有本质突破,对社会的影响也日趋有限。一个直接表现是,不同专业的同学集体转计算机,“硬工科”毕业的工作机会普遍没有那么好。

    而量子计算是物质科学引领科技发展的一次新尝试,它第一次试图在量子水平上构造、控制物质系统,在探索自然的同时极大地扩展了人类工程实践的范围,上次迈出这样一大步也许要追溯到电气和核能。人们现在拼命寻找的量子计算机的各种应用可能都不是最重要的,就像17世纪的人想象不到什么是手机一样,我们现在也根本不知道当人类能自如人造控制量子系统之后能做多么不可思议的事情。

    我认为量子计算是当前最重要的科技问题之一,尽管真正实用的量子计算机还比较遥远。说白了有点像那句话:

    We choose to go to the moon.

    本文转载于:
    http://www.360doc.com/content/19/0412/17/63402049_828316906.shtml

    展开全文
  • 项目中用到的一个double数据处理工具类(●’◡’●)/** * Double数据的操作 使用Java,double 进行运算时,经常出现精度丢失的问题,... * 这样的情况通过double计算出来的结果去和0比较大小,尤其是有小数点的时候,

    项目中用到的一个double数据处理工具类(●’◡’●)

    /**
     * Double数据的操作 使用Java,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1。
     * 特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我们又处理其他事情。
     * 这样的情况通过double计算出来的结果去和0比较大小,尤其是有小数点的时候,经常会因为精度丢失而导致程序处理流程出错。
     */
    public class DoubleUtils {
        /**
         * double 乘法
         * 
         * @param d1
         * @param d2
         * @return
         */
        public static double mul(double d1, double d2) {
            BigDecimal bd1 = new BigDecimal(Double.toString(d1));
            BigDecimal bd2 = new BigDecimal(Double.toString(d2));
    
            try
            {
                return bd1.multiply(bd2).doubleValue();
            } catch (Exception e)
            {
                // 根据bugly观测,在进入GTOpMulPerfActivity页时有极小概率crash,故加上异常保护
                // @see http://bugly.qq.com/detail?app=900010910&pid=1&ii=152#stack
                e.printStackTrace();
                return 0;
            }
        }
    
        /**
         * double 除法
         * 
         * @param d1
         * @param d2
         * @param scale
         *            四舍五入 小数点位数
         * @return
         */
        public static double div(double d1, double d2, int scale) {
            // 当然在此之前,你要判断分母是否为0,
            // 为0你可以根据实际需求做相应的处理
    
            BigDecimal bd1 = new BigDecimal(Double.toString(d1));
            BigDecimal bd2 = new BigDecimal(Double.toString(d2));
    
            try
            {
                return bd1.divide(bd2, scale, BigDecimal.ROUND_DOWN).doubleValue();
            } catch (Exception e)
            {
                e.printStackTrace();
                return 0;
            }
    
        }
    
    }
    
    展开全文
  • 计算范式

    千次阅读 2016-07-09 10:12:33
    尝试对并行计算,分布式计算,云计算,串行计算,异构计算等概念进行梳理

    本文由giantpoplar发表于csdn,未经允许不得转载。


    引言

    从大一进入软件工程专业以来,到现在大三,陆续听说了很多关于“计算”的词语,比如并行计算,分布式计算,网格计算,云计算,串行计算,异构计算等等,这些名词大多给我一种不明觉厉的感觉,一直想着了解一下这些概念,恰好在读《云计算与分布式系统——从并行处理到物联网》一书时,看到第一章第一节里提到集中式计算、并行计算、分布式计算、云计算这四种计算范式的区别,书中使用了“计算范式”这个词,感觉这个词恰好能概括各种各样的“计算”,然后阅读了一些有关书籍,尝试着对“计算范式”这一概念进行总结梳理,尝试说清楚“是什么”。

     

    计算范式

    从字面上理解,计算,就是指使用计算机硬件(计算芯片,内存,磁盘等)对输入数据进行处理,获得输出;范式一般指一种风格,具有某种特定的特点,比如编程语言有不同的编程范式,包括过程式,面向对象式,函数式以及逻辑式等等。

    所以我理解的计算范式就是和某种 用于执行计算任务的硬件结构相适应的计算风格


    比如按照某一时刻进行计算的计算单元(一个CPU或者一个核)的个数分为串行计算(某一时刻有1个计算单元)和并行计算(某一时刻有多于1个计算单元)

    多于1个计算单元时候按照计算单元是否共享存储(内存和磁盘等)分为集中式计算分布式计算;多于1个计算单元时候按照计算单元结构是否一致分为同构计算异构计算

    云计算糅合了很多技术,一个云计算平台含有大量计算单元,这些计算单元既可以是集中式也可以是分布式;网格计算也拥有大量计算单元,一般来说是分布式的、异构的,这些计算单元是跨地区的,甚至是跨国家、跨洲的,网格的使用通常是让分布的用户构成虚拟组织(VO),在这样统一的网格基础平台上用虚拟组织形态从不同的自治域访问资源。


    摩尔定律和芯片结构

    计算机进行计算离不开芯片,关于集成电路有一条非常著名的经验定律摩尔定律,是说稠密集成电路中晶体管的数目大约每两年翻一倍(Moore's law is the observation that the number of transistorsin a dense integrated circuit doubles approximately every two years.

    最初由Intel和仙童半导体的联合创始人戈登·摩尔在1965年在一篇文章中指出,他预计这一增长速度能还能维持至少10年,实际上后来的几十年芯片的发展基本都是符合这条规律的。集成电路发展到现在,受材料的原子尺寸的大小,能耗等因素的限制,晶体管数目的增长速度已经放缓。(专业的解读可以参考知乎的一篇回答

    CPU 的摩尔定律是不是因为 10纳米的限制已经失效了?10 纳米之后怎么办?https://www.zhihu.com/question/26446061/answer/43725522 )

    CMOS电路的缩小使晶体管之间的距离成比例地缩小。距离的缩小和电容电量的减少使得硬件体系结构师可以将电路运行在更高的频率上。在相当长的一段时间里提高频率使得非并行代码的性能获得持续的提升。

    另外芯片的面积这么多年大小几乎没有什么变化,所以如摩尔定律所反映的那样,固定面积集成电路上的晶体管的数目大约每两年增长一倍,在满足以前芯片功能的情况下,还有相当的芯片面积(大约是一半?)空闲,这些空闲的晶体管便可以用来改进架构,增加专用的计算处理单元(比如浮点数处理单元),增加控制电路等等用来提升计算性能。

      但是在过去的十多年里,由于功耗和散热的限制,继续提高CPU的主频已经不够现实,很多性能提高方案都是在给定时钟周期下增加操作的数量,更多的采用并行的方式。

    另外,如果把视野从一个芯片中跳出来,就会发现还有很多使用多个CPU,多台计算机进行计算的方式来解决新的计算任务。

    我们来看一下处理器的结构

    计算机结构

    芯片结构

     

    一个最简单的,只含有基本部件的CPU芯片应该包括ALU,CU,寄存器组,总线等


    IA-32(Intel Architecture,32-bit)

    这一部分摘自Intel的开发人员手册的Volume1:Basic architecture :Chaper2的一部分,强烈建议阅读完整原文关于64位机器的部分,以及更新架构的介绍http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html . 附录一是 IA-32 产品线

    寄存器

    标志

    执行单元

    执行单元由一个或多个ALU(运算逻辑单元)构成。

    奔腾4有用于处理简单整数操作,复杂整数操作,浮点操作的独立ALU

    还有x87 FPU专门用于浮点数的处理

    控制单元

    芯片结构举例

    IA-32的芯片控制单元架构主要有P6处理器微架构和NetBurst微架构,如图这二者是类似的,现仅以NetBurst为例

     



    NetBurst提供了

    快速执行引擎(Rapid Execution Engine)

    — ALU运行频率是处理器的两倍

    — 基本整数操作可以在1/2个处理器始终周期(clock tick)发射(dispatch)

    超流水线技术(Hyper-Pipelined Technology)

    — 长流水线

    先进的动态执行(乱序执行)

    新的Cache子系统 2级cache

    超标量技术用于支持并行

    扩展硬件寄存器,避免名称冲突

    64-byte cache line size (transfers data up to twolines per sector)

     

    NetBurst的流水线(Pipelining)由前端流水线,乱序执行核心以及退役单元组成。流水线技术把一个指令分为几个步骤(微程序),每个步骤在处理器的不同部分执行,这样一个时钟周期(clock)里可以有多条指令的不同步骤在执行,如下图一个5级流水线的示意图


    p.s超标量(Superscalar)设计是说一个时钟周期(clock)可以同时处理多个指令(不是多处理器核心的情况),这种情况是处理器核心里面有多个子单元并行处理。超标量技术往往和流水线一起使用


    两条指令同时在5级流水线上执行。

     现在看流水线结构

    流水线前端

    执行单元执行速度比读内存速度快很多,经常出现CPU等待读内存的情况,影响效率,为了解决这个问题引入了预取(fetch)的概念,在执行单元需要指令/数据之前预取它们,这需要一个高速的存储区域-Cache来存储(Cache比较昂贵,所以一般容量很小,而且使用硬件完成cache和内存的映射关系,替换策略以及Cache一致性等复杂问题,这里暂且不做讨论)

    这一模块的功能包括:

             -预取prefetch可能被执行的指令

             -取指fetch还没有预取的指令

             -解码指令为微操作序列

             -从执行跟踪cache(executeiontrace cache)分发(deliver)已经解码的指令

             -使用先进算法预测分支

    具体流程如下:

    translation engine(Fetch/ Decode逻辑的一部分)持续的取指/解码目标指令,将指令解码为微操作序列(trace)

    在任何时刻,trace cache中保存着多个trace(代表了预取的分支)。从trace cache 中搜索

    活跃分支后面的指令,如果这个指令恰好是一个已被预取的分支的第一条指令,从内存层次(内存、缓存)取指/解码操作结束并且这个预取的分支成为新的指令来源。

     

    trace cache和translationengine与分支预测硬件协同工作。分支目标的预测基于线性地址,使BTB(branch target buffer)并被尽可能快的取指


    乱序执行核心

    乱序执行核心的设计是为了方便并行执行,它允许处理器重新排序指令顺序而不影响最终执行结果。乱序执行引擎分析指令的依赖关系,找到那些在程序的其他部分需要他们之前随时可以执行的独立指令,然后把这写指令分派到不同的执行单元执行。

    一个简单的举例,一条指令包含目的操作数和源操作数,在一个线性的指令流中,如果前面的指令的目的操作数出现在后面指令的源操作数中,这两条指令就存在依赖,相对顺序无法改变,可以根据这一点把线性指令流抽象为一个有向无环图,从图里面逐次取出没有前驱的指令,每次取出的指令便是可以同时执行的指令,可以据此调度指令的执行,具体见下图


    (此处有疑问,乱序执行并行的粒度,是并行 指令还是指令的微操作)

     

    乱序执行引擎的结构示意图如下


    分为分配器(Allocator),寄存器重命名(Register Renaming),微操作调度器(Miro-operation scheduler)3部分

    分配器确保缓冲区空间被适当的分配给乱序引擎正在处理的每条指令。如果所需资源不可用,分配器会停止对指令的处理并把资源分配给能够完成处理的另一条指令。

    寄存器重命名部分分配逻辑寄存器去处理需要访问寄存器的指令。这一部分不使用IA-32的8个通用寄存器,而是包含128个逻辑寄存器,它使用寄存器分配表(RAT)把指令的寄存器请求映射到某个逻辑寄存器上,以便于多条指令对相同寄存器同时进行访问

             微操作调度器检查微操作需要的输入元素,确定何时准备好处理微操作。他的工作是把准备好处理的位操作发送给退役单元,同时仍然维持程序相关性。微操作调度器使用两个队列,一个用于需要内存访问的微操作,一个用于不需要的并绑定到分派端口,分派端口把微操作发送给退役单元。

     

    乱序执行引擎每个周期(cycle)最多可以分派(dispatch)6个微操作(比trace cache和退役微操作retirement micro-op的带宽要高),绝大多数流水线每个周期(cycle)可以开始执行一个新的微操作,因此每个流水线一次可以有多个指令在执行(several instructions can bein flight at a time for each pipeline.)。有些ALU指令每周期(cycle)开始两次;许多浮点指令每两个周期(cycle)开始一次。乱序执行引擎使用了几个buffer来smoothing微指令流

     

    退役单元

    退役单元按照乱序执行引发来的微操作顺序发送给执行单元执行,然后处理结果,把执行结果重新调整使得符合最开始的程序顺序。

    当一个微操作执行完成并且写回了结果,它就退役了,从退役单元中删除,一个周期(cycle)最多3个微操作退役。ROB(Reorder Buffer)是处理器用来缓存完成执行的微操作,按序更新架构状态以及管理异常的顺序的单元(the unit in the processor which buffers completed micro-ops, updatesthe architectural state in order, and manages the ordering of exceptions)。退役部分更新分支预测单元的信息,确保其知道哪些分支已经被采用了

     

    分支预测

    引入了统计学算法和分析,用来确定指令码中最可能执行的路径。这条指令上的指令码被预取并且加载到Cache中

    分支预测使用了3种技术

             深度分支预测使用统计学方法预测分支方向,使得处理器能够穿越分支进行指令解码,可能会出错

             动态数据流分析进行实时的数据流分析确定指令的依赖关系检测乱序执行的机会,获得在多个执行单元上最有的执行序列同时保持数据的完整性

             推理性执行指的是执行一个位于一个尚未预测方向(resolved)的条件分支之中的指令(思想是在资源空闲的时候先执行一个有可能执行的指令,最后发现确实需要执行这个指令就采用结果,否则就丢弃执行的结果,以提高效率),并最终提交结果符合最初的指令流的顺序的能力。为了实现可能采用指令的调度执行与结果的提交分离的设计,乱序执行引擎使用动态数据流分析来执行指令池中可以执行的指令并把结果存在临时寄存器。退役单元线性搜索指令池中那些不再有数据依赖其他指令或者未预测(unresolved)的分支的完成了的指令(completed instruction),按照最初的顺序提交这种指令的执行结果并从指令池中退役该指令。

    SIMD和向量计算

    SIMD即单指令多数据流,一个指令同时操作多个数据,打包(packed)的整数/浮点数,处理器使用64bit或128bit的寄存器处理这些打包的整数/浮点数。这在概念上与短向量的操作类似,向量计算则是将这一概念推广到了长向量中。

    Intel处理器最早出现SIMD是在奔腾II处理器,开始称为IntelMMX技术,后来对SIMD不断扩展,有了SSE,SSE2等等扩展

    在Intel Sandy Bridge微架构处理器里加入了Intel AVX(Intel Advanced Vector Extensions)技术,支持256bit浮点指令集。

    这些指令适合3D几何,3D渲染,视频编解码这种本身具有良好并行性的操作,可以大大提升性能。

    超线程技术

    Intel HT Technology,是一种硬件支持多线程的技术,是在一个处理器核心里面有多个逻辑处理器,这些逻辑处理器共享执行资源。这样一个处理器(核心)并发可以执行两个或多个分离的指令流(线程)。用来提升多线程操作系统或者多任务应用的性能

    具体来说支持Intel HT Technology的IA-32处理器可能有两个或多个逻辑处理器(核),每个逻辑处理器(核)有自己的IA-32架构状态(architectural state):完整的IA-32数据寄存器集合,

    段寄存器,控制寄存器 ,调试寄存器去 , 大部分MSR(状态寄存器). 每个逻辑处理器都有自己的APIC(advanced programmable interrupt controller).他们共享物理处理器的核心资源包括执行引擎(execution engine)和系统总线接口。

    和多处理器的比较如下图

    多核技术

    多核技术是另一种硬件多线程技术。在一个处理器(physical package)里面有多个执行核心(core),每个核心和以前的处理器是类似的,每个核心可能使用多线程技术。核心数目的增加/超线程技术必然需要消耗大量的芯片面积,如果不是工艺的提高,这样的结构是无法实现的

    几种使用多核技术的处理器如下所示

    双核4线程


    4核4线程


    4核8线程

    Intel VT技术

    Intel® Virtualization Technology虚拟化技术是提供指令扩展,用以从硬件上支持虚拟化技术。一个拥有VMX(Virtual MachineExtensions) 的Intel64/IA-32平台可以运转多个虚拟系统/虚拟机,每个虚拟机独立运行操作系统和应用。p.s.虚拟化技术是云计算的基础

    VMX还为VMM(Virtual Machine Monitor,新的系统软件层次,运行在硬件层之上,多个操作系统可以运行在VMM层之上)提供编程接口,用于管理虚拟机

    I7处理器增强了Intel® Virtualization Technology

           使用VPID(Virtual processor ID)降低VMM的事务管理成本

           使用EPT(Extended page table)降低VMM管理内存虚拟化的事务数量

           降低了VM事务的延迟

    GPU简介

    GPU设计之初是为了图形处理,图形处理任务具有高度的并行度,有大量的独立任务,因此GPU倾向于通过复杂硬件管理大量的线程,而不是像CPU那样使用复杂的机制管理任务队列或者硬件处理隐藏SIMD指令的执行细节,是一种简单的多线程处理器,其设计目标是高效的处理大量像素点。

    GPU现在也被用来处理一些并行任务,不一定是图形处理任务。

    如下是AMD Radeon HD6970芯片的示意图


    硬件架构具有16 SIMD通道(16 SIMD lanes),使用向量流水线,在4个周期内执行长度为64的向量

     

    编程上采用lanewide SIMD模型的中间语言,即一条指令代表了SIMD单元上的一条通路。这样每个SIMD单元都是程序员可见的,与x86 SSE或AVX等向量宽度的指令不同。

    程序计数器由每个SIMD向量进行管理,所以硬件线程实际上是一个宽向量。

    通过使用一些硬件向量化的技术,将单路的程序组合到一起,可以更有效的管理分支,支持预测执行等。

    为了支持指令级并行,AMD架构通过底层中间语言的shader编译器,在每一条路上执行VLIW指令流。

     

    另外AMD还提出了APU,结合了CPU和GPU。其实intel的很多芯片也有所谓“核显”也是类似的结构

     

    下面说一下各种计算范式

     

    串行的计算:

             串行就是按照程序里指令流的顺序线性执行下来,而且只有这一个指令流。这是最简单的一种情况。

     

    并行计算

             首先说一下并发和并行的区别,并发说的是一个时间段内多个指令流在执行,在这个时间段内可能每个指令流只执行了部分时间;并行说的是在一个时间点有多个指令流在执行。

             本文开始时候提到某一时刻进行计算的计算单元多于一个时就是并行计算,其实并不是非常准确,在不同的层次上都能体现并行性。

             在指令层次,流水线技术(以及与之密切相关的乱序执行,超标量技术),就是实现多条指令同时执行(这种同时执可能是同一个指令流中的,在硬件中发生了并行,而程序并未察觉),这就是一种并行;SIMD技术以及向量处理指令,在一个指令中同时处理多组数据,这也是一种并行,是数据并行

             CPU层次 在一个多核的处理器里面,多个核心同时执行指令流;或者使用超线程的一个核心里面,多个逻辑核心同时执行指令流;又或者一台机器上多个CPU,同时执行指令流

             机器层次,当计算任务一台机器无法承担的时候,比如瞬时高并发,海量数据处理等等,这种任务一台机器无法处理,这时会将许多机器通过局域网连接起来,共同处理计算任务。

     

    分布式计算

             如果是多台自治的计算机(不共享内存)系统协同处理计算任务,这些自治的机器可能分布在不同的地域,也可能位置上比较紧密比如集群,不同的机器通过网络连接起来,在局域网中使用千兆以太网/万兆以太网可以保证数据存取的效率。

             分布式计算一个基本问题是如何将高效地计算任务分派给多台机器,又如何将多台机器上处理的结果收集整合,一个典型的做法就是MapReduce。分布式系统中一般都有一台机器作为master节点,负责协调其他worker节点,比如Hadoop就是采用了类似的做法。

             下面简要介绍MapReduce的流程

    1.      数据分区:MapReduce库将已存入GFS的输入数据(文件)分割成M部分,M是映射任务的数量。

    2.      计算分区:用户必须实现Map和Reduce函数,MapReduce库只生成用户程序的多个复制,他们包含了Map和Reduce函数,然后再多个可用的计算引擎上分配并启动他们。

    3.      决定主服务器master和服务器worker:主服务器负责挑选空闲的服务器,并分配Map和Reduce任务给他们。

    4.      读取输入数据(数据分发):先分割输入数据,每一个映射服务器读取其输入的相应部分,然后输入至其Map函数。虽然一个映射服务器可能运行多个map函数,这意味着它分到了不止一个输入数据分割。

    5.      Map函数:每个Map函数以(key,value) 对集合的形式收到分割的输入数据,处理并产生中间(key, value)对。

    6.      Combiner函数:是映射服务器一个可选的本地函数,适用于中间(key, value)对。用户可以在用户程序里调用Combiner函数。Combiner函数(和Reduce函数的代码相同)合并每个映射服务器的本地数据,然后送到网络传输,以减少通信成本。

    7.      Partitioing函数:在MapReduce中数据流中,具有相同键值的中间(key, value) 对被分组到一起,每个组里的值都应只由一个Reduce函数处理。然而实际中有M的Map任务和R个Reduce任务,M≠R是可能的,不同的Map任务可能产生了相同key的中间key-value对。采用的方法是每个Map产生的中间key-val对划分为R个区域,分块由Partitioing函数进行划分,保证具有相同key的key-val对都能存储在同一区域(多个Map结果的同一区域)。Reduce服务器i,收集所有Map服务器中区域i中的中间key-val对。


    8.      同步:当所有Map任务完成时,Map服务器和Reduce服务器的通信开始。

    9.      通信:Reduce服务器i已经知道所有Map服务器中各自的区域i的位置,使用远程过程调用来从所有映射服务器的各个区域中读取数据。

    10.  排序和分组:Reduce服务器完成读取输入数据的过程时,数据首先在Reduce服务器的本地磁盘中缓冲。然后Reduce服务器根据key将数据排序来对key-val对进行分组,之后对出现的所有相同key进行分组。

    11.  Reduce函数:Reduce服务器在已经分组的key-cal对上进行迭代。对于每一个唯一的key,它把key和对应的value发送给Reduce函数。然后这个函数处理输入数据,并将最后输出结果存入用户程序已经指定的文件中。

    数据流

    控制流

    另外还涉及到分布式存储(将海量数据存储到多台机器),容灾(master、worker节点出问题如何处理)等。

     

    云计算

             云计算有很多种说法,它糅合了很多技术,从他的用途来说可以描述为:云计算是一个资源池,可以按需要的资源量(包括CPU,内存,网络带宽,存储等)提供相应资源。

    云计算要想做到按用户需要提供相应的CPU,内存,网络带宽需要,并且要有足够的灵活性,而且要自动化管理,如果用户打电话申请服务,工作人员使用人工拼凑机器,然后安装环境配置供用户使用的方式,恐怕就不会有云计算了。

    云计算基于一种称为虚拟化的技术(云计算中使用的是虚拟化中的硬件虚拟化这种,因为效率比较高),硬件虚拟化是在物理硬件之上运行一层系统软件,称为VMM(virtual machine monitor),它负责虚拟出一个硬件环境,在这层VMM软件之上,可以运行多个操作系统,每个操作系统可以运行应用程序,而每个操作系统是感觉不到这层VMM的存在,操作系统以为自己就是运行在一台物理机器上(实际上操作系统还可能需要稍作修改),这种硬件虚拟化的实现有Xen,KVM等(p.s.Intel VT技术的支持为虚拟化的实现提供了便利)。

    使用这些软件便能控制创建多大配置的虚拟机。使用VMM可以对虚拟机动态创建,销毁,动态迁移(在不同物理机器上迁移虚拟机,而使用户察觉不到)等,云计算的按需提供服务正是基于此。

    云计算在虚拟化技术的基础上,形成了一个非常复杂的系统。云计算一般部署在数据中心中,里面有成千上万台物理机器,使用虚拟化技术可以根据用户需求动态创建虚拟机供用户使用。云负责对这些机器进行管理,需要管理虚拟机,进行物理机器的负载均衡,在系统内部信息传递,虚拟网络的管理,存储的管理,以及用户的管理等等一系列复杂的问题。

    云计算一般分为IaaS,SaaS,PaaS三种,如下图所示


    用户可以选用IaaS平台申请一台机器使用,也可以申请一批机器,组成一个虚拟集群,可以在集群之上运行分布式程序,以获得强大的计算能力;也可以使用PaaS搭建自己的tomcat web服务器;也可以使用SaaS,比如提供一个已经搭建好Wordpress的机器,提供博客服务。而这一切都是按需提供,并且由云负责审计你的使用量据此付费。

    云计算的优势在于对于用户来说不用自己购买机器,维护机器,确实能够降低成本,而云又通过规模效益获取利润,双方都能获利。云计算方面很多厂家都在做,亚马逊aws,微软asure,google gae应用程序引擎,阿里云等,做虚拟化的公司VMWare也在云计算方面不断跟进,开源的云平台openStack试图做云时代的linux与亚马逊的aws抗衡等等。

     

    普适计算

    是说人们能够在任何时间、任何地点、以任何方式进行信息的获取与处理,这需要大量的传感器(这和物联网的联系非常密切)以及大量的计算所以普适计算往往还要借助云计算的计算能力。又或许在将来会出现新的芯片,用于物联网中的设备,增强传感器的计算能力,也许就能实现普适计算了。

     

    异构计算

             从广义上来说,使用了不同结构的处理器进行计算就算异构计算,比如分布式系统里面一台机器是intel的x86芯片,另一个是x64的芯片,还有一台机器是AMD的芯片这就算是异构计算。

             另外一种情形是CPU和GPU一起用于计算,这也是一种异构计算,CPU更适合处理复杂控制逻辑,GPU则更擅长处理并行任务。很多时候可以采取在程序性能的瓶颈部分,并且具有高度并行化特点的部分使用GPU加速,这涉及GPU的使用以及和CPU的协调。芯片厂家为这种异构计算提供了编程接口,Nvidia提供了cuda(类似于C语言语法),AMD则力推openCL(open computing language开放计算语言)提供C,C++语言的编程接口,它规定了一个标准,可以把并行任务映射到同构或者异构的体系结构上。

             这二者的区别也很明显,一个针对特定厂家的芯片,不具备通用性,效率也更高;

    另一个是跨硬件体系结构的标准,通用性好,不必为各种硬件学相应编程接口,但是硬件的多样性并不容易抽取一个高效的通用模型,因此性能会受影响,而且实际上opencl程序性能的优化也依赖于程序员对芯片体系结构的理解。

     

     

     参考

    http://www.zhetao.com/content201

    http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

    计算机组成原理唐朔飞

    Wikipedia

    云计算与分布式系统-----从并行处理到物联网

    Opencl 异构计算

    Openstack设计与实现

    汇编语言程序设计

    Statckoverflow

    http://stackoverflow.com/questions/1656608/what-is-difference-between-superscaling-and-pipelining

     


    附录一 IA-产品线

    IA-32产品线

    1978年发布16bit处理器8086/8088为IA-32引入了分段

    1982年发布Intel® 286 Processor 为IA-32引入了保护模式

    1985年发布 Intel386Processor第一个IA-32处理器

    32bit寄存器,并且兼容之前的16位寄存器

             虚拟8086模式,执行为8086/8088处理器创建的程序时可以更快

             32bit地址总线,支持最大4G物理内存,支持分段

    支持分页用于虚拟存储

    支持parallel stages

    1989年发布Intel486Processor

           扩展了Intel386的解码执行单元到5级流水线,每个周期执行两条指令

             增加了8KB的一级片上cache,提高了每个时钟周期能执行的指令的数目

             添加了集成的x87 FPU(floating-pointunit)把专用于浮点计算的芯片80287/80387集成到了80486中

             节能和系统管理的能力

    1993年发布 Intel® Pentium® Processor

             两个流水线,超标量技术

    一级片上Cache加倍,8KB用于指令,8KB用于数据

    数据cache使用MESI协议,支持除了80486使用的写通Cache之外的更高效的写回Cache(写通就是CPU把数据写到缓存时也写到内存中相应位置,写回则是CPU把数据写到缓存,Cache被替换出时,才把数据写到内存相应位置)

    分支预测使用了一个片上的分支预测表以提升循环结构的性能

    更高效的virtual-8086 mode扩展

    内部数据128bits,256bits路径

    突发的64bits外部数据总线

    APIC支持多处理器的系统

    双处理器模式支持无缝双处理器系统(glueless two processor systems)

    奔腾家族处理器随后引入了Intel MMX技术,使用SIMD执行模型对64bit寄存器里的打包的整数进行并行计算

    1995-1999发布 P6 Family

    基于一种超标量(superscalar)微架构(microarchitecture)确定了新的性能标准,这种微架构称为P6 family microarchitecture

    Intel Pentium Pro processor 3级超标量(3-way superscalar),增加量Cache,有2级cache

    Intel Pentium II processor 增加了Intel MMX技术

    Pentium II Xeon processor 结合了奔腾处理器和之前处理器的特点

    Intel Celeron processor (赛扬处理器)专注于家用PC市场

    Intel Pentium IIIprocessor引入了Streaming SIMD Extention(SSE)

    Pentium IIIXeon processor 使用full-speed,on-die, Advanced Transfer Cache提升IA-32处理器性能

    2000-2006发布 Intel®Pentium®4 Processor Family

           使用Intel NetBurst微架构

           引入了 Streaming SIMD Extensions 2(SSE2)

    引入了Hyper-Threading Technology超线程技术

    引入了Streaming SIMD Extensions 3(SSE3)

    672 and 662版本中引入了虚拟化技术Intel® VirtualizationTechnology(Intel® VT))

     

    2001-2007发布 Intel® Xeon® Processor(至强处理器)

       使用Intel NetBurstmicroarchitecture,双核处理器,用于多处理器服务器和高性能的工作站

    串行计算

       IntelXeon processor MP引入了超线程技术

       64-bit Intel Xeon processor3.60 GHz引入了Intel 64架构

       Dual-Core Intel Xeon processor引入了双核心技术

    Intel Xeon processor 70xx包含了虚拟化技术

    Intel Xeon processor 5100系列使用了低功耗高性能的Intel Core microarchitecture,是Intel64架构,包含双核技术,虚拟化技术

    Intel Xeon processor 3000 系列 也是Intel Core microarchitecture

    Intel Xeon processor 5300 系列也是Intel Core microarchitecture,并且有4个物理处理器核

     

    2003-2006发布 Intel®Pentium®M Processor

    给之前的IA-32 Intel mobile processors微架构加强了,性能更高,能耗更低

    支持具有Dynamic Execution的英特尔架构

    使用Intel高级处理工艺的铜连接的高性能第功耗核心

    On-die(片上)32K指令cache,32K写回数据Cache

    具有Advanced Transfer Cache Architecture的2级On-die Cache(最大2MB)

    高级的分支预测和数据预取逻辑

    支持MMX技术,支持Streaming SIMD指令和SSE2

    400MHZ/500MHZ的源同步处理器系统总线Source-Synchronous ProcessorSystem Bus

    使用Enhanced Intel SpeedStep® 技术进行先进的能耗管理

     

    展开全文
  • 关于分布式计算的一些概念

    万次阅读 2018-06-03 14:56:53
    整理自《架构解密从分布式到微服务》第七章——聊聊分布式计算。 前言 不管是网络、内存、还是存储的分布式,它们最终目的都是为了实现计算的分布式:数据在各个计算机节点上流动,同时各个计算机节点都能以某种...
  • [并行计算] 1. 并行计算简介

    万次阅读 多人点赞 2017-07-20 15:30:07
    这篇帖子旨在为并行计算这一广泛而宏大的话题提供一个非常快速的概述,作为随后教程的先导。因此,它只涵盖了并行计算的基础知识,实用于刚刚开始熟悉该主题的初学者。
  • 系统的开发实现了输电线路各类数据计算的信息化水平,提高了输电线路的管理水平,提高了工作效率及计算结果的可靠性,减轻了生产人员数据计算的工作量,避免了人工计算而带来的出错现象,为输电线路的安全稳定运行提供了...
  • 视觉SLAM笔记(59) 相似度计算

    万次阅读 2019-11-17 10:49:06
    相似度理论和计算、增加字典规模、相似性评分的处理、关键帧的处理、检测之后的验证、与机器学习的关系
  • ABB机器人系统和出错信息

    千次阅读 2020-08-01 17:59:08
    系统和出错信息(从百度文库下载的) 1.概述 1.1 确认出错信息 1.2 调用纠正错误的建议 1.3 封锁出错信息 1.4 认可警告信息 1.5 登录信息使用的符号 操作登记信息 系统登记信息 硬件登记信息 程序登记...
  • 内容索引:VB源码,算法相关,信用卡,利息,计算工具,算法 用VB开发编写的广东发展银行信用卡利息计算工具,包含完整无错的VB源码,用避免程序出错,程序限制将提现金额和还款天数固定为数字,广发银行提现手续费按3%...
  • cpu的出错概率?

    千次阅读 2012-05-27 14:32:06
    我今天想到了一个很不懂的...操作系统怎么避免这些错误呢? 2012.5.27 找到一篇文章:http://wuyudong.blog.hexun.com/893237_d.html 服务器CPU和笔记本CPU都包含有各自独特的专有技术,都是为了更好的在各自的
  • pdos计算与画图

    千次阅读 2018-06-13 18:54:11
    pdos计算与画图1.计算opt2.计算static # 以上两步请参考之前计算过程3.计算pdos #静态计算完成后,拷贝 INCAR KPOINT CONTCAR(拷贝之后需改名为POSCAR) POTCAR vasp.lsf ...否则后期脚本运行出错非常麻烦ISTA...
  • 什么是并行计算

    千次阅读 多人点赞 2020-01-15 14:26:19
    原文出处:并行计算简介 并行计算简介 (本人刚刚完成这篇长文章的翻译,尚未认真校对。若里面有翻译错误和打字错误敬请谅解,并请参考原贴) 1 摘要 最近项目需要实现程序的并行化,刚好借着翻译这篇帖子的机会...
  • 并行计算复习第四篇 并行计算软件支撑:并行编程
  • JS自动计算表单金额

    千次阅读 2014-01-30 01:05:13
     js实现自动计算表单项中的金额,自动汇总数值,用户无需再次计算,在点击提交前就已经计算出数值并显示在文本框中,若要使用本效果,请添加一个表单输入判断,这样可避免程序出错,提升用户体验。 &lt;!...
  • 孙正兴:普适计算与计算机视觉

    千次阅读 2012-02-11 09:15:14
    孙正兴:普适计算与计算机视觉 分类: 软件技术 2011-11-12 23:24 193人阅读 评论(0) 收藏 举报   孙正兴:普适计算与计算机视觉 (2011-04-20 15:12:59) 标签: 校园 分类: ...
  • 用VB开发编写的广东发展银行信用卡利息计算工具,包含完整无错的VB源码,用避免程序出错,程序限制将提现金额和还款天数固定为数字,广发银行提现手续费按3%收取,最低10元!按万分之五收取日息!而且是利滚利的计算...
  • MR计算模型一

    千次阅读 2018-11-23 19:27:48
    MapReduce最早是由Google公司研究提出的一种面向大规模数据处理的并行计算模型和方法。Google公司设计MapReduce的初衷,主要是为了解决其搜索引擎中大规模网页数据的并行化处理。  Google公司发明了MapReduce之后...
  • 计算机处理器基础原理笔记

    千次阅读 多人点赞 2019-10-24 20:47:59
    但是如果PC寄存器自增地太快,程序就会出错。因为前一次的运算结果还没有写回到对应的寄存器里面的时候,后面一条指令已经开始读取里面的数据来做下一次计算了。这个时候,如果指令使用同样的寄存器,前一条指令的...
  • 我们得保证计算时,所有的数都在浮点数的可计算范围内,太小的值(比如h)会带来计算上的问题。 Kinks 。它指的是一种会导致数值梯度和解析梯度不一致的情况。会出现在使用ReLU或者类似的神经单元上时,对于很小的...
  • 计算机组成原理知识点

    万次阅读 多人点赞 2017-09-25 11:17:08
    当某一位出错就会引起有关的几个校验组的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为自动纠错提供了依据.  假设校验位的个数为r,则它能表示2r个信息,用其中的一个信息指出“没有错误”,其余2r-1个...
  • 分布式计算框架体设计

    千次阅读 2013-07-20 17:39:20
    DCF内部采用C++语言实现了类MapReduce原理的一套分布式计算机制,力求为用户提供一套高效、稳定、可扩容的分布式计算框架。让用户在有分布式计算需求时,只需要实现计算相关的代码,很大程度提高用户的开发效率。
  • 计算机等级考试--二级Java的知识点大全

    万次阅读 多人点赞 2019-03-16 20:42:59
    算法不等于程序,也不等于计算方法。 2、算法的基本特征: 1)确定性,算法中每一步骤都必须有明确定义,不允许有多义性; 2)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止; 3)可行性,...
  • ACM计算几何

    千次阅读 2014-07-23 19:53:56
    本文出自:http://blog.csdn.net/svitter Computational Geometry 计算几何  ACM中基本是最麻烦的部分。  几何代码都要自己写,STL中也没有。... 数乘,差乘,计算几何题目抄。... 避免误差。  注意:
  • DES 3DES 分散 MAC计算工具

    热门讨论 2011-03-31 15:14:29
    DES 3DES 分散 MAC计算工具,改版本修正了上一个版本处理超过240字符出错的Bug。且使用MFC的静态库编译,避免用户因没有安装VC运行库导致软件不能用
  • 原创:用T5577&EM4305模拟EM4100ID卡的数据计算 当想把T5577卡或者EM4305卡复制或模拟成ID卡时,...本工具根据大神们的文章进行了对照换算,只要输入16进制卡号,就可分别计算出两种卡需要刷写的数据内容,避免出错

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,224
精华内容 56,889
关键字:

怎么避免计算出错