首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定时实验-矩阵

定时实验-矩阵
EN

Stack Overflow用户
提问于 2018-03-02 08:41:14
回答 1查看 67关注 0票数 0

确定一个矩阵大小,您可以轻松地适应您的可用RAM。例如,如果您有一台4GB的机器,您应该能够轻松地存储一个占用大约800 GB的矩阵。将此值存储在变量Mb中。使用以下信息计算可以存储在Mb内存中的最大矩阵维度N。

  • 一个兆字节有1024千字节
  • 一个千字节是1024字节
  • 浮点数是8 bytes
  • N × N矩阵包含N^2浮点数。

调用计算nmax的N。

(b)创建两个大小分别为AB的随机矩阵Nmax × Nmax。使用MATLAB函数tictoc,确定计算产品AB所需的时间(秒)。确定浮点运算(加法和乘法)的数目,计算Nmax × Nmax矩阵-矩阵积(2/3)n^3.,使用这个数字估计计算机每秒可以执行的浮点操作数(“flops”)。把这个错误率称为flops

代码语言:javascript
复制
% Part A
nmax = sqrt((1600*1024*1024)/8); % 8GB of RAM

% Part B
A = (nmax:nmax);
B = (nmax:nmax);

tic 
prod = A*B;
prod_time = toc

flops = (2/3)*(prod).^3

一切运行良好,但我觉得我没有为值AB创建矩阵。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-02 09:05:40

主要有两件事:您混淆了矩阵的分配;c:c,其中c是一个常量,只返回常量。冒号:创建数组,如

代码语言:javascript
复制
c = 5;
N = 1:c
    1  2  3  4  5

向冒号操作符输入相同的起始点和端点,显然只返回这个点。

第二:操作的总数与元素的数量成正比,而不是矩阵积的实际结果(实际上,我们只是对时间感兴趣)。因此,首先计算FL,,oating,,O,的总数。

还记得我们用过tic/toc吗?那么,也许我们应该找出总时间是什么,它存储在prod_time中。这是执行矩阵乘法所需的秒数。Totflops除以prod_time给出了FLoating Operations Per S>E 219econd,即FLOPS。

代码语言:javascript
复制
[~,systemview] = memory; % Get RAM info
tmp = systemview.PhysicalMemory;
% tmp.Total stores the total system RAM

Mb = 0.2*((tmp.Total/(1024^2))); % 20% of the total RAM

% floor your nmax to force it to be integer
nmax = floor(sqrt((Mb*1024^2/8))); % create your nmax

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

在我的系统上(8GB内存和i5 750 2.66GHz)提供flops = 1.0617e+10

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

https://stackoverflow.com/questions/49065472

复制
相关文章

相似问题

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