gpt4 book ai didi

parallel-processing - Octave 在单机上的并行计算——包和示例

转载 作者:行者123 更新时间:2023-12-04 01:32:40 44 4
gpt4 key购买 nike

我想在单台机器(而不是集群)上并行化 Octave 中的 for 循环。前段时间我问了一个关于 Octave 并行版本的问题
parallel computing in octave

答案建议我下载一个并行计算包,我做到了。该软件包似乎主要面向集群计算,但确实提到了单机并行计算,但不清楚如何运行甚至并行循环。

我还在 SO 上找到了另一个关于此的问题,但我没有找到在 Octave 中并行化循环的好答案:
Running portions of a loop in parallel with Octave?

有谁知道我在哪里可以找到在 Octave 中并行运行 for 循环的示例???

最佳答案

我正在计算大量的 RGB 直方图。我需要使用显式循环来做到这一点。因此,每个直方图的计算需要花费大量时间。出于这个原因,并行运行计算是有意义的。在 Octave 中有一个(实验性)函数 parcellfun由 Jaroslav Hajek 编写,可以用来做它。

我原来的循环

histograms = zeros(size(files,2), bins^3);
% calculate histogram for each image
for c = 1 : size(files,2)
I = imread(fullfile(dir, files{c}));
h = myhistRGB(I, bins);
histograms(c, :) = h(:); % change to 1D vector
end

要使用parcellfun,我需要将我的循环体重构为一个单独的函数。
function histogram = loadhistogramp(file)
I = imread(fullfile('.', file));
h = myhistRGB(I, 8);
histogram = h(:); % change to 1D vector
end

那么我可以这样称呼它
histograms = parcellfun(8, @loadhistogramp, files);

我在我的电脑上做了一个小的基准测试。它是启用英特尔超线程的 4 个物理内核。

我的原始代码
tic(); histograms2 = loadhistograms('images.txt', 8); toc();
warning: your version of GraphicsMagick limits images to 8 bits per pixel
Elapsed time is 107.515 seconds.

与parcelfun
octave:1> pkg load general; tic(); histograms = loadhistogramsp('images.txt', 8); toc();
parcellfun: 0/178 jobs donewarning: your version of GraphicsMagick limits images to 8 bits per pixel
warning: your version of GraphicsMagick limits images to 8 bits per pixel
warning: your version of GraphicsMagick limits images to 8 bits per pixel
warning: your version of GraphicsMagick limits images to 8 bits per pixel
warning: your version of GraphicsMagick limits images to 8 bits per pixel
warning: your version of GraphicsMagick limits images to 8 bits per pixel
warning: your version of GraphicsMagick limits images to 8 bits per pixel
warning: your version of GraphicsMagick limits images to 8 bits per pixel
parcellfun: 178/178 jobs done
Elapsed time is 29.02 seconds.

(并行和串行版本的结果相同(仅转置)。
octave:6> sum(sum((histograms'.-histograms2).^2))
ans = 0

当我重复这几次时,运行时间几乎一直相同。并行版本运行大约 30 秒(+- 大约 2 秒),包含 4、8 和 16 个子进程)

关于parallel-processing - Octave 在单机上的并行计算——包和示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10520495/

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