在本地机器上运行并行Matlab或另一个建议

4视图(30天)
我有一个matlab代码读取AAA_1两套文本文件。txt……AAA_2000。txt和BBB_1。txt……BBB_2000。三种。文件非常内衣裤(100行),但是有1000年代的他们。AAA_1 matlab中的循环读取文件。txt和BBB_1。txt和做一些操作。每个步骤都是几秒钟。但由于大量的文件总运行时是非常大的。我有一代核心i7 9日和64 gb内存和6残肢的显卡。有什么方法我可以使用更多的内存和显卡运行程序更快。最好的办法是什么跑得更快吗?
4评论
Avik Mahata
Avik Mahata 2022年1月30日
编辑:沃尔特·罗伯森 2022年3月2日
谢谢你的回复。我非常感谢抽出时间回复。
它并不需要2秒,instanteneous。我只是想说它真的很快。我毫不怀疑它将更快在C / c++ / Python。但是我有更多其他的东西是用Matlab编写的有关这个项目,我每天使用,效率并不是一个问题。我有时间,服用一段时间不是一个问题。下面是代码,当S和T的文件数量是5或10的非常快,但是当我开始增加文件的数量到100年代变得很慢。我有附加10文本文件。
clc
清晰的所有
S = dir (“f *”);
k = 1:元素个数(S)
年代(k) . name;
T = dir (“Nareplicate *’。);
k = 1:元素个数(T)
T (k) . name;
Nadump = dlmread (T (k) . name,' '9、0);
Fdump = dlmread (S . name (k),' '9、0);
L1 =长度(Nadump);
L2 =长度(Fdump);
我= 1:L1
j = 1: L2
X (i) =√(Fdump (j, 3) -Nadump(我,3))^ 2 + (Fdump (j, 4) -Nadump(我,4))^ 2 + (Fdump (j, 5) -Nadump(我,5))^ 2);
(我)= X (i) / 10;
Y (j,我)= (X (i));
% X (i) =√(Fdump (j, 3) -Nadump(我,3))^ 2 + (Fdump (j, 4) -Nadump(我,4))^ 2 + (Fdump (j, 5) -Nadump(我,5))^ 2);
% X (i) = X (i) / 10;
% Y (j, i) = (X (i));
结束
结束
% S = 0 (L1, L2);
% j = 1: L2
% S (j) = (Y (j,:));
%结束
% S1 = S (: 1);
日元= Y ';
Y2 =排序(Y1);
S1 =排序((Y2 (1,:)));
%发现指数的第一列元素满足equalit
陈霞ind1 = S1 (: 1) <;
ind2 = S1 (: 1) < 55;
ind3 = S1(: 1) <尾数就;
% ind4 = S (: 1) > .79;
%使用逻辑索引索引返回需要这些
A1 = S1 (ind1:);
A2 = S1 (ind2:);
A3 = S1 (ind3:);
% A4 = S (ind4:);
Q1 (k) = ((A1),长度(长度(A2)长度(A1)),长度(A3)长度(A2), 125 -长度(A3)];
结束
结束
W =总和(Q1) /(长度(T));
W1 = W / 125;
栏(诊断接头(W1),“堆叠”,“BarWidth”,1)
dlmwrite (“Ion-Pair-Stat.txt”第一季度,“分隔符”,' \ t ',“精度”3)

登录置评。

答案(2)

