91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在你的應(yīng)用程序里內(nèi)存的訪問帶寬能夠達到多少?

冬至配餃子 ? 來源:開發(fā)內(nèi)功修煉 ? 作者:張彥飛allen ? 2022-08-30 16:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

帶寬是存儲系統(tǒng)一個的一個非常重要的衡量指標,內(nèi)存帶寬指的是CPU從內(nèi)存讀取或?qū)懭霐?shù)據(jù)到內(nèi)存的速率。我們今天來思考一個問題,在你的應(yīng)用程序里內(nèi)存的訪問帶寬能夠達到多少?

1、各代內(nèi)存規(guī)格

理論上內(nèi)存帶寬的計算公式是:Band Width = Speed * Data Width。在這個公式的基礎(chǔ)上,我們來看一下各代規(guī)格的內(nèi)存帶寬表現(xiàn)。

pYYBAGMN0JaAP-gQAACzK2Ayvr8242.png

圖1 各代內(nèi)存帶寬規(guī)格

從上圖來看,DDR3代的內(nèi)存 DDR3代1066MHz的帶寬都已經(jīng)達到了8.5GB/s, DDR4代3200MHz更是達到了驚人的25.6G。廠家在進行銷售的時候也都是用這個公式來算,言外之意就是告訴你:“我家的產(chǎn)品非???,大家趕快來買??!”

廠家這么宣傳似乎也不算錯,但是有誘導(dǎo)性的謊言在其中。廠家這個數(shù)據(jù)的基礎(chǔ)是內(nèi)存嚴格以順序IO的方式工作,而且把傳輸?shù)膬?nèi)存地址也當數(shù)據(jù)來看,進而計算出的結(jié)果。但我們在《內(nèi)存隨機訪問也比順序慢,帶你深入理解內(nèi)存IO過程》中明白了的是,內(nèi)存在并一定是所有的Data Speed周期都在源源不斷往外吐數(shù)據(jù)。在CPU傳入了行地址后,內(nèi)存打開一行需要tRCD+tRP個時鐘周期的延遲。輸入列地址后,又需要等待CL個時鐘周期。而內(nèi)存作為易失性存儲元器件,又需要定時對所有的行進行充電,來保證數(shù)據(jù)不丟失。所以,在實踐中,我們并不是總是能夠達到廠家宣傳的理論帶寬值。

注意:理論帶寬值計算時采用的是內(nèi)存的Speed,也就是其數(shù)據(jù)頻率。而內(nèi)存的延遲呢,用的是時鐘周期。現(xiàn)代的內(nèi)存在時鐘周期的上沿和下沿都可以傳輸數(shù)據(jù),所以數(shù)據(jù)頻率比Speed又慢了一半。對于筆者Speed為1067MHz的內(nèi)存條,其時鐘頻率是553MHz。

***說過,實踐是檢驗真理的唯一標準。我們今天就來進行一下實際的測試,看看內(nèi)存的到底每秒能給我們吐出多少的數(shù)據(jù)。和前文《實際測試內(nèi)存在順序IO和隨機IO時的訪問延時差異》的測試方法類似,我們今天對方法進行下小改動,用它來測試帶寬。

2、順序IO情況核心測試方法

測試代碼主體上和延遲測試差不多,定義一個指定大小的數(shù)組,然后以指定步長對其進行訪問。

poYBAGMN0KSAadyyAABVCCQzOc0031.png

考慮到內(nèi)存對齊能提高性能,所以公平起見,我們每次都是按內(nèi)存位寬去取的(一個double 8個字節(jié),正好是一個內(nèi)存位寬)。帶寬就是一秒內(nèi)訪問過的字節(jié)總數(shù),所以我們通過如下代碼進行計算。

result = total_accessed_bytes * 1000 / used_microseconds;

3、順序IO情況帶寬測試結(jié)果

筆者的服務(wù)器上的內(nèi)存條是DDR3,1067MHz,延遲參數(shù)為7-7-7-24。我們進行了多場景的測試。

場景一:固定數(shù)組大小2K,調(diào)節(jié)步長

poYBAGMN0L6AaBI7AAA10fOLvZw392.png

數(shù)組為2k,足夠小到L1 cache全部都能裝的下。這時候其實基本實際內(nèi)存IO發(fā)生的很少,大部分都是更高效的L1 cache的IO,在CPU內(nèi)部就完成了。但最高值也才6G而已,也沒有達到廠家宣稱的8GB。

場景二:固定步長為8,數(shù)組從32K到64M

pYYBAGMN0NOAbjKSAABDuNLdnFo811.png

數(shù)組越大,Cache越裝不下,數(shù)據(jù)訪問的IO會更多地往后穿透到L2、L3和內(nèi)存。L1、L2、L3和內(nèi)存IO的性能依次遞減,因此數(shù)組越大,平均帶寬就會越低。

