【问题标题】:Multidimensional Array Optimization - MATLAB多维数组优化 - MATLAB
【发布时间】:2014-05-30 19:41:21
【问题描述】:

是否可以通过采用meshgridreshape、线性索引和/或任何其他好的优化技术来进一步优化以下脚本?

clear all

% tic;

N1 = 5000;
Nt = 2500;

u = randn(Nt,2);

A = zeros(2,2,N1);
B = zeros(2,2,N1);
C = zeros(2,2,N1);
D = zeros(2,2,N1);

X = zeros(2,1,N1);
Y = zeros(2,Nt,N1);
U = zeros(2,Nt,N1);

tic;
parfor i=1:N1
    A(:,:,i) = [unifrnd(0.25,0.75),unifrnd(0.15,0.45);unifrnd(0.4,1.2),unifrnd(0.25,0.75)];
    B(:,:,i) = [unifrnd(1,3),unifrnd(2.5,7.5);unifrnd(-22.5,-7.5),unifrnd(-1.95,-0.65)];
    C(:,:,i) = [unifrnd(-1,1),unifrnd(-19.5,-6.5);unifrnd(0.5,1.5),unifrnd(-22.5,-7.5)];
    D(:,:,i) = [unifrnd(0.1,0.3),unifrnd(-1,1);unifrnd(1,3),unifrnd(-1,1)];

    U(:,:,i) = u';
    X(:,:,i) = zeros(2,1);
    Y(:,:,i) = zeros(2,Nt);
end

toc;

A1 = gpuArray(A);
B1 = gpuArray(B);
C1 = gpuArray(C);
D1 = gpuArray(D);

X3 = gpuArray(X);
U3 = gpuArray(U);

AX = gpuArray(zeros(2,Nt,N1));
X3update = zeros(2,Nt,N1);
X3update = gpuArray(X3update);


%%
tic;
DU = pagefun(@mtimes, D1, U3(:,1:Nt,:));
BU = pagefun(@mtimes, B1, U3(:,1:Nt,:));

for j = 1:Nt
    X3update = pagefun(@mtimes,A1,X3) + BU(:,j,:);
    AX(:,j,:) = X3;
    X3 = X3update;
end

CX = pagefun(@mtimes, C1, AX(:,1:Nt,:));
Y3 = CX + DU;

toc;

提前道歉,因为这是一个非常具体的问题。但是,我正在尝试提高状态空间模拟的计算效率,因此应用非常广泛。

谢谢!

【问题讨论】:

    标签: matlab optimization multidimensional-array parallel-processing gpu


    【解决方案1】:

    我不熟悉并行工具箱,但您至少不能加快生成统一随机数的速度:

    A = [unifrnd(0.25, 0.75, [1 1 N1]), unifrnd(0.15, 0.45, [1 1 N1]); unifrnd(0.4, 1.2, [1 1 N1]), unifrnd(0.25, 0.75, [1 1 N1])];
    

    等等?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-31
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多