2016-06-17 1 views
1

J'ai besoin de charger plusieurs fichiers de formes dans ma session R. Actuellement, je charge chaque fichier de forme individuellement. Cela fonctionne, mais cela prend beaucoup de temps et n'utilise que 15% de mon processeur disponible. Récemment, j'ai essayé de charger les fichiers de forme en utilisant foreach et DoParallel:ForEach et DoParallel utilisent toute ma RAM?

require(foreach) 
require(doParallel) 
require(rgdal) 
files <- c(
    "AHVENANMAA/AHVENANMAA", 
    "ETELA-KARJALA/ETELA-KARJALA", 
    "ETELA-POHJANMAA/ETELA-POHJANMAA_1", 
    "ETELA-POHJANMAA/ETELA-POHJANMAA_2", 
    "ETELA-SAVO/ETELA-SAVO_1" 
) 
registerDoParallel(cores = 8) 
listOfCurrentProvinces <- (
    foreach(
     x = files, 
     .packages = "rgdal", 
     .inorder = FALSE 
    ) %dopar% 
     readOGR(x, layer = "DR_LINKKI") 
) 

Cette méthode fonctionne et est très rapide (il utilise 100% de mon CPU). Cependant, il utilise trop de mémoire, surtout quand je répète le processus plusieurs fois. Est-il possible que je puisse utiliser ForEach et DoParallel sans encourir un tel impact mémoire? Ma machine dispose de 8 processeurs (4 physiques et 4 logiques) et dispose de 16 Go de RAM.

+0

Lire [CE] (http://stackoverflow.com/questions/37750937/doparallel-package-foreach-does-not-work-for-big-iterations-in-r) – 989

Répondre

0

J'ai fait quelques choses qui semblent aider.

1) N'enregistrez le nombre de cœurs qu'une seule fois en utilisant la commande registerDoParallel.

2) Utiliser gc() après chaque itération. Avant que j'applique ces changements, ma mémoire a explosé après seulement 4 itérations (sur 21). Maintenant, j'ai complété 6 itérations et je suis assis confortablement à 50% de RAM. La quantité de RAM disponible est restée constante pendant environ 15 minutes.