最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

三體中的人列計(jì)算機(jī)到底是啥?

2023-02-10 18:52 作者:程序員鶴涵  | 我要投稿

大家好,我是鶴涵。

大家最近看三體電視劇版本了嗎?跟原著還原度非常高,甚至超過原著(畫面震撼呀)!

其中第15集,居然出現(xiàn)了馮.諾依曼+秦始皇的組合,用3000w名士兵組成了一臺(tái)人形計(jì)算機(jī)。

作為程序員我可不困了,下面盤盤他的原理是啥?這玩意能計(jì)算復(fù)雜的三體運(yùn)動(dòng)?

人列計(jì)算機(jī)

電腦裝好了,開機(jī)

這密密麻麻就是3000w士兵模擬的電路組成的人形計(jì)算機(jī)。

我第一次看到這個(gè)場(chǎng)面你是大受震撼的!

上圖展示了與門的邏輯。紅色代表0,白色代表1。輸入全為1,輸出才為1,否則輸出0。

常見的還是有或門,非門,異或門。

輸入1 輸入2 輸出 0 0 0 0 1 0 1 0 0 1 1 1

上面這個(gè)門電路有啥用呢?

舉個(gè)??:實(shí)現(xiàn)二進(jìn)制加法

在輸入的兩位是 00 和 11 的情況下,對(duì)應(yīng)的輸出都應(yīng)該是 0;在輸入的兩位是 10 和 01 的情況下,輸出都是 1。結(jié)果你會(huì)發(fā)現(xiàn),這個(gè)輸入和輸出的對(duì)應(yīng)關(guān)系其實(shí)就是“異或門(XOR)”。

算完個(gè)位的輸出還不算完,輸入的兩位都是 11 的時(shí)候,我們還需要向更左側(cè)的一位進(jìn)行進(jìn)位。那這個(gè)就對(duì)應(yīng)一個(gè)與門,也就是有且只有在加數(shù)和被加數(shù)都是 1 的時(shí)候,我們的進(jìn)位才會(huì)是 1。對(duì)應(yīng)著”與門“

其實(shí),異或門就是一個(gè)最簡單的整數(shù)加法,所需要使用的基本門電路。

1 0 0 1 + 0 1 0 1 進(jìn)位 0 0 0 1 和 1 1 0 0

通過一個(gè)異或門計(jì)算出個(gè)位,通過一個(gè)與門計(jì)算出是否進(jìn)位,我們就通過電路算出了一個(gè)一位數(shù)的加法。我們把兩個(gè)門電路打包,給它取一個(gè)名字,就叫作半加器(Half Adder)。

由于我們半加器只能完成兩個(gè)數(shù)的相加,要是有多位數(shù)組而且產(chǎn)生進(jìn)位,就會(huì)產(chǎn)生三個(gè)數(shù)相加的情況,這時(shí)候就需要“全加器”登場(chǎng)。

兩個(gè)半加器和一個(gè)或門,就能組合成一個(gè)“全加器”。第一個(gè)半加器,我們用和個(gè)位的加法一樣的方式,得到是否進(jìn)位 X 和對(duì)應(yīng)的二個(gè)數(shù)加和后的結(jié)果 Y,這樣兩個(gè)輸出。然后,我們把這個(gè)加和后的結(jié)果 Y,和個(gè)位數(shù)相加后輸出的進(jìn)位信息 U,再連接到一個(gè)半加器上,就會(huì)再拿到一個(gè)是否進(jìn)位的信號(hào) V 和對(duì)應(yīng)的加和后的結(jié)果 W。

img

8bit的加法我們就可以串聯(lián)8個(gè)全加器,如果要支持更多的位數(shù)的加法就再多串聯(lián)幾個(gè)全加器就ok了

正是通過這些簡單的,大量的門電路,相互緊密協(xié)作,創(chuàng)造了巨大的價(jià)值。

馮.諾依曼體系

這個(gè)計(jì)算機(jī)是怎么組裝起來的呢?

整個(gè)計(jì)算機(jī)世界的地基:馮.諾依曼體系

馮·諾依曼體系結(jié)構(gòu)(Von Neumann architecture),也叫存儲(chǔ)程序計(jì)算機(jī)。

什么是存儲(chǔ)程序計(jì)算機(jī)呢?這里面其實(shí)暗含了兩個(gè)概念,一個(gè)是“可編程”計(jì)算機(jī),一個(gè)是“存儲(chǔ)”計(jì)算機(jī)。

  • 可編程

