2GB的mat文件,裡面是一個大型矩陣,matlab載入到內存需要23秒。現在用C++,有哪些辦法可以提高載入速度?

不考慮其他因素,單就如何提高大文件的內存載入速度,希望大家給點意見。


壓縮磁碟文件。用cpu時間換io時間

mmap和CreateFileMapping只是建立磁碟到內存的映射,映射了不代表已經載入內存,文件內容載入內存不代表在內存里建立了數據結構。除非內存結構直接存入磁碟,否則這類方法對載入速度沒有任何幫助

壓縮可以減少io時間,換SSD也能減少io時間。解析演算法如果可以改成並行的,也可以提升速度。但瓶頸最終還是磁碟io


感覺已經不是軟體問題了,應該換高速SSD。現在MATLAB載入的速度是100MB/s,基本上到機械硬碟的最好水平了。在載入時你可以觀察一下CPU是否已使用了(1/邏輯核心數)*100%。如果已經到了,應該說基本沒有提升的空間了。你換用C++寫也不能超越存儲設備的物理極限。


挑個內存大點的機器,放到/dev/shm裡面,不換C++都行

你這文件才2GB,其實cp一下整個文件就都cahce掉了


規劃緊湊的文件格式,制定位置無關數據結構,採用內存映射的方式,邊載入邊計算


CreateFileMapping function (Windows)

你需要這個API


整個壓縮矩陣演算法咯

既然是io的問題,那就充分壓榨CPU去~

例如,原來文件有一段是讀連續的51個0,那我就在生成文件的時候寫個代碼壓縮文件,裡面只有一句51 0。

讀的時候再反向解釋咯


推薦閱讀:

Windows 的路徑中表示文件層級為什麼會用反斜杠 『』,而 UNIX 系統都用斜杠 『/』?
在遊戲開發領域,不考慮現有開發人員熟悉程度,函數式編程在設計上或者理論上有它的先天缺陷嗎?
單片機多位元組除法怎麼實現?
為什麼大家都能接受2D橫版遊戲鏡像翻轉後人物左手持武器這種設定?
能不能設計針對確定數對的通用轉換函數?

TAG:操作系統 | 編程 | MATLAB | C |