Usando sistemas como Parallel Linq, es posible dividir la ejecución de funciones anónimas, consultas, etc. en múltiples núcleos e hilos en una sola máquina. Me gustaría la capacidad de extender esto para ejecutar en varias máquinas utilizando construcciones de lenguaje estándar como bucles (como Parallel.For()
), tipos de valores como int
s, struct
s, etc., y mantener las modificaciones de la fuente de la aplicación al mínimo. Idealmente, esto me permitiría abrir un proyecto, agregar un atributo a un método y volver a compilar para obtener acceso a la funcionalidad mejorada.Implementando extensiones de lenguaje C#
Parece que que iba a necesitar algo en la línea de:
La capacidad de capturar un bloque de código compilado (tales como lambda) y pasarlo a un proceso de trabajo que se ejecuta en otro nodo , junto con cualquier dato que se requiera, o
Proporcione un preprocesador que capture el código en cuestión, compílelo en una especie de proyecto de plantilla que reemplazaría referencias variables, etc., con referencias a una clase que manejaría comunicación de red, almacenamiento en caché y acceso a cualquier otro activo requerido, y envíe la DLL resultante a cualquier availa nodos de trabajadores que se ejecutan en otras máquinas.
Roslyn parece que proporciona algunas herramientas que serían útiles aquí. ¿Hay alguna forma de engancharse en la tubería de compilación actual para permitir esto?
Editar
Vale, sé esto es posible, because these guys did it. La pregunta es, cómo?
De acuerdo, cerradores - ¿Cómo es esto demasiado localizado? –
Porque debe ser la única persona aquí que desee implementar extensiones de lenguaje C# para crear núcleos OpenCL. –
De acuerdo, olvídate de la parte OpenCL. ¿Cómo iría a la fase de compilación para personalizar la generación de código para distribuir la ejecución a través de plataformas heterogéneas? Eso apenas parece más claro para mí. ¿Y desde cuándo cerramos las preguntas sobre aplicaciones específicas? –