Могут ли параллельные операции ускорить доступность файла с жесткого диска в R? - PullRequest
2 голосов
/ 05 августа 2010

У меня есть огромный файл данных (~ 4 ГБ), который я передаю через R (чтобы очистить строку) на пути к базе данных MySQL.Каждая строка / строка не зависит от другой.Есть ли какое-либо преимущество в скорости при использовании параллельных операций для завершения этого процесса?То есть, может ли один поток начать с пропуска ни одной строки и просканировать каждую вторую строку, а другой начать с пропуска 1 строки и прочитать каждую вторую строку?Если это так, действительно ли это ускорит процесс, или два потока, сражающиеся за жесткий диск 10K Western Digital (не SSD), сведут на нет какие-либо возможные преимущества?

Ответы [ 5 ]

1 голос
/ 06 августа 2010

Ответ может быть.В какой-то момент доступ к диску станет ограниченным.Произойдет ли это с двумя работающими ядрами или с восемью, зависит от характеристик вашей аппаратной установки.Было бы довольно просто попробовать это, наблюдая за вашей системой с верхом.Если ваш% wa соответственно выше нуля, это означает, что процессоры ждут, пока диск нагонит вас, и вы, вероятно, замедляете весь процесс.

1 голос
/ 05 августа 2010

Почему бы просто не использовать некоторые стандартные инструменты Unix, чтобы разбить файл на куски, и вызвать несколько выражений командной строки R параллельно, работая с чаном каждый?Не нужно быть прихотливым, если простое может сделать.

1 голос
/ 05 августа 2010

Узким местом, скорее всего, будет жесткий диск.Не имеет значения, сколько процессов пытается получить к нему доступ, он может только читать / писать по одной вещи за один раз.

Это предполагает, что «очистка строки» использует минимальный процессор. awk или sed обычно лучше для этого, чем R .

0 голосов
/ 06 августа 2010

Ruby - еще один простой язык сценариев для манипулирования файлами и очистки.Но все же это вопрос соотношения времени обработки и времени чтения.Если дело в том, чтобы выбирать такие вещи, как выделение столбцов или перестановка вещей, то вам лучше использовать ruby, awk или sed, даже для простых вычислений это будет лучше.но если вы скажете, что для каждой линии, подходящей регрессионной модели или симуляции, вам лучше выполнять задачи параллельно.У вопроса не может быть определенного ответа, потому что мы не знаем точных параметров.Но, похоже, для большинства простых работ по очистке было бы лучше использовать хорошо подходящий для него язык, такой как ruby, и запускать его в одном потоке.

0 голосов
/ 05 августа 2010

Вы, вероятно, хотите прочитать с диска за один линейный прямой проход, так как ОС и диск сильно оптимизируются для этого случая.Но вы можете разделить блоки строк на рабочие потоки / процессы, с которых вы читаете диск.(Если вы можете выполнять параллелизм процессов, а не параллелизм потоков, вы, вероятно, должны - намного меньше хлопот со всех сторон.)

Можете ли вы описать требуемую очистку строки?R - это не первое, чего я хотел бы достичь для разбивания строк.

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