1. 程式人生 > >DDR3詳解(以Micron MT41J128M8 1Gb DDR3 SDRAM為例)

DDR3詳解(以Micron MT41J128M8 1Gb DDR3 SDRAM為例)

首先,我們先了解一下記憶體的大體結構工作流程,這樣會比較容量理解這些引數在其中所起到的作用。這部分的講述運用DDR3的簡化時序圖

 DDR3的內部是一個儲存陣列,將資料“填”進去,你可以它想象成一張表格。和表格的檢索原理一樣,先指定一個行(Row),再指定一個列(Column),我們就可以準確地找到所需要的單元格,這就是記憶體晶片定址的基本原理。對於記憶體,這個單元格可稱為儲存單元,那麼這個表格(儲存陣列)就是邏輯 Bank(Logical Bank,下簡稱Bank)。

DDR3內部Bank示意圖,這是一個NXN的陣列,B代表Bank地址編號,C代表列地址編號,R代表行地址編號。

如果定址命令是B1、R2、C6,就能確定地址是圖中紅格的位置

目前DDR3記憶體晶片基本上都是8個Bank設計,也就是說一共有8個這樣的“表格”。

定址的流程也就是先指定Bank地址,再指定行地址,然後指列地址最終的確定址單元。

目前DDR3系統而言,還存在物理Bank的概念,這是對記憶體子系統的一個相關術語,並不針對記憶體晶片。記憶體為了保證CPU正常工作,必須一次傳輸完CPU 在一個傳輸週期內所需要的資料。而CPU在一個傳輸週期能接受的資料容量就是CPU資料匯流排的位寬,單位是bit(位)。控制記憶體與CPU之間資料交換的北橋晶片也因此將記憶體匯流排的資料位寬等同於CPU資料匯流排的位寬,這個位寬就稱為物理Bank(Physical Bank,有的資料稱之為Rank)的位寬。目前這個位寬基本為64bit。

在實際工作中,Bank地址與相應的行地址是同時發出的,此時這個命令稱之為“行啟用”(Row Active)。在此之後,將傳送列地址定址命令與具體的操作命令(是讀還是寫),這兩個命令也是同時發出的,所以一般都會以“讀/寫命令”來表示列定址。根據相關的標準,從行有效到讀/寫命令發出之間的間隔被定義為tRCD,即RAS to CAS Delay(RAS至CAS延遲,RAS就是行地址選通脈衝,CAS就是列地址選通脈衝),我們可以理解為行選通週期。tRCD是DDR的一個重要時序引數,廣義的tRCD以時鐘週期(tCK,Clock Time)數為單位,比如tRCD=3,就代表延遲週期為兩個時鐘週期,具體到確切的時間,則要根據時鐘頻率而定,DDR

3-800,tRCD=3,代表30ns的延遲。

                     圖中顯示的是tRCD=3

接下來,相關的列地址被選中之後,將會觸發資料傳輸,但從儲存單元中輸出到真正出現在記憶體晶片的 I/O 介面之間還需要一定的時間(資料觸發本身就有延遲,而且還需要進行訊號放大),這段時間就是非常著名的 CL(CAS Latency,列地址脈衝選通潛伏期)。CL 的數值與 tRCD 一樣,以時鐘週期數表示。如 DDR3-800,時鐘頻率為 100MHz,時鐘週期為 10ns,如果 CL=2 就意味著 20ns 的潛伏期。不過CL只是針對讀取操作

