MATLAB的性能不一致

MATLAB的性能不一致,matlab,hdf5,Matlab,Hdf5,我正在尝试使用MATLAB文件交换上的函数。我注意到它在我的设置中的性能不一致。当我运行下面的代码时,我得到下面的时间。注意,在第四次跑步时,它花费了20倍的时间!通常每10次慢跑2到5次,随机分布(有时连续3次慢跑)。变化完全在低级别的H5ML.hdf5lib2函数中 我在4台不同的机器上试过。在其中两台(Server2008R2,Windows7)上,我看到了下面的巨大变化。在另外两台(服务器2008、服务器2012)上,几乎没有变化。这两个Server2008机箱具有相同的硬件、防病毒功能

我正在尝试使用MATLAB文件交换上的函数。我注意到它在我的设置中的性能不一致。当我运行下面的代码时,我得到下面的时间。注意,在第四次跑步时,它花费了20倍的时间!通常每10次慢跑2到5次,随机分布(有时连续3次慢跑)。变化完全在低级别的H5ML.hdf5lib2函数中

我在4台不同的机器上试过。在其中两台(Server2008R2,Windows7)上,我看到了下面的巨大变化。在另外两台(服务器2008、服务器2012)上,几乎没有变化。这两个Server2008机箱具有相同的硬件、防病毒功能,并且几乎没有任何东西在其上运行。所以这个问题是机器特有的。然而,所有的框都是相对强大的64位,所以我认为这个问题不应该发生。是否有一些棘手的低电平设置,使HDF5的工作更一致

当我尝试使用
save
fwrite
命令而不是下面的代码时,时间几乎没有变化,这使我认为这是HDF5特有的问题

clear classes;
delete('test_*.mat');
x = rand(10000, 1000);
%%
disp('Using h5write:');
for j = 1:10
    % make new file
    fname = sprintf('test_h5_%d.mat', j);
    dummy = 0;
    save(fname, '-v7.3', 'dummy');
    varname = '/x';
    h5create(fname, varname, size(x), 'DataType', class(x));
    tic;
    h5write(fname, varname, x);
    toc;
end

disp('Using save:');
for j = 1:10
    tic;
    fname = sprintf('test_save_%d.mat', j);
    save(fname, 'x');
    toc;
end

disp('Using fwrite:');
for j = 1:10
    tic;
    fname = sprintf('test_fwrite_%d.mat', j);
    fileID = fopen(fname,'w');
    fwrite(fileID, x, 'double');
    fclose(fileID);
    toc;
end

disp('Using memory map:');
for j = 1:10
    tic;
    fname = sprintf('test_fwrite_%d.mat', j);
    m = memmapfile(fname, ...
        'Format','double');
    m.Writable = true;
    m.Data = x;
    toc;
end
clear m;
上述代码的输出:

>> 
Using h5write:
Elapsed time is 0.120691 seconds.
Elapsed time is 0.123445 seconds.
Elapsed time is 0.109917 seconds.
Elapsed time is 2.773781 seconds.
Elapsed time is 0.104730 seconds.
Elapsed time is 0.115631 seconds.
Elapsed time is 0.106282 seconds.
Elapsed time is 0.119643 seconds.
Elapsed time is 0.109200 seconds.
Elapsed time is 0.110083 seconds.
Using save:
Elapsed time is 2.774994 seconds.
Elapsed time is 2.776656 seconds.
Elapsed time is 2.777405 seconds.
Elapsed time is 2.811365 seconds.
Elapsed time is 2.780027 seconds.
Elapsed time is 2.775661 seconds.
Elapsed time is 2.776308 seconds.
Elapsed time is 2.800510 seconds.
Elapsed time is 2.783472 seconds.
Elapsed time is 2.782114 seconds.
Using fwrite:
Elapsed time is 0.035606 seconds.
Elapsed time is 0.094308 seconds.
Elapsed time is 0.033619 seconds.
Elapsed time is 0.034147 seconds.
Elapsed time is 0.033776 seconds.
Elapsed time is 0.034627 seconds.
Elapsed time is 0.033806 seconds.
Elapsed time is 0.035084 seconds.
Elapsed time is 0.034562 seconds.
Elapsed time is 0.039331 seconds.
Using memory map:
Elapsed time is 0.079036 seconds.
Elapsed time is 0.035585 seconds.
Elapsed time is 0.035654 seconds.
Elapsed time is 0.036398 seconds.
Elapsed time is 0.035054 seconds.
Elapsed time is 0.039047 seconds.
Elapsed time is 0.036286 seconds.
Elapsed time is 0.035016 seconds.
Elapsed time is 0.036145 seconds.
Elapsed time is 0.036497 seconds.
ver命令的输出:

>> ver
----------------------------------------------------------------------------------------------------
MATLAB Version: 8.2.0.701 (R2013b)
MATLAB License Number: xxxxxx
Operating System: Microsoft Windows Server 2008 R2 Version 6.1 (Build 7601: Service Pack 1)
Java Version: Java 1.7.0_11-b21 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode
----------------------------------------------------------------------------------------------------
MATLAB                                                Version 8.2        (R2013b)
Database Toolbox                                      Version 5.0        (R2013b)
Statistics Toolbox                                    Version 8.3        (R2013b)
更新: 我试过:

  • 重新启动盒子
  • 我有一个相同的框(h/w,os),这个问题不会发生在这个框上。我杀死了慢盒上的所有进程,而不是正常盒上的进程。这没什么区别
  • 当我将数据更改为随机数据时,没有任何区别
  • 当我改用save命令时,时间是一致的。这让我觉得这不是一般的磁盘问题,而是关于设置和hdf5的问题

  • 您是否有防病毒、索引或任何其他I/O密集型进程在一台机器上运行,而在另一台机器上运行?好的,非常奇怪。我刚刚尝试了另一个在规格(h/w、操作系统、防病毒)上与我显示结果的盒子完全相同的盒子。问题没有发生!所以这是一个非常特殊的盒子。嗯…重启有帮助吗?总是在5号和9号吗?我会把它放在一个循环中,比如说100次,然后检查它是否总是相同的2。您总是从一个干净的目录开始,这样test#.mat就不存在了吗?它是随机的,不总是特定的目录。有时是连续三次。它几乎总是在2到5之间,这是缓慢的。它可以慢10到50倍。干净的目录没有什么区别。