Нет многопоточности с R в Linux

1464
Hi I'm Frogatto

Я делаю статистический анализ с использованием R на операционной системе Ubuntu 15.10. Мой сценарий R занимает очень много времени. Около 2 - 3 часов.

Тем временем я проверил загрузку своих процессоров. Я только заметил, что все процессоры почти простаивают, кроме одного. На рисунке ниже, как вы можете видеть, только CPU 8 находится на 100%.

enter image description here

Почему ядро ​​Linux не уравновешивает рабочую нагрузку на всех процессорах?

2
http://www.glennklockwood.com/data-intensive/r/parallel-options.html choroba 9 лет назад 0
Похоже, ваш R-скрипт написан как однопоточный. Важно, чтобы программист определял и определял степень параллелизма своего приложения, чтобы избежать многих ловушек параллельного программирования, поэтому ни одна ОС не будет просто запускать биты процесса на любом свободном объекте обработки. программа должна быть написана для учета того, какие биты могут выполняться отдельно. Frank Thomas 9 лет назад 1
http://stackoverflow.com/q/10835122/1856738 Run CMD 9 лет назад 0
@FrankThomas Кажется, что R-сценарии не могут быть написаны в многопоточной природе. Итак, есть ли способ обойти мой анализ? Hi I'm Frogatto 9 лет назад 0
@ Привет, я ошибаюсь. Ссылка, которую уже разместил Чороба, показывает, как писать многопоточные R-скрипты. ChrisInEdmonton 9 лет назад 0
@ChrisInEdmonton Хорошо, я проверю. Hi I'm Frogatto 9 лет назад 0
@ HiI'mfrogatto, похоже, вы нашли документацию по многопоточности. Более крупной и несколько более сложной проблемой будет определение того, можно ли сделать ваш алгоритм асинхронным, с небольшими частями ваших вычислений, происходящими независимо, но таким образом, чтобы результаты могли быть скоординированы. Это не простая вещь, и мы не можем вам в этом помочь. Я бы порекомендовал опубликовать в StackOverflow, если у вас есть дополнительные вопросы о том, как реализовать параллельный алгоритм для ваших нужд. Frank Thomas 9 лет назад 0
@FrankThomas Спасибо за ваше руководство. Hi I'm Frogatto 9 лет назад 0

3 ответа на вопрос

4
ChrisInEdmonton

Linux действительно балансирует рабочую нагрузку на всех процессорах. Однако для этого рабочая нагрузка должна быть многопоточной. Невозможно распределить однопотоковую рабочую нагрузку по нескольким ЦП, и, действительно, наиболее эффективно хранить однопоточную задачу на одном ЦП.

Проблема здесь в том, что рассматриваемый скрипт R не был написан как многопоточный.

0
tkg

If your process yields to mapReduce, you can split the script into pieces and run each piece on a different CPU.

-1
amit singh

Это не kernelкто решает, как использовать CPU. Если ваш скрипт создан для многопоточности, то только он будет использовать другие потоки.

Похожие вопросы