gpt4 book ai didi

multithreading - 是否可以在没有Mex的情况下在Matlab中并行加载数据文件以进行计算

转载 作者:行者123 更新时间:2023-12-03 13:20:20 25 4
gpt4 key购买 nike

我有一个Matlab程序,该程序从磁盘上的物理文件中读取大量数据并执行如下密集计算:

data = load('myfile.dat');
results = intensiveCompute(data);

计算是在GPU上完成的,需要很长时间。我想做的是能够在计算运行时从下一个文件中加载数据(因为加载文件也是一个瓶颈)。从我到目前为止收集的数据来看,这可以使用Mex(例如_beginthread等...)来实现。但是,如果可能的话,最好保留在Matlab环境中。也许有某种方法可以在Matlab中产生一个线程来读取数据,而另一种方法可以执行计算。任何帮助是极大的赞赏。

最佳答案

this answer中,我详细介绍了一种使用taskjob函数进行异步执行的方法,但是我认为对于一个简单的load来说, parfeval 可能是最简单的。例如,

f = parfeval(@load,1,'myfile.dat'); % asynchronous, move on to intensiveCompute
results = intensiveCompute(data);
data = fetchOutputs(f); % Blocks until complete

注意:确保在Windows防火墙中允许MATLAB.exe,smpd.exe和mpiexec.exe的传入连接。应该在池启动的第一时间提示您(由 parfeval自动启动)。

这是一个简单的示例,说明其工作方式:
>> x = magic(5);
>> save x.mat x
>> f = parfeval(@load,1,'x.mat');
Starting parallel pool (parpool) using the 'local' profile ... connected ...
>> f
f =
FevalFuture with properties:

ID: 1
Function: @load
State: running
ErrorIdentifier:
ErrorMessage:

至此,我们看到该命令仍在工作线程上运行。显然,我们可以做的事情比简单地检查工作更有用……但这是短暂的等待之后发生的事情:
>> f
f =
FevalFuture with properties:

ID: 1
Function: @load
State: finished (unread)
ErrorIdentifier:
ErrorMessage:
>> % all done, load the data
>> data = fetchOutputs(f) % Blocks until complete
data =
x: [5x5 double]

关于multithreading - 是否可以在没有Mex的情况下在Matlab中并行加载数据文件以进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19572440/

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