由於晶片體積的原因,儲存單元中的電容容量很小,所以訊號要經過放大來保證其有效的識別性,這個放大/驅動工作由S-AMP負責,一個儲存體對應一個S- AMP通道。但它要有一個準備時間才能保證訊號的傳送強度(事前還要進行電壓比較以進行邏輯電平的判斷),因此從資料I/O總線上有資料輸出之前的一個時鐘上升沿開始,資料即已傳向S-AMP,也就是說此時資料已經被觸發,經過一定的驅動時間最終傳向資料I/O匯流排進行輸出,這段時間我們稱之為 tAC(Access Time from CLK,時鐘觸發後的訪問時間)。

                      圖中標準CL=2,tAC=1

  目前記憶體的讀寫基本都是連續的,因為與CPU交換的資料量以一個Cache Line(即CPU內Cache的儲存單位)的容量為準,一般為64位元組。而現有的Rank位寬為8位元組(64bit),那麼就要一次連續傳輸8次,這就涉及到我們也經常能遇到的突發傳輸的概念。突發(Burst)是指在同一行中相鄰的儲存單元連續進行資料傳輸的方式,連續傳輸的週期數就是突發長度(Burst Lengths,簡稱BL)。

在進行突發傳輸時,只要指定起始列地址與突發長度,記憶體就會依次地自動對後面相應數量的儲存單元進行讀/寫操作而不再需要控制器連續地提供列地址。這樣,除了第一筆資料的傳輸需要若干個週期(主要是之前的延遲,一般的是tRCD+CL)外,其後每個資料只需一個週期的即可獲得。

突發連續讀取模式:只要指定起始列地址與突發長度,後續的定址與資料的讀取自動進行,而只要控制好兩段突發讀取命令的間隔週期(與BL相同)即可做到連續的突發傳輸。

談到了突發長度。如果BL=4那麼也就是說一次就傳送4×64bit的資料。但是,如果其中的第二筆資料是不需要的,怎麼辦?還都傳輸嗎?為了遮蔽不需要的資料,人們採用了資料掩碼(Data I/O Mask,簡稱DQM)技術。通過DQM,記憶體可以控制I/O埠取消哪些輸出或輸入的資料。這裡需要強調的是,在讀取時,被遮蔽的資料仍然會從儲存體傳出,只是在“掩碼邏輯單元”處被遮蔽。DQM由北橋控制,為了精確遮蔽一個P-Bank位寬中的每個位元組,每個DIMM有8個DQM 訊號線,每個訊號針對一個位元組。這樣,對於4bit位寬晶片,兩個晶片共用一個DQM訊號線,對於8bit位寬晶片,一個晶片佔用一個DQM訊號,而對於 16bit位寬晶片,則需要兩個DQM引腳。

在資料讀取完之後,為了騰出讀出放大器以供同一Bank內其他行的定址並傳輸資料,記憶體晶片將進行預充電的操作來關閉當前工作行。還是以上面那個Bank示意圖為例。當前定址的儲存單元是B1、R2、C6。如果接下來的定址命令是B1、R2、C4,則不用預充電,因為讀出放大器正在為這一行服務。但如果地址命令是B1、R4、C4,由於是同一Bank的不同行,那麼就必須要先把R2關閉,才能對R4定址。從開始關閉現有的工作行,到可以開啟新的工作行之間的間隔就是tRP(Row Precharge command Period,行預充電有效週期),單位也是時鐘週期數。

在不同Bank間讀寫也是這樣,先把原來資料寫回,再啟用新的Bank/Row。

資料選取脈衝(DQS)

DQS 是DDR中的重要功能,它的功能主要用來在一個時鐘週期內準確的區分出每個傳輸週期,並便於接收方準確接收資料。每一顆晶片都有一個DQS訊號線,它是雙向的,在寫入時它用來傳送由北橋發來的DQS訊號,讀取時,則由晶片生成DQS向北橋傳送。完全可以說,它就是資料的同步訊號。

