Мониторинг выполнения параллельных вычислений в Mathematica. Полезный скрипт

Как правило, эволюция программы в ParallelTable[] или ParallelDo[] несет мало информации об успехах исполнения кода на отдельных ядрах или потоках системы.

Значительно информативнее выглядит конструкция вида ParallelSubmit[]

In[]:=
threads=Table[ParallelSubmit[{local},Pause[1];(*stuff*)ToString[$KernelID]<>« is done!«],{i,1,$KernelCount}]WaitAll[threads]
Out[]=
8a9184209498f2225efa27501f0b5295b109320ee53e4e21211c722f58141e43
c3574a7208eee2267e7e5c98841148657d07fb809967d720454c1e3bfc7e3435
Pause[1];ToString[9]<>
Undefined
,
8a9184209498f2225efa27501f0b5295b109320ee53e4e21211c722f58141e43
c3574a7208eee2267e7e5c98841148657d07fb809967d720454c1e3bfc7e3435
Pause[1];ToString[9]<>
Undefined
Out[]=
{2 is done!,1 is done!}

Однако если команд очень много, было бы неплохо иметь сетку миниатюр, позволяющих в режиме реального времени отслеживать процесс выполнения кода. Дополнительный инструментарий для анализа параллельных процессов предоставляется библиотекой Parallel`Developer`.

Ниже пример, как можно отслеживать выполнение по кнопке

In[]:=
Needs[«Parallel`Developer`«]
threads=Table[ParallelSubmit[{local},Pause[3];(*stuff*)ToString[$KernelID]<>« is done!«],{i,1,40}];Refresh[Partition[Table[pr=ToString[ProcessState[i]];If[pr«queued«,Gray,If[(StringCases[pr,«dequeued«]//Length)>0,Green,Red]],{i,threads}],10]//TableForm,UpdateInterval1]//DynamicWaitAll[threads]
410fc3d77998ab81f91a52347ffe934cf167af5dfe4cade9b2b7f684e7a52947
0
0

About Кирилл Васин

Прохожий из шапки сайта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *