Использование для вычислений облачного сервиса
Здравствуйте. Я математик, но не программист и плохо представляю как что работает. Прошу знающих людей прояснить ситуацию и направить на путь истинный (дать ссылку на сайт или статью).
Написал я программу в matlab, которая содержит много циклов и очень долго считает -- неделями. Считаю я на своем домашнем компьютере. Также пользуюсь приложением на андроиде. Когда пишешь программу на андроиде, то matlab, как я понял, отправляет информацию на некий облачный сервер и потом показывает мне результат вычислений. Очевиден вопрос -- так это поди можно и с домашнего компьютера отправить программу для вычислений на другой мощный компьютер. Я понимаю, что вопрос возможно наивен и все так уже делают 20 лет. Как это сделать?
Кто-нибудь использовал для вычислений суперкомпьютеры сбербанка или МТС? Я знаю, что у организации, в которой я учусь, есть договор об их бесплатном использовании. Сейчас очень актуально, ибо бесплатно может быть не всегда.
Ответы
Во-первых, скорее всего, правильно используя матричную арифметику можно избавиться от большинства циклов, что многократно ускорит работу Вашего скрипта.
Надо будет написать заметку на эту тему.
Далее надо уже исходить из той лицензии, что есть у Вашей организации. И.п. возможностей много, а вот какие доступны - это вопрос. В командной строке надо написать
И прислать вывод.
Векторизация циклов.
Я эту статью читал. Все о чем там написано мной используется.
1. Откуда ж тогда циклы?
2. На что именно тратится основное время?
Отличный вопрос, давайте профилировать Ваш код, чтобы на него ответить. https://www.mathworks.com/help/matlab/ref/profile.html
Решается примерно следующая задача -- дано множество матриц размерности 4x4. Среди них надо найти все пары матриц A и B, для которых существует невырожденная матрица C такая, что A=С^(-1)*B*C. Матриц конечное число, так как их элементы это числа от 1 до 13, то есть количество матриц 13^16. При умножении и сложении указывается не само число, а его остаток при делении на 13 (то есть матрицы над простым полем по модулю 13).
Parallel toolbox. Jit Compilation.
Всем привет. Помогите пожалуйста.
Есть компьютер с характеристиками:
Intel(R) Xeon(R) Platinum 8160CPU @2.10CPU (4 процессора по 4 ядра)
NVIDIA GRID T4-4Q ComputeCapability: '7.5'
ОЗУ 24Гб
Хочу запустить вычисления на GPU. Посмотрел видео https://www.mathworks.com/videos/gpu-computing-in-matlab-86706.html , почитал статьи. Никак не получается. Программа зависает и все.
Может быть там делов на минуту знающему человеку. Куда правильно вставить gpuArray? Вот мой код:
p=3
x=ones(1,p^16-1);
for k=1:(p^16-1)
if x(k)~=0
h=k;
A=zeros(4,4);
for i=1:16
for j=1:(p-1)
if h >=(p-j)*p^(16-i)
A(i)=p-j;
h=h-(p-j)*p^(16-i);
break
end
end
end
disp(A)
for ip=1:(p^16-1)
h=ip;
P=zeros(4,4);
for i=1:16
for j=1:(p-1)
if h >=(p-j)*p^(16-i)
P(i)=p-j;
h=h-(p-j)*p^(16-i);
break
end
end
end
if mod(det(P),p)~=0
for q11=1:(p-1)
B=mod(P'*A*P*q11,p);
num= B(4,4)+p*B(3,4)+p^2*B(2,4)+p^3*B(1,4)+...
p^4*B(4,3)+p^5*B(3,3)+p^6*B(2,3)+p^7*B(1,3)+...
p^8*B(4,2)+p^9*B(3,2)+p^10*B(2,2)+p^11*B(1,2)+...
p^12*B(4,1)+p^13*B(3,1)+p^14*B(2,1)+p^15*B(1,1);
if (num~=k)
x(num)=0;
end
end
end
end
end
end