gpt4 book ai didi

MATLAB block 大小和内存管理

转载 作者:行者123 更新时间:2023-12-01 22:00:33 24 4
gpt4 key购买 nike

我正在使用 block 处理方法来处理两个大矩阵之间的计算。

使用较大的 block 大小时,代码的速度会显着加快。但如果太大,就会出现内存不足错误。目前,我手动调整代码以找到给定输入的最大工作 block 大小。

我的问题:如何自动执行查找最大可能 block 大小的过程?

我尝试过将所有内容包装在 try/catch block 中,并使用逐渐变小的 block 大小进行循环,直到成功。我希望有一种更优雅或更惯用的方式。

最佳答案

在进行 block 处理之前,可以使用 MEMORY函数来查看已经使用了多少内存,以及还有多少内存可用于 block 处理可能需要创建的任何其他变量。如果您可以根据 block 大小来估计 block 处理步骤所需的内存总量,则可以在用完可用内存之前计算出 block 大小可以有多大。这可能说起来容易做起来难,因为我不知道你到底是如何进行 block 处理的。

这是一个简单的例子。我将首先清理工作区并创建 2 个大矩阵:

>> clear all
>> mat1 = zeros(8000); %# An 8000-by-8000 matrix of doubles
>> mat2 = zeros(8000); %# Another 8000-by-8000 matrix of doubles

现在,假设我知道我必须分配一个 N×N double 矩阵,这将需要 8*N*N 字节的内存(每个 double 8 个字节)。我可以执行以下操作来找出我可以制作多大的 N:

>> uV = memory  %# Get the memory statistics

uV =

MaxPossibleArrayBytes: 314990592
MemAvailableAllArrays: 643969024
MemUsedMATLAB: 1.2628e+009

>> maxN = floor(sqrt(uV.MaxPossibleArrayBytes/8)) %# Compute the maximum N

maxN =

6274

>> mat3 = ones(maxN); %# Works fine
>> mat3 = ones(maxN+1); %# Tanks! Too large!
??? Out of memory. Type HELP MEMORY for your options.

如果您经常遇到内存不足的问题,您可以执行以下操作:

  • 使用single大型矩阵的精度(或 integer types )而不是默认的 double精确度。
  • 请务必clear您不再需要的变量(特别是当它们很大时)。

关于MATLAB block 大小和内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2149241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com