Die Berechnung erfolgt aktuell auf Basis eines einzelnen Arrays je Rechengröße. Für die Berechnung mit mehreren Kernen bietet sich Multithreading an. Es gibt mehrere Frameworks, welche – zum Teil mit unterschiedlichem Fokus – Parallelisierung von Numpy Berechnungen ermöglichen. Numba ist ein guter Kandidat, unterstützt jedoch aktuell keine maskierten Arrays. Dask ist ein ebenfalls sehr interessantes Projekt, der Fokus liegt jedoch auf der Parallelisierung der Verarbeitung sehr großer Datenmengen über mehrere Rechner, sowie auf „out-of-memory- Berechnungen“, sodass bei einem Test für die hier vorliegende Fragestellung über Dask kein signifikanter Geschwindigkeitsvorteil erzielt werden konnte.
Ich habe entschieden, die Parallelisierung durch eine eigene Unterteilung durchzuführen. Das Modellgebiet wird hierbei je nach Größe automatisch in mehrere Kacheln aufgeteilt. Anschließend werden die Kacheln je nach Anzahl der zur Verfügung stehenden CPU-Kerne parallel über den PythonThreadPoolExecutor berechnet. In dieser Variante werden die Kacheln für jeden Bereich aus dem Hauptarray jedes Mal neu gebildet und nach der Berechnung die Ergebnisse in die Hauptkachel zurückgeschrieben.