在“可編程”計(jì)算機(jī)之前,“程序”是固定在電路板上的,只能運(yùn)行指定的計(jì)算程序。一旦要修改“程序”,就只能重裝電路,這樣成本非常大,非常不靈活。這樣的計(jì)算機(jī)是“不可編程”的,比如我們的老式計(jì)算機(jī)只能計(jì)算固定的加減乘除。

  • 存儲(chǔ)

程序本身是存儲(chǔ)在計(jì)算機(jī)的內(nèi)存里,可以通過加載不同的程序來解決不同的問題。早年的“Plugboard”這樣的插線板式的計(jì)算機(jī)。整個(gè)計(jì)算機(jī)就是一個(gè)巨大的插線板,通過在板子上不同的插頭或者接口的位置插入線路,來實(shí)現(xiàn)不同的功能。

這樣是“可編程”了,但想用上次寫好的程序就不可能了,“程序”的狀態(tài)是存儲(chǔ)在板子組成的物理電路上的。

程序和硬件綁定就無法靈活編程

他的這種設(shè)計(jì)思想導(dǎo)致了硬件和軟件的分離,即硬件設(shè)計(jì)和程序設(shè)計(jì)可以分開執(zhí)行,才能出現(xiàn)軟件工程師這個(gè)職業(yè)?。。?/p>

于是我們的馮祖師爺,基于當(dāng)時(shí)在秘密開發(fā)的 EDVAC 寫了一篇報(bào)告First Draft of a Report on the EDVAC,描述了他心目中的一臺(tái)計(jì)算機(jī)應(yīng)該長什么樣。這篇報(bào)告在歷史上有個(gè)很特殊的簡稱,叫 First Draft,翻譯成中文,其實(shí)就是《第一份草案》。

馮.諾依曼確定了”計(jì)算機(jī)結(jié)構(gòu)“中的5大部件:

運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備、輸出設(shè)備

或者簡化為3個(gè)組件:

CPU(運(yùn)算器,控制器)、存儲(chǔ)(內(nèi)存,外存)、輸入輸出設(shè)備(輸入設(shè)備,輸出設(shè)備)

CPU

1.運(yùn)算器

算術(shù)邏輯單元(Arithmetic Logic Unit,ALU),我們真正完成運(yùn)算,處理數(shù)據(jù)全靠它去干活!

ALU的主要功能就是在控制信號(hào)的作用下,完成加、減、乘、除等算術(shù)運(yùn)算以及與、或、非、異或等邏輯運(yùn)算以及移位、補(bǔ)位等運(yùn)算。

運(yùn)算器的主要部件就是ALU,運(yùn)算器的處理對(duì)象是數(shù)據(jù),所以數(shù)據(jù)的長度以及數(shù)據(jù)的表示方法,對(duì)運(yùn)算器的影響很大。大多數(shù)通用計(jì)算機(jī)是以16、32、64位數(shù)據(jù)作為運(yùn)算器一次處理數(shù)據(jù)的長度。能夠?qū)σ粋€(gè)數(shù)據(jù)的所有位同時(shí)處理運(yùn)算器稱為并行運(yùn)算器,一次只能對(duì)數(shù)據(jù)的一個(gè)位處理的運(yùn)算器稱為串行運(yùn)算器。

運(yùn)算器與其他部分的關(guān)系:

計(jì)算機(jī)運(yùn)算時(shí),運(yùn)算器的操作對(duì)象和操作種類由控制器決定。運(yùn)算器操作的數(shù)據(jù)從內(nèi)存中讀取,處理的結(jié)果再寫入內(nèi)存(或者暫時(shí)存放在內(nèi)部寄存器中),而且運(yùn)算器對(duì)內(nèi)存數(shù)據(jù)的讀寫是由控制器來進(jìn)行的。

2.控制器

控制器又稱為控制單元(Control Unit),是計(jì)算機(jī)的神經(jīng)中樞和指揮中心,只有在控制器的控制下,整個(gè)計(jì)算機(jī)才能夠有條不紊地工作、自動(dòng)執(zhí)行程序。

控制器的工作流程為:從內(nèi)存中取指令、翻譯指令、分析指令,然后根據(jù)指令的內(nèi)存向有關(guān)部件發(fā)送控制命令,控制相關(guān)部件執(zhí)行指令所包含的操作。

控制器和運(yùn)算器共同組成中央處理器(Central Processing Unit),CPU是一塊超大規(guī)模集成電路,是計(jì)算機(jī)運(yùn)算核心和控制核心,CPU的主要功能是解釋計(jì)算機(jī)指令以及處理數(shù)據(jù)。

存儲(chǔ)

3.存儲(chǔ)器

