HPC @ Intel: cuando decir no al paralelismo - Calendae | Informática, Electrónica, CMS, Ciberseguridad

HPC @ Intel: cuando decir no al paralelismo

Hola de nuevo. Soy Simón Sánchez y hoy te voy a contar sobre HPC @ Intel: cuando decir no al paralelismo

Como desarrollador de software, se enfrenta a una serie de opciones para decidir si desea modificar sus aplicaciones para arquitecturas paralelas y cómo. ¿Qué enfoque debería tomar? ¿Cuán significativamente debería modificar las aplicaciones? ¿Cuándo debería decir «no» al paralelismo? Responder a estas preguntas requiere no solo habilidades técnicas sino también un pensamiento estratégico que evalúe los beneficios y costos de la empresa. Al considerar sus opciones, considere los siguientes consejos, que obtuvimos de nuestras experiencias en Intel trabajando con desarrolladores de software para optimizar el código.

No paralelice la clave de serie no optimizada

No hay duda de que la paralelización es un medio importante de mejorar el rendimiento de las aplicaciones para las generaciones actuales y futuras de hardware. Sin embargo, el subproceso no debería ser el primer curso de acción para optimizar una aplicación. Identifique si puede lograr sus objetivos de rendimiento utilizando optimizaciones seriales y vectoriales. En algunos casos, puede obtener más mejoras de rendimiento optimizando la versión en serie en lugar de crear una paralela.

No paralelice si la clave de serie ya está funcionando lo suficientemente rápido

Si bien puede y debe posicionar su código para futuras arquitecturas, es posible que no sea rentable trabajar para cumplir con los requisitos que aún no se han creado. Desarrollar código con un mayor grado de paralelismo del que pueden soportar las arquitecturas actuales rara vez es el mejor uso de los recursos. Y, por supuesto, si el código está asociado con E / S o memoria, el paralelismo de código no ayudará.

No pierda el tiempo tratando de paralelizar instantáneamente todo su trabajo anterior. Piense en paralelo cuando cree código nuevo o reconstruya secciones de código existente. En lugar de resolver problemas en pasos secuenciales, considere cómo estos problemas se pueden dividir en partes separadas que se pueden hacer simultáneamente.

Al considerar cuánto paralelismo se necesita a largo plazo, intente determinar qué tan rápido se escalará la carga de trabajo de su aplicación y cómo esa escalabilidad afectará sus requisitos de computación. La cantidad de cálculo podría aumentar linealmente con el tamaño del conjunto de datos, o podría aumentar a una velocidad geométricamente más rápida o más lenta. (Si su carga de trabajo escala linealmente con sus datos, tenga en cuenta que su código se encontrará con un cuello de botella de E / S en algún momento).

Tomemos, por ejemplo, una aplicación de procesamiento de audio que ya puede manejar una cantidad suficiente de canales con una buena frecuencia de muestreo. Esta aplicación puede ser una mala candidata para la paralelización. Por otro lado, una aplicación de modelado físico podría ser un buen candidato. Con más potencia de cálculo disponible, la aplicación de modelado podría proporcionar un modelado más fino y algoritmos más precisos.

En general, asegúrese de que los beneficios de paralelizar una aplicación no se vean compensados ​​por retrasos en el envío de la próxima versión del producto.

No paralelice reescribiendo el código desde cero

No tire al bebé con el agua del baño. Resista la tentación de descartar todo un código base de trabajo porque es feo, retorcido o simplemente viejo. La historia de Netscape ofrece una advertencia. Según el desarrollador de software y el blogger Joel Spolsky, Netscape reescribió todo el código de su navegador entre 1997 y 2000. Aunque la compañía no proporcionó nuevas versiones, Microsoft tomó el control del mercado de navegadores y Netscape nunca se restauró.

Como señala Spolsky, la mayoría de los programadores se esfuerzan por escribir código más elegante. Durante el proceso de desarrollo, se agregan y refinan grupos de códigos. El resultado puede verse mal. Pero si reescribe el código, pierde la conciencia que representan esos bultos. Y en cualquier caso, la fealdad está en el ojo del espectador. El código de computadora que le parece feo a un humano que intenta leerlo puede funcionar bien.

Siempre habrá ocasiones que requieran un nuevo comienzo. Sin embargo, extraer una clase o subrutina para introducir el paralelismo puede ser mucho más eficaz que empezar con una página completamente en blanco.

No hagas el paralelismo si alguien ya ha hecho el trabajo por ti

Antes de extraer el código e intentar paralelizarlo usted mismo, compruebe si las soluciones estándar o de código abierto pueden proporcionar lo que necesita. Si está trabajando en aplicaciones científicas o técnicas, por ejemplo, puede encontrar rutinas estándar en bibliotecas matemáticas populares que pueden ahorrarle un tiempo valioso.

Considere el uso Herramientas de software Intel®. Por ejemplo, Intel® Threading Building Blocks, una biblioteca en tiempo de ejecución basada en modelos C ++ de estructuras paralelas y algoritmos, puede simplificar enormemente sus esfuerzos. El uso de estas construcciones permite que el código se escale automáticamente a medida que aumenta el número de núcleos de ejecución. Las construcciones también están diseñadas explícitamente para ser compatibles con otras técnicas de subprocesamiento, incluidas otras bibliotecas paralelas, como Intel® Integrated Performance Primitives e Intel® Math Kernel Library. El uso de compiladores u OpenMP * ofrece formas adicionales de agregar paralelismo fácilmente.

No te apures

El advenimiento de las arquitecturas de múltiples núcleos es una revolución en la tecnología de la información, pero sacar provecho de los beneficios de los múltiples núcleos requiere pasos medidos. Los subprocesos múltiples y otros medios de paralelización de software son esfuerzos complejos que pueden requerir recursos considerables. La paralelización debe verse como una inversión como cualquier otra, que debe realizarse cuando sea necesario, pero solo después de considerar debidamente los costos y beneficios.

Visite Intel Online para obtener las últimas noticias y más información sobre Procesamiento de alto rendimiento es Programación en paralelo para procesadores Intel Multi-Core.

Puedes compartir en tu Facebook para que tus colegas lo lean

??? ? ? ???

Comparte