沃斯
沃斯 2022年1月30日
你有2嵌套循环,外循环所有F。*文件和内部循环所有Nareplicate之一。*文件。每种类型的文件5,内循环将运行25倍,执行相同的操作5次每一对文件。与1000个文件你的内循环执行100万次(做同样的事情在每一对文件1000倍),因此修复应该大大加快速度,我希望。
当前实现双回线与5 ~ 1:对文件
clc
清晰的所有
抽搐
S = dir (“f *”);
k = 1:元素个数(S)
年代(k) . name;
T = dir (“Nareplicate *’。);
k = 1:元素个数(T)
T (k) . name;
Nadump = dlmread (T (k) . name,' '9、0);
Fdump = dlmread (S . name (k),' '9、0);
L1 =长度(Nadump);
L2 =长度(Fdump);
我= 1:L1
j = 1: L2
X (i) =√(Fdump (j, 3) -Nadump(我,3))^ 2 + (Fdump (j, 4) -Nadump(我,4))^ 2 + (Fdump (j, 5) -Nadump(我,5))^ 2);
(我)= X (i) / 10;
Y (j,我)= (X (i));
% X (i) =√(Fdump (j, 3) -Nadump(我,3))^ 2 + (Fdump (j, 4) -Nadump(我,4))^ 2 + (Fdump (j, 5) -Nadump(我,5))^ 2);
% X (i) = X (i) / 10;
% Y (j, i) = (X (i));
结束
结束
% S = 0 (L1, L2);
% j = 1: L2
% S (j) = (Y (j,:));
%结束
% S1 = S (: 1);
日元= Y ';
Y2 =排序(Y1);
S1 =排序((Y2 (1,:)));
%发现指数的第一列元素满足equalit
陈霞ind1 = S1 (: 1) <;
ind2 = S1 (: 1) < 55;
ind3 = S1(: 1) <尾数就;
% ind4 = S (: 1) > .79;
%使用逻辑索引索引返回需要这些
A1 = S1 (ind1:);
A2 = S1 (ind2:);
A3 = S1 (ind3:);
% A4 = S (ind4:);
Q1 (k) = ((A1),长度(长度(A2)长度(A1)),长度(A3)长度(A2), 125 -长度(A3)];
结束
结束
W =总和(Q1) /(长度(T));
W1 = W / 125;
toc
运行时间是1.040420秒。
栏(诊断接头(W1),“堆叠”,“BarWidth”,1)
dlmwrite (“Ion-Pair-Stat.txt”第一季度,“分隔符”,' \ t ',“精度”3)
使用一个循环~ 0.3年代:
clc
清晰的所有
抽搐
S = dir (“f *”);
T = dir (“Nareplicate *’。);
k = 1:元素个数(S)
年代(k) . name;
T (k) . name;
Nadump = dlmread (T (k) . name,' '9、0);
Fdump = dlmread (S . name (k),' '9、0);
L1 =长度(Nadump);
L2 =长度(Fdump);
我= 1:L1
j = 1: L2
X (i) =√(Fdump (j, 3) -Nadump(我,3))^ 2 + (Fdump (j, 4) -Nadump(我,4))^ 2 + (Fdump (j, 5) -Nadump(我,5))^ 2);
(我)= X (i) / 10;
Y (j,我)= (X (i));
% X (i) =√(Fdump (j, 3) -Nadump(我,3))^ 2 + (Fdump (j, 4) -Nadump(我,4))^ 2 + (Fdump (j, 5) -Nadump(我,5))^ 2);
% X (i) = X (i) / 10;
% Y (j, i) = (X (i));
结束
结束
% S = 0 (L1, L2);
% j = 1: L2
% S (j) = (Y (j,:));
%结束
% S1 = S (: 1);
日元= Y ';
Y2 =排序(Y1);
S1 =排序((Y2 (1,:)));
%发现指数的第一列元素满足equalit
陈霞ind1 = S1 (: 1) <;
ind2 = S1 (: 1) < 55;
ind3 = S1(: 1) <尾数就;
% ind4 = S (: 1) > .79;
%使用逻辑索引索引返回需要这些
A1 = S1 (ind1:);
A2 = S1 (ind2:);
A3 = S1 (ind3:);
% A4 = S (ind4:);
Q1 (k) = ((A1),长度(长度(A2)长度(A1)),长度(A3)长度(A2), 125 -长度(A3)];
结束
W =总和(Q1) /(长度(T));
W1 = W / 125;
toc
运行时间是0.323742秒。
栏(诊断接头(W1),“堆叠”,“BarWidth”,1)
dlmwrite (“Ion-Pair-Stat.txt”第一季度,“分隔符”,' \ t ',“精度”3)
和简化计算削减下来的时间几乎一半(如果有什么不清楚我所做的,你可以把一个断点、检查变量和说服自己,这是做同样的事情以前做的,和/或回来,发布评论,我将解释):
clc
清晰的所有
抽搐
S = dir (“f *”);
T = dir (“Nareplicate *’。);
N =元素个数(年代);
Q1 = 0 (N, 4);
k = 1: N
Nadump = dlmread (T (k) . name,' '9 0)';
Fdump = dlmread (S . name (k),' '9、0);
L1 =大小(Nadump, 2);
L2 =大小(Fdump, 1);
Y = 0 (L1, L2, 3);
m = [3 4 5]
Y (:,:, m - 2) = Fdump(:,米)-Nadump (m:);
结束
S1 = min (√sum (y ^ 2, 3)) / 10, [], 2);
N1 = nnz (S1 < 0.28);
N2 = nnz (S1 < 0.55);
N3 = nnz (S1 < 0.78);
Q1 (k) = (N1 N2-N1 N3-N2 L2-N3);
结束
W1 = (Q1, 1) / N / 125;
toc
运行时间是0.181081秒。
栏(诊断接头(W1),“堆叠”,“BarWidth”,1)
dlmwrite (“Ion-Pair-Stat.txt”第一季度,“分隔符”,' \ t ',“精度”3)
如果你采取任何或所有这些变化,我打赌你会看到显著改善代码的速度当您运行在真正的文件(1000年代)。
1评论
Avik Mahata
Avik Mahata 2022年1月30日
@Benjamin 谢谢你花时间在周日早上回复。现在它非常快。这真的有帮助。

登录置评。


沃尔特·罗伯森
沃尔特·罗伯森 2022年1月28日
∫已经存储在一个固态硬盘的文件吗?
如果不是那么他们分开在两个(或更多)硬盘吗?最好是在不同的控制器吗?
一般来说,硬盘的性能峰值每驱动器通常是两个阅读的过程,一(有时是两个)驱动控制器。
我一直在测试一些三星酒吧+ USB 3.1闪存(makre确定你得到128 Gb或更高版本中,小的更慢)。在一个非常新的M1 MacBook,我阅读大约304 mb /秒;在我2013 iMac和外部USB3中心,我阅读大约386 mb /秒。写入速度只有60 mb /秒的读取速度是很好。
一年多前,我连接外部迅雷外部驱动湾2013 iMac;,WD红驱动器或HG明星驱动器,我要写225 m /秒,读到285位/秒。阅读速度不如那些新闪存……另一方面我运行它通过迅雷2 < - >迅雷3转换器,和可能会获得显著的性能改进如果我切换到我的新的iMac。
我的三星EVO (SSD)驱动器在同一外部外壳给我写490 m /秒的速度和阅读速度约530位/秒
…重点是关注什么样的以及它们是如何连接的驱动器可以帮助获得显著的性能改进。
2如果您正在使用一个USB驱动器,然后如果你有一个USB 3控制器,挑选质量SSD驱动器,或质量的闪存驱动器。三星栏+ 128 Gb硬盘只花了我C30美元。

类别

找到更多的在循环和条件语句帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的