存儲(chǔ)器的主要功能是存儲(chǔ)程序和各種數(shù)據(jù),并且能夠在計(jì)算機(jī)運(yùn)行過程高速、自動(dòng)地完成程序或者數(shù)據(jù)的存儲(chǔ),存儲(chǔ)器是有記憶的設(shè)備,而且采用倆種穩(wěn)定狀態(tài)的物理器件來記錄存儲(chǔ)信息,所以計(jì)算機(jī)中的程序和數(shù)據(jù)都要轉(zhuǎn)換為二進(jìn)制代碼才可以存儲(chǔ)和操作。

存儲(chǔ)器可以分為內(nèi)部存儲(chǔ)器(內(nèi)存)和外部存儲(chǔ)器,兩者在計(jì)算機(jī)系統(tǒng)中各有用處。

3.1.內(nèi)部存儲(chǔ)器

內(nèi)部存儲(chǔ)器稱為內(nèi)存或者主存,是用來存放欲執(zhí)行的程序和數(shù)據(jù)。

在計(jì)算機(jī)內(nèi)部,程序和數(shù)據(jù)都是以二進(jìn)制代碼的形式存儲(chǔ)的,它們均以字節(jié)為單位(8位)存儲(chǔ)在存儲(chǔ)器中,一個(gè)字節(jié)占用一個(gè)存儲(chǔ)單元,并且每個(gè)存儲(chǔ)單元都有唯一的地址號(hào)。

CPU可以直接使用指令對(duì)內(nèi)部存儲(chǔ)器按照地址進(jìn)行讀寫倆種操作。

讀:將內(nèi)存中某個(gè)存儲(chǔ)單元的內(nèi)容讀出,送入CPU的某個(gè)寄存器中;

寫:在控制器的控制下,將CPU中某寄存器內(nèi)容傳到某個(gè)存儲(chǔ)單元中。

3.2外部存儲(chǔ)器

外部存儲(chǔ)器主要來存放”暫時(shí)“用不著的程序和數(shù)據(jù),可以和內(nèi)存交換數(shù)據(jù)。存儲(chǔ)成本最低,容量最大,速度最慢。

一般是U盤、硬盤(固態(tài)硬盤SSD,機(jī)械硬盤HDD)等。

運(yùn)算速度的瓶頸在于存儲(chǔ)速度遠(yuǎn)慢于CPU,性能優(yōu)化的宗旨就是盡量少訪問慢系統(tǒng)

我們把CPU比作是我們飛速運(yùn)轉(zhuǎn)的大腦。

那么寄存器就是當(dāng)前在思考和處理的數(shù)據(jù)。

L1~L3Cache就是短期到長期記憶,需要非常少的時(shí)間就能讀取。

內(nèi)存就相當(dāng)于我們的家里的書架,雖然容量大了不少,但是比起從記憶里讀取舊慢了25倍。

磁盤相當(dāng)于圖書館,容量比內(nèi)存更大,但是速度比內(nèi)存也更慢了,比內(nèi)存還要慢1000倍。

從寄存器、CPU Cache,到內(nèi)存、硬盤,這樣一層層下來的存儲(chǔ)器,==速度越來越慢,空間越來越大,價(jià)格也越來越便宜。==我們往往就要在成本和速度之間進(jìn)行權(quán)衡(trade-off)

輸入輸出設(shè)備

4.輸入輸出設(shè)備

實(shí)際上我們操作計(jì)算機(jī)都是與輸入輸出設(shè)備在打交道。

鼠標(biāo)鍵盤是輸入設(shè)備、顯示器是輸出設(shè)備;

手機(jī)觸摸屏即時(shí)輸入設(shè)備又是輸出設(shè)備;

服務(wù)器中網(wǎng)卡既是輸入設(shè)備又是輸出設(shè)備;

所有的計(jì)算機(jī)程序都可以抽象為輸入設(shè)備讀取信息,通過CPU來執(zhí)行存儲(chǔ)在存儲(chǔ)器中的程序,結(jié)果通過輸出設(shè)備反饋給用戶。

總線,各個(gè)設(shè)備接入的高速公路

核心是為了減少多個(gè)模塊之間交互的復(fù)雜性和耦合度。

在實(shí)際的硬件層面,總線其實(shí)就是一組連接電路的線路。因?yàn)椴煌O(shè)備之間的速度有差異,所以一臺(tái)計(jì)算機(jī)里面往往會(huì)有多個(gè)總線。

