【问题标题】:Matlab load function performanceMatlab加载函数性能
【发布时间】:2014-02-03 16:23:22
【问题描述】:

我观察到load 函数的性能非常低:

tic; v = load('file.txt', 'ascii'); toc
Elapsed time is 462.528007 seconds.

我反复获得约 460 秒的性能。 文件大小为 5.9 GB,为 4 列数据,如下所示:

00319929  00786575  00320101  00786305
00319929  00786575  00320107  00786305
00319929  00786575  00320113  00786306
00319929  00786575  00320120  00786306
and so on

同一文件的常规复制大约需要 2 秒:

>> time dd if=file.txt  of=/dev/null bs=1024k
5669+1 records in
5669+1 records out
5945005371 bytes (5.9 GB) copied, 1.28557 seconds, 4.6 GB/s

real    0m1.287s
user    0m0.001s
sys     0m1.286s

所以这不是文件系统问题。

load函数这么慢正常吗?

【问题讨论】:

  • 在 Matlab 工作区中加载 6 Gig 的数据需要一段时间,我并不感到惊讶。
  • 复制文件与将所有数据存储在内存中不同。 textscanload 快吗?您需要将其作为字符串读入还是要将数据转换为整数(即​​'00319929' 变为319929)?
  • 我并不感到意外。加载文件不仅仅是从磁盘流式传输它。顺便说一句:加载 7k .mat 文件 (200MB) 大约需要 180 秒。
  • 您的dd 测量值具有误导性。即使是连接 PCIe 的 SSD 也无法维持 4.6 GB/s 的传输速率。 (SATA 和 SAS 等常用存储总线的上限甚至更低)
  • 我正在从 Panasas(高性能并行存储)驱动器读取数据。所以传输率很好。

标签: matlab


【解决方案1】:

试试textscan,它可能更快,可以让你在读入的时候转换数据,从而节省内存:

fid = fopen('file.txt');
v = textscan(fid,'%s%s%s%s'); % strings
%v = textscan(fid,'%d%d%d%d','CollectOutput',true); v = v{1}; % uint32
%v = textscan(fid,'%f%f%f%f','CollectOutput',true); v = v{1}; % double
fclose(fid);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    相关资源
    最近更新 更多