在多个核心上传播作业 [MATLAB]
Spread jobs on many cores [MATLAB]
是否有 MATLAB 命令(或通过终端的命令),我可以在其中明确告诉 MATLAB 在我的八个内核中的哪个内核上处理我的代码?请注意,我并不是说我想做 parfor(并行化一个 for 循环),我想 运行 许多脚本,这些脚本本质上是相同的,但输入参数不同,在不同的内核上。
我想到的解决方案是只打开 8 个不同的终端,执行 MATLAB,然后 运行 每个脚本,但我觉得这样效率很低,因为这 8 个脚本可能 运行ning 在同一个核心上。或者 MATLAB 是否智能地将脚本分成 8 个可用内核?
我希望有某种形式的命令:
$ matlab script1.m -setcore 1
或者我可以在每个脚本的开头添加一行 MATLAB 代码,以在某个核心上强制执行该过程。例如:Script1.m:
%Script1.m
clc;close all;clear all;
set_core(1);
%Script 1 lines begins:
- 我有一个英特尔 Xeon 和一个 Nvidia Titan X(尽管图形部分无关紧要,因为我不想在图形级别或卷积级别进行并行计算)。
根据评论中的讨论,我猜您将从 4 到 5 个实例开始获得最佳性能,并让调度程序完成所有工作。您 运行 并行的进程越多,它们产生缓存未命中或您 运行 内存不足的可能性就越大,因此通常使用完整 CPU 容量的最少数量的工作进程是最佳选择.在某些情况下,您可能不得不选择一个更低的数字,因为内存或其他资源是瓶颈。
Matlab 没有将其分配给专用内核的选项,大多数操作系统不允许程序做这个决定。 You can do it using taskset. In matlab you only have the coice to limit it to one computation thread using the -singleCompThread 选项。
是否有 MATLAB 命令(或通过终端的命令),我可以在其中明确告诉 MATLAB 在我的八个内核中的哪个内核上处理我的代码?请注意,我并不是说我想做 parfor(并行化一个 for 循环),我想 运行 许多脚本,这些脚本本质上是相同的,但输入参数不同,在不同的内核上。
我想到的解决方案是只打开 8 个不同的终端,执行 MATLAB,然后 运行 每个脚本,但我觉得这样效率很低,因为这 8 个脚本可能 运行ning 在同一个核心上。或者 MATLAB 是否智能地将脚本分成 8 个可用内核?
我希望有某种形式的命令:
$ matlab script1.m -setcore 1
或者我可以在每个脚本的开头添加一行 MATLAB 代码,以在某个核心上强制执行该过程。例如:Script1.m:
%Script1.m
clc;close all;clear all;
set_core(1);
%Script 1 lines begins:
- 我有一个英特尔 Xeon 和一个 Nvidia Titan X(尽管图形部分无关紧要,因为我不想在图形级别或卷积级别进行并行计算)。
根据评论中的讨论,我猜您将从 4 到 5 个实例开始获得最佳性能,并让调度程序完成所有工作。您 运行 并行的进程越多,它们产生缓存未命中或您 运行 内存不足的可能性就越大,因此通常使用完整 CPU 容量的最少数量的工作进程是最佳选择.在某些情况下,您可能不得不选择一个更低的数字,因为内存或其他资源是瓶颈。
Matlab 没有将其分配给专用内核的选项,大多数操作系统不允许程序做这个决定。 You can do it using taskset. In matlab you only have the coice to limit it to one computation thread using the -singleCompThread 选项。