我在 Windows 10 上运行 R2017a,并使用从 Datastore 对象构造的 tall 数组(即,它本身是由基于双精度的 MATLAB 矩阵构建的 tall 数组构造的)。
我现在遇到的问题真正困扰我的是我所有的代码过去都可以正常工作。有一天,当我尝试运行它时,它就开始挂起。
这是有问题的块:
%load
tallTraindat = tall(datastore);
sz = size(tallTraindat);
sz = gather(sz);
numExamples = sz(1);
exampleLen = sz(2);
我的 tall 数组是一个 M x ~1700 单个数组,构建在这个较小的单个数组的数据存储上。在一个循环中:
write(fname,tallEx); % tall ex constructed by tall(someSingles);
folderNames{end+1} = fname;
接着:
ds = datastore(folderNames,'Type','tall');
正如你所看到的,这就像它得到的一样香草。但是操作 'sz = gather(sz)' 只是永远挂起。它永远不会完成或返回。我的并行池已正确启动,并且收集操作达到打印“评估 100% 完成”的程度。但它无处可去。如果我暂停执行,我总是会被带到 RemoteSpdmExecutor 中的某个点,第 129 行“obj.RemoteSpmdController.drainIO(false);”。这条线显然永远持续下去。
编辑:当我今天醒来时,它开始失败并显示一条错误消息:'Error using parallel.FevalOnAllFuture/fetchOutputs(第 69 行)fetchOutputs 无法连接 OutputArguments。将“统一输出”设置为 false。来自非单元格数组对象的单元格内容引用。
编辑:重新创建了我的默认本地并行池几次。现在又回到了同一行代码上。
根据我的所有测试,似乎每当我从多个tall-array 文件夹构造一个 tall 数据存储,然后从该数据存储构造一个 tall 数组时,就会出现我的问题。
把我的头发扯掉了。如果有人甚至怀疑在哪里寻找这个问题的根源,我将不胜感激。我会尽量快速响应更多信息的请求。