Implémentation personnalisée de la fonction ArcGIS

9

Je voudrais savoir ce qu'il faut pour créer une implémentation personnalisée d'une fonction ArcGIS. En particulier, je voudrais implémenter GeoAnalyst.ISurfaceOp2.Visibility () afin de le faire fonctionner plus rapidement. À l'heure actuelle, cela prend environ 3 secondes par appel à Visibility (). D'après ma compréhension limitée, le goulot d'étranglement est l'écriture de rasters temporaires dans le système de fichiers. Si cela pouvait se faire en mémoire, je soupçonne que le temps de traitement diminuerait considérablement. Je fais cela dans un projet .NET, mais les solutions dans n'importe quelle langue sont les bienvenues.

Ross Fuhrman
la source
Pourquoi ne pas simplement écrire les rasters temporaires sur un disque RAM? Ensuite, vous n'aurez pas à coder l'opération de visibilité à partir de zéro, ce qui comporte ses propres risques et coûts.
whuber
Ça sonne bien. Comment pourrais-je procéder? N'est-ce pas ce que @Radar déclare n'est pas possible dans la réponse ci-dessous?
Ross Fuhrman
4
Vous installez un disque RAM sur votre système; les détails varient selon le système d'exploitation. Vous pointez ensuite le dossier de travail ArcGIS dessus. Vous pourriez presque aussi bien utiliser un SSD, surtout si vos rasters sont énormes ou si vous n'avez pas beaucoup de RAM.
whuber
J'aime l'idée du disque RAM. Un SSD est risqué car ils ne sont pas parfaits pour des opérations de lecture / écriture constantes, car vous pourriez l'user rapidement.
Radar
2
Un SSD basé sur flash survivra à 1 à 5 millions d'écritures, @Radar, mais les SSD DRAM ne "s'useront" pas du tout. Visitez storagesearch.com pour (beaucoup) plus d'informations.
whuber

Réponses:

5

Cette réponse commémore et développe une partie de la discussion dans les commentaires. Un disque RAM émule un lecteur de disque externe en utilisant une partie de la RAM dans un système informatique. Il peut lire et écrire à des vitesses comparables à la mise en cache en mémoire, moins un peu de surcharge pour les protocoles de traduction pour convertir les commandes orientées disque en commandes orientées mémoire. Un disque RAM est créé en exécutant un logiciel spécial au niveau du système d'exploitation, un «pilote de périphérique». Des disques RAM open source et gratuits sont disponibles pour de nombreux systèmes d'exploitation, y compris Windows.

Par conséquent, une façon d'accélérer un goulot d'étranglement dû aux E / S de disque intermédiaires consiste à configurer un disque RAM (en achetant la RAM supplémentaire si nécessaire) et à y placer le dossier de travail. (Il s'agit généralement d'un paramètre logiciel.)

Une autre option consiste à installer un dispositif SSD (SSD) haut de gamme , qui est essentiellement un bloc de RAM dans un emballage séparé avec une interface électronique pour agir comme un lecteur de disque. Il s'installe dans un système informatique à la place d'un lecteur de disque et se comportera exactement comme un autre lecteur de disque sans aucun logiciel supplémentaire, mais lira et écrit presque aussi rapidement que les accès à la mémoire. Celles-ci sont relativement chères, mais il est probable qu'une seule petite soit nécessaire, même pour un stockage raster intermédiaire très volumineux.

Avant de prendre l'une de ces étapes, il est important de profilerle processus pour déterminer où se trouve réellement le goulot d'étranglement. (Windows a été livré avec des applications de profilage et de surveillance de plus en plus puissantes ces dernières années, disponibles dans Win 7 en tant que paire Gestionnaire des tâches / Moniteur de ressources, et bien sûr, de nombreuses applications similaires sont également disponibles pour d'autres systèmes d'exploitation.) De nombreux systèmes sont configurés automatiquement, ou peut être configuré pour mettre en cache les lectures et écritures sur disque dans la RAM pendant de courtes périodes. La mise en cache fonctionne presque comme un disque RAM, mais est probablement encore plus rapide: le logiciel pense qu'il écrit des fichiers intermédiaires sur le disque, mais le système d'exploitation les écrit temporairement en RAM d'abord, sans accéder au disque, dans l'espoir que bientôt les mêmes données sera relue et supprimée, auquel cas une écriture physique ne sera jamais nécessaire.

Étant donné la quantité de calcul nécessaire pour tout calcul de visibilité complète (dans un algorithme naïf, chaque cellule doit être inspectée pour la visibilité une fois pour chaque point de vue), on devrait au moins soupçonner que la vitesse de calcul, et non les E / S disque, peut être le problème ici. Si tel est le cas, les disques RAM ou SSD seront une perte de temps et d'argent. Au lieu de cela, l'effort devrait être dirigé vers l' analyse et l'amélioration de l'algorithme sous-jacent .

Une discussion sur la question de savoir si les performances du disque RAM aident ArcGIS est apparue dans un autre thread .

whuber
la source
+1 Excellente réponse. Je pense que les gens du SIG devraient également garder un œil sur l'utilisation générale de l'unité de traitement graphique, ou GPGPU . Je soupçonne que la plupart des jeux de tir à la première personne exploitent le GPU pour déterminer la visibilité de l'objet depuis l'emplacement du tireur. Ce serait formidable de voir une implémentation OpenCL de ce problème. Peut-être que si les SIG utilisaient davantage le GPU, cela pourrait attirer l'attention des enfants qui ont grandi en jouant à des jeux vidéo.
Kirk Kuykendall
Je voulais également mentionner que le GPU est optimisé pour faire des choses comme la détermination de la surface cachée , qui est similaire à ce que fait ISurfaceOp2.Visibility.
Kirk Kuykendall
Bonnes idées, @Kirk. Manifold utilise les GPU NVIDIA (et le fait depuis plusieurs années). Il existe également des recherches indépendantes sur ce front; J'ai participé à certains efforts de proposition de subvention pour développer des implémentations d'algèbre cartographique basées sur GPU.
whuber
Ceci est une excellente réponse. J'ai fait le profilage suggéré, et il est apparu qu'il pourrait y avoir un goulot d'étranglement d'E / S de disque. J'ai donc implémenté une solution utilisant un disque RAM (j'ai choisi IMDisk). En fin de compte, cela n'a pas réduit le temps nécessaire pour terminer le processus.
Ross Fuhrman
Je suis désolé d'apprendre qu'il n'y a eu aucune amélioration. La visibilité est un calcul coûteux: en principe, chaque cellule du DEM doit être inspectée pour chaque observateur et le processus d'inspection peut avoir à examiner une ligne entière de cellules entre l'observateur et la cellule DEM: cela peut signifier des milliards de calculs par observateur même sur une grille modeste (mégapixels). Si le temps de calcul est le problème, vos deux meilleures options sont probablement (1) paralléliser le travail: répartir les observateurs entre les postes de travail, calculer les visibilités, combiner les résultats; et (2) écrire votre propre code de visibilité.
whuber
3

Malheureusement, vous ne pouvez pas configurer IRasterAnalysisEnvironment pour qu'il fonctionne avec un espace de travail en mémoire.

Ce fil résout le problème.

Radar
la source