2GB的mat文件,裡面是一個大型矩陣,matlab載入到內存需要23秒。現在用C++,有哪些辦法可以提高載入速度?
01-03
不考慮其他因素,單就如何提高大文件的內存載入速度,希望大家給點意見。
壓縮磁碟文件。用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橫版遊戲鏡像翻轉後人物左手持武器這種設定?
※能不能設計針對確定數對的通用轉換函數?