Я бы не сказал, что Mathematica автоматически выполняет вычисления на GPU или Paralell-CPU, по крайней мере, в целом.Поскольку вам нужно что-то делать с ядрами paralell, вам следует инициализировать больше ядер и / или загрузить CUDALink или OpenCLLink и использовать специальные функции Mathematica, чтобы использовать потенциал ЦП и / или ГП.
Например, у меня нет очень мощной видеокарты (NVIDIA GeForce 9400 GT), но мы можем проверить, как работает CUDALink.Сначала я должен загрузить CUDALink
:
Needs["CUDALink`"]
Я собираюсь проверить умножение больших матриц.Я выбираю случайную матрицу 5000 x 5000
действительных чисел в диапазоне (-1,1)
:
M = RandomReal[{-1,1}, {5000, 5000}];
Теперь мы можем проверить время вычислений без поддержки графического процессора
In[4]:= AbsoluteTiming[ Dot[M,M]; ]
Out[4]= {26.3780000, Null}
и с поддержкой графического процессора
In[5]:= AbsoluteTiming[ CUDADot[M, M]; ]
Out[5]= {6.6090000, Null}
В этом случае мы получили увеличение производительности примерно в 4 раза, используя CUDADot вместо Dot.
Edit
Чтобы добавить пример параллельного ускорения ЦП (на двухъядерном компьютере), я выбираю все простые числа в диапазоне [2^300, 2^300 +10^6]
.Сначала без распараллеливания:
In[139]:= AbsoluteTiming[ Select[ Range[ 2^300, 2^300 + 10^6], PrimeQ ]; ]
Out[139]= {121.0860000, Null}
при использовании Parallelize[expr]
, который вычисляет expr с помощью автоматического распараллеливания
In[141]:= AbsoluteTiming[ Parallelize[ Select[ Range[ 2^300, 2^300 + 10^6], PrimeQ ] ]; ]
Out[141]= {63.8650000, Null}
Как и следовало ожидать, мы получили почти в два раза более быструю оценку.