在Matlab中从SQL数据库中提取并行计算数据



在我当前的设置中,我有一个for循环,在该循环中,我从AmazonEC2上托管的SQL数据库中提取不同类型的数据。该提取是在函数CCD_ 1中完成的。之后,数据被解析并存储为parsestoreData(data):中的mat文件

variables = {'A','B','C','D','E'}
for i = 1:length(variables)
data = extractData(variables{i});
parsestoreData(data);
end

我想将数据的提取和解析并行化,并加快这个过程。我认为,在上面的例子中,我可以使用parfor而不是for来实现这一点。

然而,我担心提取不会得到改善,因为当在同一数据库上发出多个请求时,SQL数据库会减慢速度。

因此,我想知道Matlab是否能够以一种聪明的方式处理这个问题,即模仿?

运行parfor的并行池中的工作线程基本上都是完整的MATLAB进程,没有UI,默认以"单计算线程"模式运行。我不确定parfor在这种情况下是否会对您有益——parfor循环只是安排MATLAB工作人员并行执行循环的迭代。您可以通过启动多个完整的桌面MATLAB来自行估计问题的并行性,并让它们同时运行您的问题。我会运行这样的程序:

maxNumCompThreads(1);
while true
t = tic();
data = extractData(...);
parsestoreData(data);
toc(t)
end

然后检查CCD_ 8报告的时间如何随着MATLAB客户端数量的变化而变化。如果时间保持不变,你可以合理地预期parfor会给你带来好处(因为这意味着身体可以有效地平行化(。然而,如果随着运行更多的MATLAB客户端,时间会显著减少,那么几乎可以肯定的是,extractData(variableName)0也会经历同样的(相对(减速。

最新更新