gpt4 book ai didi

matlab - fread() 优化 matlab

转载 作者:行者123 更新时间:2023-12-03 17:33:04 24 4
gpt4 key购买 nike

我正在用三种不同的方式读取一个 40 MB 的文件。但是第一个比其他两个快得多。你们知道为什么吗?我宁愿在循环或whiles中实现条件来分离数据,而不是用第一个快速方法加载所有内容然后将它们分开 - 节省内存 -

LL=10000000;

fseek(fid,startbytes, 'bof');

%% Read all at once %%%%%%%%%%%%%%%%%%%%%%
tic
AA(:,1)=int32(fread(fid,LL,'int32'));
toc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

fseek(fid,startbytes,'bof');

%% Read all using WHILE loop %%%%%%%%%%%%%
tic
i=0;
AA2=int32(zeros(LL,1));
while i<LL
i=i+1;
AA2(i,1)=fread(fid,1,'int32');
end
toc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

fseek(fid,startbytes,'bof');

%% Read all using FOR loop %%%%%%%%%%%%%%%
tic
AA3=int32(zeros(LL,1));
for i=1:LL
AA3(i,1)=fread(fid,1,'int32');
end
toc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

耗时是 0.312916 秒。

耗时是 138.811520 秒。

耗时是 116.799286 秒。

最佳答案

这是我的两分钱:

是否启用了 JIT 加速器?

由于 MATLAB 是一种解释型语言,for循环可能会很慢。 while循环可能会更慢,因为在每次迭代中都会重新评估终止条件(与迭代预定次数的 for 循环不同)。然而,JIT acceleration 并非如此。 ,这可以显着提高他们的表现。

我现在不在 MATLAB 附近,所以我自己无法重现这种情况,但是您可以通过在命令窗口中键入以下内容来检查自己是否打开了 JIT 加速:

feature accel

如果结果是 0这意味着它已被禁用,这可能是性能大幅下降的原因。

系统调用太多?

我不熟悉 fread 的内部结构,但我只能假设一个 fread调用读取整个文件调用较少 system calls多于 fread来电。系统调用通常很昂贵,因此在某种程度上,这可以解释减速。

关于matlab - fread() 优化 matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14541846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com