場景三:步長為32,數(shù)組從32K到64M

poYBAGMN0OiAeO6SAABChIbWD64157.png

步長增加后,穿透到內(nèi)存的次數(shù)進一步增加,帶寬進一步下降。這個時候,我們應(yīng)用程序視角看到的數(shù)據(jù)帶寬已經(jīng)下降到1GB以下了。

4、再測隨機IO情況

前面的測試情況,雖然步長也在變化,但都是有序遞增。這樣內(nèi)存的連續(xù)兩次IO之間,雖然列地址會變,但是行地址極有可能不發(fā)生變化,因此效率還是算比較高。我們這次是來徹底隨機進行訪問,再來看一下。

pYYBAGMN0PmAQ8EyAAA6-fOd-wk416.png

當數(shù)組比較小的時候,雖然亂序訪問,但是cache能兜住,因此內(nèi)存IO實際上發(fā)生的很少。但當數(shù)組增加到64M的時候,再加上哪一級Cache都兜不住了。再加上訪問又足夠隨機,因此都穿透到了內(nèi)存,而且行的行地址也極大可能發(fā)生變化。這時,內(nèi)存帶寬竟然下降到了474M。

5、結(jié)論

所以內(nèi)存的帶寬并沒有你想象的那么快,在隨機IO工作模式的情況下,帶寬只有474M而已?,F(xiàn)在SSD固態(tài)硬盤順序IO也差不多能達到這個數(shù)量級了。所以,我們以后不要魯莽地說內(nèi)存比硬盤要快很多??觳豢?,關(guān)鍵取決于你怎么用!



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • DDR
    DDR
    +關(guān)注

    關(guān)注

    11

    文章

    754

    瀏覽量

    69137
  • 帶寬
    +關(guān)注

    關(guān)注

    3

    文章

    1040

    瀏覽量

    43375
  • 時鐘
    +關(guān)注

    關(guān)注

    11

    文章

    1971

    瀏覽量

    135013
  • 存儲系統(tǒng)
    +關(guān)注

    關(guān)注

    2

    文章

    433

    瀏覽量

    41897
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    什么是 SASE?| 安全訪問服務(wù)邊緣

    為任何地點的用戶提供更加簡單、安全和一致的應(yīng)用程序訪問。它將網(wǎng)絡(luò)管理和安全控制結(jié)合在一起,使組織能夠更有效地管理分布式網(wǎng)絡(luò)環(huán)境。 換句話說,SASE為組織提供了一種方式,將過去相互獨立的網(wǎng)絡(luò)和
    的頭像 發(fā)表于 02-02 18:28 ?359次閱讀

    容易造成單片機內(nèi)存溢出的幾個陷阱介紹

    面的知識點,用來互相學(xué)習(xí),更用來提醒自己,并作為自己的一個經(jīng)驗總結(jié)。 我們知道我們的程序一般是儲存在flash里面的,但是運行的時候是在內(nèi)存(RAM)運行的,我們的程序一般有這么幾
    發(fā)表于 01-23 07:25

    C語言訪問某特定內(nèi)存位置

    嵌入式系統(tǒng)經(jīng)常具有要求程序員去訪問某特定的內(nèi)存位置的特點。在某工程中,要求設(shè)置一絕對地址為0x67a9的整型變量的值為0xaa66。編譯器是一個純粹的ANSI編譯器。寫代碼去完成這一任務(wù)。 考察點
    發(fā)表于 12-22 15:42

    藍牙中心設(shè)備,同時連接10個外設(shè),通信帶寬達到20k/s嗎

    藍牙中心設(shè)備同時連接 10 個外設(shè)時,通信帶寬能否達到 20k/s(20KB/s,約 160kbps)需結(jié)合藍牙版本、連接方式及實際場景綜合判斷,多數(shù)情況下通過合理配置可實現(xiàn),部分極限場景可能受限制
    發(fā)表于 11-17 15:48

    如何在應(yīng)用程序調(diào)試期間分析棧和堆使用情況

    隨著 AMD Vitis 統(tǒng)一軟件平臺 2021.2 的發(fā)布,Vitis 引入了一個 Tcl 腳本,用于在應(yīng)用程序運行的特定時間點協(xié)助查找棧和堆的內(nèi)存使用情況。該腳本已延續(xù)到后續(xù)的 Vitis 版本
    的頭像 發(fā)表于 10-24 16:54 ?897次閱讀
    如何在<b class='flag-5'>應(yīng)用程序</b>調(diào)試期間分析棧和堆使用情況

    學(xué)生適合使用的SOLIDWORKS 云應(yīng)用程序

    隨著科技的不斷發(fā)展,計算機輔助設(shè)計(CAD)技術(shù)已經(jīng)成為現(xiàn)代工程教育的重要組成部分。SOLIDWORKS作為一款CAD軟件,其教育版云應(yīng)用程序為學(xué)生提供了強大而靈活的設(shè)計平臺。本文將探討
    的頭像 發(fā)表于 09-15 10:39 ?781次閱讀
    學(xué)生適合使用的SOLIDWORKS 云<b class='flag-5'>應(yīng)用程序</b>

    恩智浦推出自主安全訪問解決方案,重新定義門禁

    時,智能門鎖能夠自動識別您的手機并解鎖,您無需掏出手機、解鎖屏幕或打開應(yīng)用程序——享受安全、無感的體驗。恩智浦自主安全訪問解決方案將安全訪問和自動化技術(shù)整合為一個完整的平臺,為產(chǎn)品制造
    發(fā)表于 06-12 15:07 ?1534次閱讀
    恩智浦推出自主安全<b class='flag-5'>訪問</b>解決方案,重新定義門禁

    HarmonyOS優(yōu)化應(yīng)用內(nèi)存占用問題性能優(yōu)化一

    一、 概述 用戶功能的不斷增強,應(yīng)用越來越復(fù)雜,占用的內(nèi)存也在不斷膨脹,而內(nèi)存作為系統(tǒng)的稀缺資源比較有限,當應(yīng)用程序占用過多內(nèi)存時,系統(tǒng)可能會頻繁進行
    發(fā)表于 05-21 11:27

    如何從 Microsoft Visual C++ 應(yīng)用程序 (CyAPI.h) 訪問 CYUSB3014 芯片組的 i2c 接口?

    1. 如何從 Microsoft Visual C++ 應(yīng)用程序 (CyAPI.h) 訪問 CYUSB3014 芯片組的 i2c 接口? 我在定制相機中使用 CYUSB3014。 當我開發(fā)我的相機
    發(fā)表于 05-19 07:21

    如何使用USB中斷傳輸方法訪問FPGA?

    我目前正在設(shè)計一個可以通過 CY7C65216 從 Windows PC 訪問 FPGA 的單元。 我正在考慮使用USB中斷傳輸方法訪問FPGA。 這可能嗎? 如果有,是否有任何示例軟件程序(驅(qū)動
    發(fā)表于 05-19 06:04

    如何使用CYUSB3KIT-003使用GPIO訪問SRAM的應(yīng)用程序?

    你好。我是CYUSB3的初學(xué)者。 我想創(chuàng)建一個使用 CYUSB3KIT-003 使用 GPIO 訪問 SRAM 的應(yīng)用程序。 目前我已經(jīng)在我的電腦上安裝了SDK,但是有什么參考資料嗎?
    發(fā)表于 05-14 06:51

    使用C++中的CyAPI編寫的應(yīng)用程序上遇到了問題,求解決

    我在使用 C++ 中的 CyAPI 編寫的應(yīng)用程序上遇到了問題。 我將 XferData() 方法與其他所有端點類型一起使用,沒有遇到任何問題。 但是,將其與 Endpoint0 一起使用會引發(fā)
    發(fā)表于 05-13 06:11

    MCP:連接AI與應(yīng)用程序的開放標準!

    。 在第二種方式中,開發(fā)者需要為AI大模型編寫與具體應(yīng)用程序協(xié)作的訪問代碼,例如,開發(fā)者希望DeepSeek-R1與Gmail協(xié)作,就需要手動編寫協(xié)作代碼。這種手動編寫協(xié)作代碼的方式,耗時費力,還難以復(fù)用。 一,什么是MCP? 為解決AI應(yīng)用開發(fā)者手動編寫A
    的頭像 發(fā)表于 03-21 18:21 ?2206次閱讀
    MCP:連接AI與<b class='flag-5'>應(yīng)用程序</b>的開放標準!

    將LTC6563用作跨阻放大器時如何才能達到手冊中標注的600MHz帶寬?

    的光電二極管,反向電壓加到-8V時宣稱僅有0.55pf的結(jié)電容,光電流輸入的部分一到六層全部挖空以盡量減少電容。目前在5K歐姆檔位下能夠達到380MHz帶寬。 如果我想進一步提高帶寬,
    發(fā)表于 03-21 07:41

    快速搞懂C語言程序內(nèi)存分區(qū)!

    程序運行過程中,操作系統(tǒng)會根據(jù)程序的需要,將內(nèi)存劃分為多個功能不同的區(qū)段,以便更高效地管理內(nèi)存資源和確保程序的穩(wěn)定運行。不同的
    的頭像 發(fā)表于 03-14 17:37 ?1581次閱讀
    快速搞懂C語言<b class='flag-5'>程序</b><b class='flag-5'>內(nèi)存</b>分區(qū)!