首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FLOPS的线性求解

FLOPS的线性求解
EN

Stack Overflow用户
提问于 2018-03-03 07:19:41
回答 1查看 64关注 0票数 0

代码语言:javascript
复制
%% Part A
% max value of N for an NxN matrix of floating point numbers
% 8GB of ram
Mb = 1600;
nmax = floor(sqrt((Mb*1024*1024)/160)); 

%%Part B
A = rand(nmax); % random nmax x nmax matrix
B = rand(nmax); % random nmax x nmax matrix

tic
prod = A*B;
prod_time = toc

% Total flops
Totflops = (2/3)*(nmax).^3;
flops = Totflops/prod_time % flops/sec

% Theoretical flops per second 2.4GHz Processor
tflops = 2.4*10^9 * 4 %flops per second

%% Part C 
Nvec = logspace(100,nmax);

for  i = Nvec
  A = rand(i);
  b = rand(i,1);
  tic
  x = A\b;
  lutimes(i) = toc;
end

%y = logspace(nmax,100);

%%Part D
loglog(N,lutimes,'.')
hold on

我收到一个关于达到最大变量大小的错误,并且不知道如何纠正它。此外,我意识到我还没有完成图表,但正在努力提前完成c部分。我需要改变我的for循环的工作方式吗?

EN

回答 1

Stack Overflow用户

发布于 2018-03-03 09:52:35

我们遇到的第一个问题是Nvec = logspace(100,nmax)。这里最突出的问题是logspace(a,b)返回跨[10^a, 10^b]的值。在您的情况下,我怀疑您是否有足够的内存来存储10^(2*nmax) = 1e6238浮点值(大约比DBL_MAX大6000个数量级!)另一个问题是,logspace几乎肯定会返回非整数值,因此您需要对结果进行舍入,以便使用这些值来定义矩阵。试着这样做:

代码语言:javascript
复制
Nvec = floor(logspace(log10(100),log10(nmax)));

你还有一个循环索引的问题。当lutimes(i)应该是介于100nmax之间的值时,您是在将值存储到i中。这没有任何意义。相反,按如下方式遍历Nvec的索引...

代码语言:javascript
复制
lutimes = zeros(size(Nvec));
for  idx = 1:numel(Nvec)
    A = rand(Nvec(idx));
    b = rand(Nvec(idx),1);
    tic
    x = A\b;
    lutimes(idx) = toc;
end

最后,loglog(N,lutimes,'.')应该是loglog(Nvec,lutimes,'.'),因为N不存在。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49078848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档