常見的就有在 CPU 內(nèi)部和高速緩存通信的本地總線,以及和外部 I/O 設(shè)備以及內(nèi)存通信的前端總線。前端總線通常也被叫作系統(tǒng)總線。它可以通過一個(gè) I/O 橋接器,拆分成兩個(gè)總線,分別來和 I/O 設(shè)備以及內(nèi)存通信。自然,這樣拆開的兩個(gè)總線,就叫作 I/O 總線和內(nèi)存總線??偩€本身的電路功能,又可以拆分成用來傳輸數(shù)據(jù)的數(shù)據(jù)線、用來傳輸?shù)刂返牡刂肪€,以及用來傳輸控制信號(hào)的控制線。

計(jì)算機(jī)軟件

上面我們介紹了馮.諾依曼體系計(jì)算機(jī)由哪幾部分組成,以及他們?nèi)绾螀f(xié)同工作的。但這時(shí)候它只是一個(gè)會(huì)計(jì)算的“機(jī)器”。

硬件和軟件的關(guān)系相當(dāng)于琴和樂譜只有琴是無法產(chǎn)生價(jià)值的。

原始時(shí)代

目前我們還沒有任何編程語言,只能理解CPU指令的二進(jìn)制,將程序以二進(jìn)制的方式刻錄在存儲(chǔ)上(ROM或硬盤)。

這時(shí)候變成是極其痛苦的,效率低的可怕。不要說修改和迭代程序了,連把想法表達(dá)出來都十分麻煩。

首先要把執(zhí)行指令翻譯成二進(jìn)制的比特?cái)?shù)據(jù),然后刻錄在存儲(chǔ)上。當(dāng)時(shí)軟件與硬件的界限不清晰(還沒有軟件工程師,程序員這一說法),編寫程序需要進(jìn)行電氣操作。

為了解決這個(gè)問題,匯編語言和編譯器的出現(xiàn)使編程變得更簡單,編譯器可以將程序編寫在匯編語言上的代碼編譯成為CPU指令,并存儲(chǔ)在外部存儲(chǔ)設(shè)備上。

匯編語言與計(jì)算機(jī)的CPU指令非常相似,一條匯編指令與一條CPU指令基本相對(duì)應(yīng)。

匯編語言是什么

第一款編程語言誕生。 匯編語言是把程序編寫和程序執(zhí)行過程中的執(zhí)行效率雙重提高了。匯編語言通過文本符號(hào)(symbol)表示機(jī)器指令,內(nèi)存地址,函數(shù),和跳轉(zhuǎn)目標(biāo)地址,大大簡化了程序的編寫過程,避免了因?yàn)檫^多的關(guān)注機(jī)器實(shí)現(xiàn)的細(xì)節(jié)而造成的精力浪費(fèi),同時(shí)給程序員更多的思考空間。

另外,匯編語言還具有高效的特點(diǎn),因?yàn)樗前凑沼布膶?shí)際結(jié)構(gòu)來編寫程序的,程序員可以通過匯編語言充分利用硬件的資源,以最快的速度實(shí)現(xiàn)程序的執(zhí)行。另外,匯編語言還具有高度的可讀性,程序員可以通過讀代碼來快速了解程序的執(zhí)行過程,從而更快的定位和解決程序問題。

總的來說,匯編語言是一種高效,簡潔,實(shí)用,易于閱讀的編程語言,為程序員提供了很多方便。

我們把三體問題的編寫成代碼,通過打孔卡進(jìn)行輸入,運(yùn)行在我們的計(jì)算機(jī)上,我們就可以快樂的計(jì)算“三體”問題啦!~

總結(jié)

馮.諾依曼體系我們計(jì)算機(jī)世界的地基。高級(jí)編程語言(C,Java,Go,Python),操作系統(tǒng),中間件,框架,還有我們?nèi)粘J褂玫奈⑿牛兑舳?,離不開馮.諾依曼體系。

它使得我們計(jì)算機(jī)的硬件可擴(kuò)展,軟件和硬件分離才能讓軟件這么多年迅猛發(fā)展。



三體中的人列計(jì)算機(jī)到底是啥?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
嘉鱼县| 德州市| 临泉县| 五家渠市| 双辽市| 邹城市| 大洼县| 诸城市| 泾阳县| 土默特右旗| 修水县| 枣强县| 南澳县| 永泰县| 榆林市| 资溪县| 屏南县| 西藏| 洛浦县| 民和| 余姚市| 富川| 南安市| 安龙县| 沙洋县| 上林县| 普兰店市| 饶平县| 聊城市| 二连浩特市| 大余县| 汉中市| 新安县| 准格尔旗| 类乌齐县| 沂水县| 新疆| 南昌县| 河西区| 津南区| 恩平市|