簡體   English   中英

在 matlab 中向量化慢代碼

[英]Vectorizing slow code in matlab

我一直試圖矢量化這段代碼一段時間,但一直無法做到。 有人可以幫忙嗎。

    %X -[153600x400]
    %W -[153600x500]
    %beta=error=scalar
    %errvals=[40x1]
    %n=400
    iter = 1;
    for ii = 1:n 
        disp(ii);
        x = X(:,ii);
        y = W'*x;        
        W = beta*x*y' + W - beta*W*tril(y*y');       
        beta = options.rate*options.annealfunc(iter);       
        err = err + sum((x - W*(W'*x)).^2);
        errvals(iter) = err/iter;       
        if (any(~isfinite(W)))
            warning(sprintf('Lost convergence at iterator %i; lower learning rate?', niter));
            success = 11;
            break;
        end;       
        if (options.printerr == 1)
            fprintf('Error = %d; Iteration = %i\n', err/iter, iter);
        end;        
        iter = iter+1;
    end;

矢量化並不是突然提高性能的“魔法”,它基本上減少了函數調用和迭代的開銷。 在您的情況下,循環有 400 次迭代並且只有一些函數調用,開銷很小。 沒有實際運行您的代碼,因為我沒有所有輸入(至少缺少options.annealfunc我猜大部分時間都花在執行矩陣乘法上。 提高矩陣乘法性能的正確方法是在 GPU 上運行它們。 假設你有一個兼容的顯卡和分布式計算工具箱的許可證,你必須將你的陣列轉換為gpuArrays

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM