在许多核心上传播作业[MATLAB]

时间:2016-02-11 22:42:36

标签: matlab multicore

是否有MATLAB命令(或通过终端的命令),在那里我可以具体告诉MATLAB我的八个内核中有哪些来处理我的代码?注意,我并不是说我想做parfor(并行化for循环),我想在不同的核心上运行许多基本相同但具有不同输入参数的脚本。

我头脑中的解决方案是打开8个不同的终端,执行MATLAB,然后运行每个脚本,但我觉得这样效率很低,因为8个脚本可能在同一个核心上运行。或者MATLAB是否智能地将脚本分成8个可用内核?

我希望有某种形式的命令:

 $ matlab script1.m -setcore 1

或我可以添加的MATLAB代码行,在每个脚本的开头强制进程在某个核心上。例如:Script1.m:

%Script1.m
clc;close all;clear all;
set_core(1);

%Script 1 lines begins:
  • 我有一个英特尔至强和一个Nvidia Titan X(虽然图形部分是无关紧要的,因为我不想在图形级别进行并行计算,也不想进行卷积)。

1 个答案:

答案 0 :(得分:2)

根据评论中的讨论,我猜你将拥有从4到5个实例开始的最佳性能,并让调度程序完成所有操作。并行运行的进程越多,它们产生缓存未命中的可能性就越大,或者内存不足,因此通常使用完整CPU容量的最少数量的工作进程是最佳选择。在某些情况下,您可能必须选择更低的数字,因为内存或其他资源是瓶颈。

Matlab没有选择将其分配给专用核心,大多数操作系统都不让程序做出这个决定。 You can do it using taskset。在matlab中,您只需要使用-singleCompThread选项将其限制为一个计算线程。