Параллельные вычисления на R с использованием mclapply - PullRequest
0 голосов
/ 22 сентября 2018

Я хочу сравнить производительность двух методов в одном наборе данных.Чтобы получить множественное сравнение между ними, я использую Bootstrap, поэтому я думаю, что это может быть хорошая идея использовать параллельные вычисления.Поскольку число загрузчиков составляет 50, я назначаю 50 ядер для выполнения этой работы.Псевдокод выглядит следующим образом:

num.round <- 50  # number of bootstrap, which means I'll generate 50 subsets of the original dataset to do 50 comparison between the two methods
rounds.btsp <- seq(1, num.round)

BootStrap <- function(round.btsp) {
    result1 <- METHOD1(round.btsp)
    result2 <- METHOD2(round.btsp)
    return(list(result1 = result1, result2 = result2))
}

results.btsp <- mclapply(rounds.btsp, BootStrap, mc.cores = num.round)

for (round.btsp in rounds.btsp){
    result1 <- results.btsp[[round.btsp]]$result1
    result2 <- results.btsp[[round.btsp]]$result2
    COMPARE(result1, result2)  # do the comparison here, and this will be repeated 50 times
}

Я получил ошибку на шаге «СРАВНИТЬ», и когда я посмотрел на нее, я обнаружил, что когда round.btsp = 10, ничего нет в result1 или result2.Поэтому я попытался установить round.btsp в 10 и запустить что-то внутри функции "BootStrap", но все было в порядке.Затем я повторяю весь сценарий снова, и та же ошибка повторяется снова.Но то, что отличается от прошлого времени, это то, что теперь round.btsp = 20 (эти 10 и 20 только для примера).

На нашем сервере всего 80 ядер.Но есть и другие пользователи, которые время от времени используют некоторые ядра.

Что касается того, что я наблюдал, и ситуации с нашими ядрами, я предполагаю, что причина в том, что, когда мне требуется 50 ядер, но иногда мне не хватает, то какой-то поток не будет работать должным образом,поэтому я ничего не получу от этой темы.

1 Ответ

0 голосов
/ 23 сентября 2018

Проблема решена.На самом деле позже я обнаружил, что проблема лежит выше COMPARE: на самом деле это шаг для вычисления results.btsp. Так что на данный момент мое решение состоит в проверке длины каждого элемента в results.btsp, если есть какие-либо неудовлетворительные, results.btsp будет пересчитан, то есть снова запустить параллельные вычисления.Если все не пройдут проверку, она перейдет к циклу for.

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