s****1 发帖数: 425 | 1 我有一个200行的matlab code,由于数据量比较大,有几个百万量级的循环,能不用循
环的我都用矢量替代了。需要迭代上千次,运行时间也比较长(几天),我
32G 内存已经不够用了,不知道转成C或者java是不是有帮助?谢谢
maxepoch=1500;
cmax=1500000;
for nb=1:3
for m=1:30
Qw(:,:,m,nb)=ones(cmax,1)*constant; % 1500000*4*30*3
mu(:,:,m,nb)=
sigma(:,:,m,nb)=
end
end
for g=1:2000
for nb=1:3
x=batchdata(:,:,nb);%20000*800*3
.....
for m=1:30
for i=1:numwits(:,nb)%1000000*3
w(i,m,nb)= normrnd(mu(i,j,m,nb),sigma(i,j,m,nb));% j=one of
[1 2 3 ... 16]
end
h(:,:,m,nb)=; %1000*1000*30*3
hh(:,:,m,nb)=;%1000*800*30*3
hhh(:,:,m,nb)=;%800*500*30*3
hhhh(:,:,m,nb)=;%500*100*30*3
yx(:,:,m,nb)=;%100*500*30*3
yxx(:,:,m,nb)=;%500*800*30*3
yxxx(:,:,m,nb%800*1000*30*3
yxxxx(:,:,m,nb)=;%1000*1000*30*3
clear wx wxx wxxx wxxxx h hh hhh hhhh yx yxx yxxx yxxxx
if err(m,nb)>errbest(m,nb)
num=intersect(numbest{:,m,nb}(:),exist(:)); %几十万
for ii=1:length(num)
for i=1:k
c=bb{num(ii),:,m,nb}(i); %数组
if ...
...
elseif ...
...
else
...
end
...
end
end
else
...
for i=1:1000000
...
end
end
end
if error(nb)>serrbest(nb)
for ii=1:cmax
if ...
elseif ...
else
...
end
end
else
...
end
...
end
end
end | j**u 发帖数: 6059 | 2 matlab能并行的话要好很多,重新转换成C可能花不少时间写code。
【在 s****1 的大作中提到】 : 我有一个200行的matlab code,由于数据量比较大,有几个百万量级的循环,能不用循 : 环的我都用矢量替代了。需要迭代上千次,运行时间也比较长(几天),我 : 32G 内存已经不够用了,不知道转成C或者java是不是有帮助?谢谢 : maxepoch=1500; : cmax=1500000; : for nb=1:3 : for m=1:30 : Qw(:,:,m,nb)=ones(cmax,1)*constant; % 1500000*4*30*3 : mu(:,:,m,nb)= : sigma(:,:,m,nb)=
| m*******1 发帖数: 58 | 3 转成C会快很多。并行处理当然更好,用C实现并行很方便。
【在 j**u 的大作中提到】 : matlab能并行的话要好很多,重新转换成C可能花不少时间写code。
| j**u 发帖数: 6059 | 4 用C当然效率高多了,不过写code比起matlab要多花不少时间。
【在 m*******1 的大作中提到】 : 转成C会快很多。并行处理当然更好,用C实现并行很方便。
| m*******1 发帖数: 58 | 5 Matlab 运行太慢的情况下,还是值得改写成C,花不了多少时间,除非你调用了复杂的
Matlab 函数。
【在 j**u 的大作中提到】 : 用C当然效率高多了,不过写code比起matlab要多花不少时间。
| s****1 发帖数: 425 | 6 只能转c了,并行总是错误
parfor nb=1:s
b(:,nb)=rand(cmax,1);
exist=find(b(:,nb));
numwits=length(exist(:));
for m=1:L
r=rand(numwits,k);
for i=1:numwits
bnow(exist(i),:,m,nb)=Qw(exist(i),:,m,nb).^2;。Error: The
variable b in a parfor cannot be classified.我把parfor放在m循环前面就提示
bnow错误。这个错误很普遍,也在网上看了一些,不过对parfor里面的变量的限制还是
没深刻理解。 | s****1 发帖数: 425 | 7 我有一个200行的matlab code,由于数据量比较大,有几个百万量级的循环,能不用循
环的我都用矢量替代了。需要迭代上千次,运行时间也比较长(几天),我
32G 内存已经不够用了,不知道转成C或者java是不是有帮助?谢谢
maxepoch=1500;
cmax=1500000;
for nb=1:3
for m=1:30
Qw(:,:,m,nb)=ones(cmax,1)*constant; % 1500000*4*30*3
mu(:,:,m,nb)=
sigma(:,:,m,nb)=
end
end
for g=1:2000
for nb=1:3
x=batchdata(:,:,nb);%20000*800*3
.....
for m=1:30
for i=1:numwits(:,nb)%1000000*3
w(i,m,nb)= normrnd(mu(i,j,m,nb),sigma(i,j,m,nb));% j=one of
[1 2 3 ... 16]
end
h(:,:,m,nb)=; %1000*1000*30*3
hh(:,:,m,nb)=;%1000*800*30*3
hhh(:,:,m,nb)=;%800*500*30*3
hhhh(:,:,m,nb)=;%500*100*30*3
yx(:,:,m,nb)=;%100*500*30*3
yxx(:,:,m,nb)=;%500*800*30*3
yxxx(:,:,m,nb%800*1000*30*3
yxxxx(:,:,m,nb)=;%1000*1000*30*3
clear wx wxx wxxx wxxxx h hh hhh hhhh yx yxx yxxx yxxxx
if err(m,nb)>errbest(m,nb)
num=intersect(numbest{:,m,nb}(:),exist(:)); %几十万
for ii=1:length(num)
for i=1:k
c=bb{num(ii),:,m,nb}(i); %数组
if ...
...
elseif ...
...
else
...
end
...
end
end
else
...
for i=1:1000000
...
end
end
end
if error(nb)>serrbest(nb)
for ii=1:cmax
if ...
elseif ...
else
...
end
end
else
...
end
...
end
end
end | j**u 发帖数: 6059 | 8 matlab能并行的话要好很多,重新转换成C可能花不少时间写code。
【在 s****1 的大作中提到】 : 我有一个200行的matlab code,由于数据量比较大,有几个百万量级的循环,能不用循 : 环的我都用矢量替代了。需要迭代上千次,运行时间也比较长(几天),我 : 32G 内存已经不够用了,不知道转成C或者java是不是有帮助?谢谢 : maxepoch=1500; : cmax=1500000; : for nb=1:3 : for m=1:30 : Qw(:,:,m,nb)=ones(cmax,1)*constant; % 1500000*4*30*3 : mu(:,:,m,nb)= : sigma(:,:,m,nb)=
| m*******1 发帖数: 58 | 9 转成C会快很多。并行处理当然更好,用C实现并行很方便。
【在 j**u 的大作中提到】 : matlab能并行的话要好很多,重新转换成C可能花不少时间写code。
| j**u 发帖数: 6059 | 10 用C当然效率高多了,不过写code比起matlab要多花不少时间。
【在 m*******1 的大作中提到】 : 转成C会快很多。并行处理当然更好,用C实现并行很方便。
| m*******1 发帖数: 58 | 11 Matlab 运行太慢的情况下,还是值得改写成C,花不了多少时间,除非你调用了复杂的
Matlab 函数。
【在 j**u 的大作中提到】 : 用C当然效率高多了,不过写code比起matlab要多花不少时间。
| s****1 发帖数: 425 | 12 只能转c了,并行总是错误
parfor nb=1:s
b(:,nb)=rand(cmax,1);
exist=find(b(:,nb));
numwits=length(exist(:));
for m=1:L
r=rand(numwits,k);
for i=1:numwits
bnow(exist(i),:,m,nb)=Qw(exist(i),:,m,nb).^2;。Error: The
variable b in a parfor cannot be classified.我把parfor放在m循环前面就提示
bnow错误。这个错误很普遍,也在网上看了一些,不过对parfor里面的变量的限制还是
没深刻理解。 |
|