Sie timeit
enthalten den Numpy-Import, der zusätzlichen Aufwand verursachen würde. Warum schreiben Sie nicht den Code für eine Teilmenge der Begrenzungsrahmen und die Zeit dieser Schleife und multiplizieren ihn dann, um die Gesamtlaufzeit zu schätzen?
Das Lösen auf einem einzelnen Computer erfolgt naturgemäß seriell, und mit einer relativ einfachen Operation erhalten Sie möglicherweise keine signifikante Optimierung durch einen bereits einfachen Algorithmus. Sie könnten versuchen, es in eine Art manuellen Kartenreduzierungsvorgang aufzuteilen (ich weiß, dass Sie eine Einschränkung "Keine Kartenreduzierung" haben) und so viele Instanzen auszuführen, wie Sie Kerne haben. Das Mosaikieren / Zusammenführen von n Rastern (der Reduzierungsschritt) ist eine trivial schnelle Operation. Dies ist für den Code wahrscheinlich weniger schmerzhaft als eine Multithread-Lösung.
Alternativ (oder zusätzlich) könnten Sie ein Programm schreiben, um bestimmte Begrenzungsrahmen wie überlappende oder verschachtelte zu kombinieren - dies würde einen räumlichen Index erfordern. Wenn Sie keine haben, ist es möglicherweise von Vorteil, eine zu erstellen, insbesondere wenn Sie den Hauptalgorithmus lokal parallelisieren.
Entlassen Sie auch die Parallelisierung mehrerer Computer nicht ohne weiteres. Wenn Ihre beste Schätzung mehr als ein Jahr beträgt, müssen Sie addieren, wie viel Geld Ihre Zeit für die Ausführung der Einzelcomputerversion kostet, und sie gegen die Einstellung von Cloud-Rechenzeit abwägen. Wie @whuber sagt, werden 1024 GPUs die Daten so schnell durchsuchen, dass Sie so gut wie nichts kosten, selbst wenn Sie eine Woche damit verbringen, sich mit CUDA vertraut zu machen. Wenn es Ihr Chef ist, der Ihnen verbietet, es auf mehr als einem Computer zu versuchen, führen Sie die Kostenanalyse durch und geben Sie ihm einige harte Zahlen - er wird dann den Wert der Daten gegen den Wert Ihrer Zeit abwägen.