时间实验 - 矩阵
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时间实验 - 矩阵相关的知识,希望对你有一定的参考价值。
确定可以轻松适应可用RAM的矩阵大小。例如,如果你有一台4 GB的机器,你应该能够舒适地存储占用大约800MB的矩阵。将此值存储在变量
Mb
中。使用以下信息计算可以存储在Mb兆字节内存中的最大矩阵维数N.
- 一兆字节有
1024
千字节- 千字节是
1024
字节- 浮点数是
8 bytes
。N × N
矩阵包含N^2
浮点数。调用N你计算
nmax
。(b)创建两个随机矩阵
A
和B
,每个矩阵Nmax × Nmax
。使用MATLAB函数tic
和toc
,确定计算产品AB
所需的时间(秒)。确定计算Nmax × Nmax
矩阵 - 矩阵乘积所需的浮点运算(加法和乘法)的数量(2/3)n^3.
使用此数字来估计计算机可以执行的每秒浮点运算次数(“flops”)。将此翻牌圈称为flops
。
% 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
一切都运行正常,但我觉得我没有为值A
和B
创建一个矩阵。我究竟做错了什么?
两个主要的事情:你搞砸了你的矩阵任务; c:c
,其中c
是常数,只返回常量。结肠,:
,创建数组,如
c = 5;
N = 1:c
1 2 3 4 5
为冒号操作符提供相同的开始和终点显然只返回该点。
第二:操作总数与元素数量成正比,而不是矩阵乘积的实际结果(实际上是无关紧要的,我们只对时间感兴趣)。因此,首先计算浮点运算的总数。
还记得我们用过tic/toc
吗?好吧,也许我们应该找出总时间是多少,它存储在prod_time
中。这是执行矩阵乘法所花费的秒数。通过Totflops
划分prod_time
可以获得每秒操作的FLoating点,即FLOPS。
[~,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 RAM和i5 750 2.66GHz)给flops = 1.0617e+10
以上是关于时间实验 - 矩阵的主要内容,如果未能解决你的问题,请参考以下文章
20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础