2016-03-14 36 views
0

使用Matlab,我將生成幾個數據文件並將它們以H5格式存儲爲20x1500xN,其中N是一個可以變化的整數,但通常在2300左右。每個文件將有4個具有相同結構的不同數據集。因此,我將很快實現存儲問題。我的兩個問題:在Matlab中使用HDF5/H5優化壓縮

  1. 有什麼理由不分割的4個不同的數據集,並只保存爲4x20x1500xN呢?我寧願讓它們分裂,因爲它是不同的信號形式,但是如果有任何計算/壓縮優勢而不讓它們分離,我會加入它們。

  2. 使用Matlab的內置壓縮,我設置了deflate=9(和DataType=single)。不過,我現在已經意識到使用deflate會將我的計算時間與5相乘。我意識到這可能與我的ChunkSize有關,我只是將它放在20x1500x5之後 - 沒有任何推理。有沒有一種戰略方法來優化計算負荷w.r.t.通縮和壓縮時間?

謝謝。

+1

比較你用'save('example.mat','yourdata',' - v7.3')'得到的性能和文件大小。它寫了一個gip壓縮HDF5,根據我的經驗,在速度和壓縮之間有一個很好的折中。意識到我直接停止使用hdf5庫。 – Daniel

+0

@Daniel事情是我要用parfor循環寫入這個文件,這就是我選擇使用H5的原因。 –

+0

沒有理由不使用保存在上下文中:http://www.mathworks.com/matlabcentral/answers/135285-how-do-i-use-save-with-a-parfor-loop-using-parallel -computing-toolbox – Daniel

回答

1

1-拆分或合併?它在壓縮過程中不會產生影響,因爲它是以塊的形式執行的。

2-你的選擇似乎確實很糟糕。塊大小決定了將被獨立壓縮的每個塊的形狀和大小。不好的一面是每塊大小都是600 kB,比L2高速緩存大得多,所以你的CPU可能會扭曲它的手指,等待數據進入。根據數據的性質和使用模式,你將使用大多數(一次讀取整個數組,隨機讀取,連續讀取...),您可能需要定位L1或L2大小,或者介於兩者之間。 Here是一些使用Python庫進行的實驗,可以爲您提供指導。

一旦你選擇了塊大小(你的壓縮塊有多少個字節),你必須選擇一個塊形。如果您要進行部分讀取,或者如果想要一次讀取整個陣列,則我會推薦最接近您的閱讀模式的形狀,如果您正在進行部分讀取,或者填寫速度最快的軸。在你的情況下,這將是類似於1x1500x10,我認爲(第二軸是最快的,最後一個是最快的,最慢的,如果我錯了,改變)。

最後,請記住,細節完全取決於您運行的特定機器:CPU,硬盤或SSD的質量和負載,RAM的速度......所以微調總是需要一些實驗。

+0

非常感謝你的一個啓發性帖子。絕對可用。 –