Я пытаюсь использовать GotoBLAS2 на R 3.0 на Unix. Я загрузил исходный код GotoBLAS2 с веб-сайта TACC, скомпилировал его и заменил libRblas.so на libgoto2.so, следуя инструкциям по ссылке http://www.rochester.edu/college/gradstudents/jolmsted/files/computing/BLAS.pdf. Простые матричные операции в R, такие как «определитель», в 20 раз быстрее, чем раньше (я использую огромные матрицы), что хорошо. Тем не менее, я не могу использовать многие ядра параллельно.GotoBLAS2 с несколькими ядрами
Например, ниже код работает вечно. Но если я использую прокомментированный вариант «for» вместо «foreach», это займет всего секунду. Когда я использовал по умолчанию библиотеки BLAS R в, я мог бы работать ниже код (используя несколько ядер) (но это заняло больше времени, так как BLAS не было оптимизировано, конечно) ..
library("foreach")
library("doParallel")
registerDoParallel(cores=2)
set.seed(100)
foreach (i = 1:2) %dopar% {
# for (i in 1:2) {
a = replicate(1000, rnorm(1000))
d = determinant(a)
Так, можно использовать много ядер одновременно с GotoBLAS2, есть ли у вас какие-либо идеи?
Большое спасибо.
Моя машина имеет 24 ядер, и я обычно использую% dopar% с 10 ядрами, что делает вещи действительно быстрее. – user2503950
Я выполняю операцию над разными файлами независимо, поэтому я бы предпочел параллельную работу. Для этого начального задания мне вообще не нужен BLAS, но я должен применить детерминант к результату этой операции, где мне нужна оптимизированная BLAS, поэтому я должен включить определитель внутри «foreach». И что я подразумеваю под «навсегда»: «все еще работает через 24 часа, и я его убил». Итак, с «for», это 1 секунда, а с «forach» - более 24 часов. Вероятно, проблема связана не с количеством потоков, а с ошибкой в GotoBLAS2, или, может быть, не соответствует R3.0.2. – user2503950
Если вы хотите использовать параллельные операции с использованием R, я бы предложил отключить его для GotoBLAS через среду «OMP_NUM_THREADS» или «GOTO_NUM_THREADS». Надеюсь, это может решить проблему. –