Trabajando en un problema que requiere un GA. Tengo todo eso funcionando y pasé bastante tiempo recortando la grasa y optimizando el código antes de recurrir a la optimización del compilador. Debido a que el GA se ejecuta como resultado de la entrada del usuario, tiene que encontrar una solución dentro de un período de tiempo razonable, de lo contrario, la UI se parará y simplemente no funcionará del todo. Obtuve este GA binario resolviendo un problema variable de 27 en aproximadamente 0.1s en un iPhone 3GS.Optimización de algoritmo genético: utilizando el distintivo -O3
Para lograr este nivel de rendimiento, toda la GA se codificó en C, no en Objective-C.
En una búsqueda para una reducción adicional del tiempo de ejecución, estaba considerando la idea de usar el conmutador de optimización "-O3" solo para el módulo de solución. Lo intenté y redujo el tiempo de ejecución casi a la mitad.
¿Debería preocuparme por cualquier problema configurando la optimización en "-O3"? Tenga en cuenta que estoy haciendo esto a nivel de archivo y no para todo el proyecto.
-O3 sigue siendo relativamente seguro siempre que el código que escribió sea "estándar" y no haga ningún truco específico. Incluso entonces, dado que el compilador del iPhone solo tiene que generar código de trabajo para un puñado de sistemas pequeños, es probable que esté bien. –
Solo para agregar, si está preocupado por el bloqueo de la UI, puede considerar realizar el cálculo en un subproceso simultáneo. – David
Pensé en agregar un hilo concurrente. El problema es que la forma en que se escribe el código en este momento no tiene datos para iniciar el GA hasta que el usuario interactúa con la interfaz de usuario. Para lanzar un hilo separado tendré que expandir la máquina de estado principal para hacer un trabajo de anticipación y predecir qué necesitará la GA. No es imposible, pero si puedo evitarlo haciendo que la GA vaya más rápido, preferiría pasar a problemas más apremiantes. Debo añadir que la salida de la GA determina cómo se verá la próxima actualización de UI. –