Как сделать кросспрод быстрее - PullRequest
0 голосов
/ 12 декабря 2018

Требуется (на моем MBP с 2,9 ГГц Intel Core i7 и 16 ГБ памяти) более 20 секунд, чтобы получить перекрестный продукт матрицы 40 000 x 1000:

> system.time(a <- crossprod(matrix(pi,40000,1000)))
   user  system elapsed 
 23.808   0.139  24.001 

Есть ли когда-либо способсделать это быстрее?Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 12 декабря 2018

Изменяя свой код?В основном нет.crossprod напрямую вызывает скомпилированный код, вам будет сложно найти какой-либо выигрыш в производительности, и любое, что вы найдете, будет небольшим.

(Если исключить обстоятельства, насколько плотна ваша матрица? Если выполучил много нулей, тогда может помочь использование разреженной матрицы. Я также предполагаю, что ваша матрица не просто постоянная матрица, как в вашем примере.)

Вы также можете использовать Revolution R Open от Microsoft, котораяскомпилирован для использования другого BLAS или скомпилируйте R самостоятельно с более оптимизированным BLAS.Эта ссылка содержит подробности об этом .Для чисто линейных алгебраических манипуляций это может иметь довольно большой эффект. Этот сайт показывает порядок ускорений для умножения матриц, разложения Холецкого и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...