Ответ 1
Я бы не сказал, что 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}
и с поддержкой GPU
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]
, который вычисляет выражение с помощью автоматического распараллеливания
In[141]:= AbsoluteTiming[ Parallelize[ Select[ Range[ 2^300, 2^300 + 10^6], PrimeQ ] ]; ]
Out[141]= {63.8650000, Null}
Как можно было бы ожидать, мы получили почти в два раза более высокую оценку.