在讀取時,DQS與資料訊號同時生成(也是在CK與CK#的交叉點)。而DDR記憶體中的CL也就是從CAS發出到DQS生成的間隔,DQS生成時,晶片內部的預取已經完畢了,由於預取的原因,實際的資料傳出可能會提前於DQS發生(資料提前於DQS傳出)。由於是並行傳輸,DDR記憶體對tAC也有一定的要求,對於DDR266,tAC的允許範圍是±0.75ns,對於DDR333,則是±0.7ns,有關它們的時序圖示見前文,其中CL裡包含了一段DQS 的匯入期。

DQS 在讀取時與資料同步傳輸,那麼接收時也是以DQS的上下沿為準嗎?不,如果以DQS的上下沿區分資料週期的危險很大。由於晶片有預取的操作,所以輸出時的同步很難控制,只能限制在一定的時間範圍內,資料在各I/O埠的出現時間可能有快有慢,會與DQS有一定的間隔,這也就是為什麼要有一個tAC規定的原因。而在接收方,一切必須保證同步接收,不能有tAC之類的偏差。這樣在寫入時,晶片不再自己生成DQS,而以傳送方傳來的DQS為基準,並相應延後一定的時間,在DQS的中部為資料週期的選取分割點(在讀取時分割點就是上下沿),從這裡分隔開兩個傳輸週期。這樣做的好處是,由於各資料訊號都會有一個邏輯電平保持週期,即使傳送時不同步,在DQS上下沿時都處於保持週期中,此時資料接收觸發的準確性無疑是最高的。

在寫入時,以DQS的高/低電平期中部為資料週期分割點,而不是上/下沿,但資料的接收觸發仍為DQS的上/下沿

3.容量的計算

上圖為X8data的單顆DDR3架構圖,行(Row)地址線複用14根,列(Column)地址線複用10根,Bank數量為8個,IO Buffer 通過8組數位線(DQ0-DQ7)來完成對外的通訊,故此單顆DDR3晶片的容量為2的14次方乘2的10次方乘8乘8,結果為1Gbit,因為1B包含8bit,1GB/8=128MB。

如果我們要做成容量為1GB的記憶體條則需要8顆這樣的DDR3記憶體晶片,每顆晶片含8根數位線(DQ0-DQ7)則總數寬為64bit,這樣正好用了一個Rank。

假果還用128MB的DDR3晶片去做2GB記憶體條,結果就會有所不同。我們最好選用4根數位線(DQ0-DQ3),數量是16顆,這樣也是用了一個Rank。

在K2的專案中我們要做容量為8GB的記憶體條,則數量用64顆128M的DDR3,這樣位寬高達64X4=256bit,要做成4個Rank。

1.結構框圖:

2.管腳功能描述

3.狀態圖:

Power on: 上電

Reset Procedure: 復位過程

Initialization: 初始化

ZQCL: 上電初始化後,用完成校準ZQ電阻。ZQCL會觸發DRAM內部的校準引擎,

      一旦校準完成,校準後的值會傳遞到DRAMIO管腳上,並反映為輸出驅動和ODT阻值。

ZQCS: 週期性的校準,能夠跟隨電壓和溫度的變化而變化。校準需要更短的時間視窗,

      一次校準,可以有效的糾正最小0.5%RONRTT電阻。

AlAdditive latency.是用來在總線上保持命令或者資料的有效時間。

    在ddr3允許直接操作讀和寫的操作過程中,AL是總線上的資料出現到進入器件內部的時間。

    下圖為DDR3標準所支援的時間操作。

Write Leveling:為了得到更好的訊號完整性,DDR3儲存模組採取了FLY_BY的拓撲結構,

     來處理命令、地址、控制訊號和時鐘。FLY_BY的拓撲結構可以有效的減少stub的數量和他們的長度,

     但是卻會導致時鐘和strobe訊號在每個晶片上的flight time skew,這使得控制器(FPGA或者CPU

     很難以保持Tdqss ,tdsstdsh這些時序。這樣,ddr3支援write leveling這樣一個特性,

     來允許控制器來補償傾斜(flight time skew)。儲存器控制器能夠用該特性和從DDR3反饋的資料調成DQSCK之間的關係。

     在這種調整中,儲存器控制器可以對DQS訊號可調整的延時,來與時鐘訊號的上升邊沿對齊。

     控制器不停對DQS進行延時,直到發現從01之間的跳變出現,然後DQS的延時通過這樣的方式被建立起來了,由此可以保證tDQSS

MRS: MODE Register Set, 模式暫存器設定。為了應用的靈活性,不同的功能、特徵和模式等在四個在DDR3晶片上的Mode Register中,

     通過程式設計來實現。模式暫存器MR沒有預設值,因此模式暫存器MR必須在上電或者復位後被完全初始化,

     這樣才能使得DDR可以正常工作。正常工作模式下,MR也可以被重新寫入。模式暫存器的設定命令週期,

        tMRD兩次操作的最小時間,其具體時序圖,如下圖所示。模式暫存器,分為MR0MR1MR2MR4

MR0用來儲存DDR3的不同操作模式的資料:包括突發長度、讀取突發種類、CAS長度、測試模式、DLL復位等。

MR1用來儲存是否使能DLL、輸出驅動長度、Rtt_Nom、額外長度、寫電平使能等。MR2用來儲存控制更新的特性,

Rtt_WR阻抗,和CAS寫長度。MR3用來控制MPR

MPR: Multi-purpose register. 多用途暫存器。MPR的功能是讀出一個預先設定的系統時序校準位元序列。

     為了使能MPR功能,需要在MRS的暫存器MR3A2位寫1,並且在此之前需要將ddr3的所有bank處於idle狀態;

     一旦MPR被使能後,任何RDRDA的命令都會被引入到MPR暫存器中,當MPR暫存器被使能後,

     除非MPR被禁止(MR3A2=0),否則就只有RDRDA被允許。在MPR被使能的時候,RESET功能是被允許的。

Precharge Power Down: bankin-progress命令後關閉

Active Power Down:bankin-progress命令後依然開啟

Idle:所有的bank必須預先充電,所有時序滿足,DRAMODT電阻,RTT必須為高阻。

  CWL:CAS write latency. 以時鐘週期為單位,在內部寫命令和第一位輸入資料的時間延時,該單位始終為整數。

        在操作過程中,所有的寫延時WL被定義為ALAdditive Latency+CWL

Rtt: Dynamic ODT.DDR3引入的新特性。在特定的應用環境下為了更好的在資料匯流排上改善訊號完整性,

       不需要特定的MRS命令即可以改變終結強度(或者稱為終端匹配)。在MR2中的A9A10位設定了Rtt_WRDdr3中,

       有兩種RTT值是可以選擇的,一種是RTT_Nom,另一種是RTT_WR;Rtt_Nom是在沒有寫命令的時候被選擇的,

       當有了寫命令後,ODT就會變成Rtt_wr,當寫命令結束後,又會回到Rtt_nom。也就是說,RTTODT使能後,出現,

       當總線上沒有資料的時候,採用的RTT值為RTT_nom;而當總線上有了資料後,要求此時的ODT的值為Rtt_wr

       具體的DDR3ODT產生時序見圖2。當ODT被使能後,必須要保持高電平ODTH4個時鐘週期才可以有效;

       如果寫命令被放入暫存器並且ODT是高,那麼ODT必須保持ODTH4或者ODTH8,這樣ODT才可以有效。

ACT = ACTIVATE                        PREA = PRECHARGE ALL                           SRX = 自重新整理推出

MPR = 多用處暫存器                 READ = RD,RDS4,RDS8                        WRITE=WR,WRS4,WRS8

MRS=模式暫存器集                   READ AP=RDAP,RDAPS4,RDAPS8               WRITE=WRAP,WRAPS4,WRAPS8

PDE=掉電進入                           REF=REFRESH                                           ZQCL=ZQ LONG CALIBRATION

PDX=掉電推出                           RESET=啟動復位過程                                ZACS=ZA SHORT CALIBTATION

PRE=預充電                               SRE=自重新整理進入

4、工作原理

在描述了上述的一些基本概念後,就可以對圖1中的DDR3工作原理進行基本的描述了理解了。

首先,晶片進入上電,在上電最小為200us的平穩電平後,等待500usCKE使能,

在這段時間晶片內部開始狀態初始化,該過程與外部時鐘無關。在時鐘使能訊號前(cke),

必須保持最小10ns或者5個時鐘週期,除此之外,還需要一個NOP命令或者Deselect命令出現在CKE的前面。

然後DDR3開始了ODT的過程,在復位和CKE有效之前,ODT始終為高阻。

CKE為高後,等待tXPR(最小復位CKE時間),然後開始從MRS中讀取模式暫存器。

然後載入MR2MR3的暫存器,來配置應用設定;然後使能DLL,並且對DLL復位。

接著便是啟動ZQCL命令,來開始ZQ校準過程。等待校準結束後,DDR3就進入了可以正常操作的狀態。

對於基本的配置過程,現在就可以結束了。下面,結合CH1的控制器FPGA,說明對DDR3相關的配置。

上表中MRS可以設定Mode暫存器值

以                         上圖為例CS#,RAS#,CAS#,WE#為L,L,H,H。則指令為Row/Bank Active;隨後CS#拉高,command無效,

在第4個時鐘週期這4個訊號變為L,H,L,H,對照表格,指令為Read,經過幾個時鐘週期延遲,在3CLK後讀資料

5. 基本功能

      DDR3 SDRAM是高速動態隨機存取儲存器,內部配置有8個BANK。DDR3 SDRAM使用8n預取結構,以獲得高速操作。8n預取結構同介面組合起來以完成在I/O腳上每個時鐘兩個資料字的傳輸。DDR3  SDRAM的一個單次讀或寫操作由兩部分組成:一是在內部DRAM核中進行的8n位寬四個時鐘資料傳輸,另一個是在I/O腳上進行的兩個對應n位寬、半時鐘週期的資料傳輸。

       對DDR3 SDRAM的讀寫操作是有方向性的突發操作,從一個選擇的位置開始,突發長度是8或者是一個以程式設計序列的長度為4的Chopped突發方式。操作開始於Active命令,隨後是一個Read/Write命令。Active命令同時併發含帶地址位,以選擇Bank和Row地址(BA0-BA2選擇BANK、A0-A15選擇Row)。而Read/Write命令併發含帶突發操作的起始Column地址,並確定是否釋出自動預充電命令(通過A10)和選擇BC4或BL8模式(通過A12)(如果模式暫存器使能)。

        在正常操作之前,DDR3 SDRAM必要以預先定義的方式上電和初始化。

引入DDR3記憶體的動因   目前DDR2尚未完全取代DDR記憶體,在目前的整機環境下,DDR2基本能夠滿足各型別計算機的應用需求,那麼最新一代的DDR3相比DDR2具有哪些優勢,使得包括IntelAMD以及A-DATA在內的眾多國際頂級廠商都致力於DDR3的開發與應用呢?   最主要的原因是,由於DDR2的資料傳輸頻率發展到800MHz時,其核心工作頻率已經達到了200MHz,因此,再向上提升較為困難,這就需要釆用新的技術來保證速度的可持續發展性。另外,也是由於速度提高的緣故,記憶體的地址/命令與控制匯流排需要有全新的拓樸結構,而且業界也要求記憶體要具有更低的能耗 CPU廠商的DDR3記憶體攻略   Intel計劃在明年年中為其晶片組加入DDR3記憶體的支援。Intel晶片組事業部總經理Malinowski說,到那時市場才能準備好接受DDR3記憶體。 Intel最新的965晶片組家族只支援DDR2,並放棄了對DDR的支援。   AMD方面則要積極得多,與當年對DDR2記憶體的曖昧形成鮮明對比,這顯然與AM2平臺CPU在DDR2記憶體下表現不盡如人意有關:要表現出AMD CPU從DDR平臺遷移到DDR2平臺的優勢,其對DDR2記憶體頻率提高的要求比Intel Core更甚,但現階段以DDR2 533/667為主的記憶體市場,則讓AM2 CPU更多地受制於DDR2記憶體的高時延而不是受益於DDR2記憶體的高頻率。   AMD計劃在下一代的K8L架構CPU中全面匯入對DDR3記憶體的支援。在AMD的路線圖看,K8L CPU將支援同時DDR2和DDR3記憶體,但很顯然,DDR2記憶體不是AMD最好的選擇,高頻率、低時序的DDR3記憶體必然會是AMD積極開拓的物件。   同時,加大對DDR3記憶體的支援力度,也可以讓AMD改善與Intel的競爭中的被動地位。 DDR3記憶體的發展   早在2002年6月28日,JEDEC就宣佈開始開發DDR3記憶體標準,但從目前的情況來看,DDR2才剛開始普及,DDR3標準更是連影也沒見到。不過目前已經有眾多廠商拿出了自己的DDR3解決方案,紛紛宣佈成功開發出了 DDR3記憶體晶片,從中我們彷彿能感覺到DDR3臨近的腳步。而從已經有晶片可以生產出來這一點來看,DDR3的標準設計工作也已經接近尾聲。   半導體市場調查機構iSuppli預測DDR3記憶體將會在2008年替代DDR2成為市場上的主流產品,iSuppli認為在那個時候DDR3的市場份額將達到55%。不過,就具體的設計來看,DDR3與DDR2的基礎架構並沒有本質的不同從某種角度講,DDR3是為了解決DDR2發展所面臨的限制而催生的產物。   由於DDR2記憶體的各種不足,制約了其進一步的廣泛應用,DDR3記憶體的出現,正是為了解決DDR2記憶體出現的問題,具體有:   更高的外部資料傳輸率    更先進的地址/命令與控制匯流排的拓樸架構    在保證效能的同時將能耗進一步降低   為了滿足這些要求,DDR3記憶體在DDR2記憶體的基礎上所做的主要改進包括: 8bit預取設計,DDR2為4bit預取,這樣DRAM核心的頻率只有介面頻率的1/8DDR3-800的核心工作頻率只有100MHz   採用點對點的拓樸架構,減輕地址/命令與控制匯流排的負擔。    採用100nm以下的生產工藝,將工作電壓從1.8V降至1.5V增加非同步重置(Reset)ZQ校準功能 DDR3記憶體的封裝   從規格來看,DDR3仍將沿用FBGA封裝方式,故在生產上與DDR2記憶體區別不大。但是由設計的角度上來看,因DDR3的起跳工作頻率在1066MHz,這在電路佈局上將是一大挑戰,特別是電磁干擾,因此也將反映到PCB上增加模組的成本。   預計在DDR3進入市場初期,其價格將是一大阻礙,而隨著逐步的普及,產量的提升才能進一步降低成本。
DDR3記憶體的技術改進
  那麼,從技術看,DDR3記憶體與目前主流的DDR2記憶體相比,其特點體現在哪些方面呢?我們首先介紹DDR3記憶體針對DDR2中存在的不足的改進 邏輯Bank數量 DDR2 SDRAM中有4Bank和8Bank的設計,目的就是為了應對未來大容量晶片的需求。而DDR3很可能將從2Gb容量起步,因此起始的邏輯Bank就是8個,另外還為未來的16個邏輯Bank做好了準備 封裝(Packages)   DDR3由於新增了一些功能,所以在引腳方面會有所增加,8bit晶片採用78球FBGA封裝,16bit晶片採用96球FBGA封裝,而DDR2則有60/68/84球FBGA封裝三種規格。並且DDR3必須是綠色封裝,不能含有任何有害物質 突發長度(BL,Burst Length)   由於DDR3的預取為8bit,所以突發傳輸週期(BL,Burst Length)也固定為8,而對於DDR2和早期的DDR架構的系統,BL=4也是常用的,DDR3為此增加了一個4-bit Burst Chop(突發突變)模式,即由一個BL=4的讀取操作加上一個BL=4的寫入操作來合成一個BL=8的資料突發傳輸,屆時可通過A12地址線來控制這一突發模式。而且需要指出的是,任何突發中斷操作都將在DDR3記憶體中予以禁止,且不予支援,取而代之的是更靈活的突發傳輸控制(如4bit順序突發)。 定址時序(Timing)   就像DDR2從DDR轉變而來後延遲週期數增加一樣,DDR3的CL週期也將比DDR2有所提高。DDR2的CL範圍一般在2至5之間,而DDR3則在5至11之間,且附加延遲(AL)的設計也有所變化。DDR2時AL的範圍是0至4,而DDR3時AL有三種選項,分別是0、CL-1和CL-2。另外,DDR3還新增加了一個時序引數——寫入延遲(CWD),這一引數將根據具體的工作頻率而定。 DDR3記憶體的新增功能    如果上一部分介紹的DDR3記憶體對DDR2記憶體的改進更多的是某種程度上的修正或簡單提高的話,DDR3記憶體還有部分DDR2記憶體所不具備的功能,正是這些,讓DDR3記憶體的表現有了根本性的提高

相關推薦

DDR3Micron MT41J128M8 1Gb DDR3 SDRAM

首先,我們先了解一下記憶體的大體結構工作流程,這樣會比較容量理解這些引數在其中所起到的作用。這部分的講述運用DDR3的簡化時序圖。  DDR3的內部是一個儲存陣列,將資料“填”進去,你可以它想象成一張表格。和表格的檢索原理一樣,先指定一個行(Row),再指定一個列(Co

Docker run執行流volume,network和libcontainer線索

通常我們都習慣了使用Docker run來執行一個Docker容器,那麼在我們執行Docker run之後,Docker到底都做了什麼工作呢?本文通過追蹤Docker run(Docker 1.9版本)的執行流程,藉由對volume,network和libcon

spark最新原始碼下載並匯入到開發環境下助推高質量程式碼(Scala IDEA for Eclipse和IntelliJ IDEA皆適用spark2.2.0原始碼包圖文

  不多說,直接上乾貨! 前言     其實啊,無論你是初學者還是具備了有一定spark程式設計經驗,都需要對spark原始碼足夠重視起來。   本人,肺腑之己見,想要成為大資料的大牛和頂尖專家,多結合原始碼和操練程式設計。   好一段時間之前,寫過這篇部落格

Linux(Centos)下調整分區大小home和根分區

vertical speech col 信息 卸載 記錄 jsb 大小 control 在安裝新系統的時候,有時候沒法預估或者說錯誤的劃分了分區大小,常常會導致我們後面的操作出現極大地不方便,比如某個分區分的太小了,導致 軟件安裝的時候會報安裝空間不夠,這就很麻煩。在

u-boot原始碼目錄分析jz2440 u-boot1.1.6

一、檔案的分析 arm_config.mk。字尾是.mk,是一個Makefile檔案,將來在某個Makefile中會去呼叫它。 Changelog檔案,修改記錄檔案,該檔案記錄了這個uboot專案的版本變遷以及每個版本較上個版本修改的記錄。 config.mk。和arm_

基於GDAL庫,讀取.nc文件海洋表溫數據

調試 cfi 主函數 != mes stdstring 微軟 detail back   對於做海洋數據處理的同學,會經常遇到nc格式的文件,nc文件的格式全稱是NetCDF,具體的詳細解釋請查詢官網【https://www.unidata.ucar.edu/softwar

【資料庫】關於日期的處理greenplum和postgresql和hive

那個啥,本人菜鳥一隻,如果有什麼說錯的地方還請大家批評指出!! 好,開始說正事,日期處理和判斷是十分常見的,本文就自己使用的資料庫,和hive資料倉庫來說說,我使用到的一些日期的處理和判斷,當然技術能力有限,我也很菜,所以如果有說錯或者遺漏的還請大家多多包涵,望能批評指出,也讓我的水平提高提高!

json 資料持久化賬號和使用者名稱的儲存

以賬號和使用者名稱的儲存為例 一、建立公共類使用者,定義使用者類的欄位:如賬號、密碼等 二、建立公共類列表,在列表類內定義一個使用者類型別的列表,定義列表需要匯入名稱空間System.Collections.Generic 三、儲存使用者 1.建立一個註冊方法 2. 判斷輸入框是否為

使用jdbc向資料庫中注入大量資料10W條資料批量插入

例項:10w條資料的插入(批量插入) import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class HomeWork02 { //預

名人問題 演算法解析與Python 實現 O(n) 複雜度 Leetcode 277. Find the Celebrity

1. 題目描述 Problem Description Leetcode 277. Find the Celebrity Suppose you are at a party with n people (labeled from 0 to n -

矩陣快速冪斐波那契數列

小 M 玩數列 【問題描述】 小 W 發現了一個神奇的數列: () = ( − 1) + ( − 2) { ≥ 3, (1) = 1, (2) = 1} ,這就是著名的 Fibonacci Se

Matlab繪製三維曲面二維高斯函式

  寒假學習了一下Python下的NumPy和pymatlab,感覺不是很容易上手。來學校之後,決定繼續看完數字影象處理一書。還是想按照上學期的模式,邊看邊實現書中的演算法。上學期看的時候,是用C語言實現的,發現寫程式太耗時間了,所以決定還是學習下Matlab吧(寒假莫有學會Python中的那些庫應用。。。)

Servlet容器啟動過程Tomcat中啟動Servlet容器

一、Tomcat的總體結構中的Service模組及Container容器(引入) tomcat啟動server伺服器(包含多個服務模組)對外提供Service服務,Service模組由Container元件連線多個Connector構成。 Service

python 其他.py 與tkinter介面傳值的方法遍歷資料夾進度

本小白沒深入瞭解過python的原理,多個檔案只知道在一個.py檔案裡import另一個.py檔案但是問題來了 ,帶著介面的被import後會又多出來一個視窗! 就算是呼叫一下函式都會再彈出一個介面!於是,經過不斷嘗試我分享一下我的方法……(本小白還沒用到類)本人做了一個小工

YOLOv3 實練VOC2007、2012資料集

訓練裝置:Lenovo 拯救者; GPU:1070ti; 視訊記憶體:8GB; 第一次訓練:採用預設引數,以預訓練好的darknet53.conv.74.1為預載入權重開始訓練;視訊記憶體,卒;報錯:out of memory; 第二次訓練:更改引數

FCN語義分割訓練資料siftflow和voc2012資料集

截至目前,現已經跑通了siftflow-fcn32s,voc-fcn32s,並製作好了自己的資料集,現在就等大批資料的到來,進而針對資料進行引數fine-tuning,現對我訓練的訓練流程和訓練過程中遇到的問題,做出總結和記錄,從而對以後的學習作鋪墊。 通過這篇分析語義分割

phpmailer實現簡單的郵件傳送網易郵箱smtp伺服器

1、描述 第一次做到用php做到傳送郵件的功能。 Google了一下,php內建函式裡面有一個mail()函式。但是使用mail的話,會涉及到很多問題,我也沒有仔細研究過,反正都是和smtp協議息息相關。 於是,就去GitHub上開源的檔案傳送封裝好的專案

VS 2013 統一修改所有工程的目錄配置 boost、opencv3 的安裝

在 vs2013安裝配置C++boost庫 一文中我們介紹了,如何在vs2013環境裡配置安裝boost庫。在配置vs2013時,我們只是介紹瞭如何對當前專案或者某一專案進行boost相關庫等檔案目錄的設定,也即如果再新建一個工程,我們需重新配置工程中的bo

Linux下fork機制PHP

考:https://blog.csdn.net/jason314/article/details/5640969 1.fork簡介 一個程序,包括程式碼、資料和分配給程序的資源。fork()函式通過系統呼叫建立一個與原來程序幾乎完全相同的程序,也就是兩個程序可以做完全相同的事,但如果初始引數

Java容器Array Arrays ArrayList

開發十年,就只剩下這套架構體系了! >>>