Estoy trabajando en Java y GeoTools para procesar algunos rásters ASCII. Actualmente, estoy tratando de obtener los rásteres sumados en una gran cuadrícula. He probado un par de métodos, pero parece que el rendimiento se degrada.
(Estos son copiados manualmente, así que pido disculpas por los errores tipográficos)
Al principio lo intenté:
Operatons op = new Operations(null);
GridCoverage2D sum = initialise();
for (GridCoverage2D grid : grid){
sum = op.add(sum, grid);
}
Esto se ha hecho aparentemente rápido, pero cuando intento acceder a la suma tarda siglos, así que asumo que estas operaciones se llevan a cabo con pereza. Luego traté de añadir un escritor en el medio para acceder a la cuadrícula por lo que se calcula sobre la marcha.
Operatons op = new Operations(null);
GridCoverage2D sum = initialise();
for (GridCoverage2D grid : grid){
sum = op.add(sum, grid);
GridCoverageWriter writer = new ArcGridWriter(File.createTempFile(...))
writer.write(sum);
}
Lo que mejoró un poco las cosas. Luego pensé que hacer una suma recursiva podría ayudar, pero estoy obteniendo resultados continuamente más lentos todavía y martillando un solo procesador. ¿Hay alguna forma de aumentar la velocidad de estas operaciones o estoy enfocando esto de manera equivocada?
Las cuadrículas son de aproximadamente 4000x4000. Por el momento, la suma de 6 cuadrículas tarda 5 minutos, la de 8 tarda unos 15 y la de 10 tarda casi media hora. Las cuadrículas se generan utilizando un modelo fortran al que no tengo acceso y podría haber hasta cerca de 100 cuadrículas sumadas. He remuestreado las cuadrículas para que todas caigan en la misma envoltura. El único problema con el primer enfoque es el tiempo de ejecución, pero me preguntaba si habría una forma más eficiente de hacerlo.