Pas de multi-threading avec R sous Linux

2

Je fais une analyse statistique en utilisant R sur le système d'exploitation Ubuntu 15.10. Mon script R prend beaucoup de temps à terminer. Environ 2 à 3 heures.

En attendant, j'ai vérifié la charge de mes processeurs. Je viens de remarquer que tous les processeurs sont presque inactifs, sauf un. Dans l'image ci-dessous, comme vous pouvez le constater, seule la CPU 8 est à 100%.

entrez la description de l'image ici

Pourquoi le noyau Linux n'équilibre-t-il pas la charge de travail de tous les processeurs?

Frogatto
la source
1
Cela ressemble à votre script R est écrit pour être mono-thread. Il est important que les programmeurs déterminent et définissent le degré de parallélisme de leur application, afin d'éviter les nombreux pièges de la programmation parallèle, de sorte qu'aucun système d'exploitation ne se contente d'exécuter des bits d'un processus, quel que soit le système de traitement libre. le programme doit être écrit pour expliquer quels bits peuvent être exécutés séparément.
Frank Thomas
@FrankThomas Semble que les scripts R ne peuvent pas être écrits en multi-thread. Alors, y a-t-il une solution de contournement pour accélérer mon analyse?
Frogatto
@ HiI'mfrogatto, vous vous trompez. Le lien déjà posté sur choroba montre comment écrire des scripts R multi-threadés.
ChrisInEdmonton

Réponses:

4

Linux équilibre la charge de travail entre tous les processeurs. Cependant, pour ce faire, la charge de travail doit être multithread. Il n'est pas possible de répartir une charge de travail à un seul thread sur plusieurs processeurs et il est en effet plus efficace de conserver une tâche à un seul thread sur un seul processeur.

Le problème ici est que le script R en question n'a pas été écrit pour être multithread.

Chris Edmonton
la source
0

Si votre processus cède la valeur mapReduce, vous pouvez fractionner le script et exécuter chaque élément sur une CPU différente.

tkg
la source
-1

Ce n'est pas kernelqui décide comment utiliser CPU. Si votre script est conçu pour être multi-thread, il utilisera uniquement d'autres threads.

Amit Singh
la source