Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Lección 36: Alan Edelman y Julia Language
Lección 36: Alan Edelman y Julia Language
En este video, Alan Edelman analiza el poder de los lenguajes de programación para el aprendizaje automático y su importancia en las matemáticas. Destaca el desarrollo reciente del lenguaje Julia, reconocido por Google, por sus méritos técnicos y usabilidad en el aprendizaje automático. Edelman explica cómo funciona la diferenciación automática en Julia y da un ejemplo de cómo calcular la raíz cuadrada de x sin usar diferencias numéricas finitas a través del algoritmo babilónico. También analiza el uso de tipos en Julia para un cálculo eficiente y la simplificación del proceso de retropropagación con matrices de bloques. En general, Edelman enfatiza la importancia del álgebra lineal para los cálculos matemáticos y su papel en la comprensión de fenómenos complejos.
MIT 6.172 Ingeniería de rendimiento de sistemas de software, otoño de 2018 - 1. Introducción y multiplicación de matrices
1. Introducción y multiplicación de matrices
En este video de YouTube titulado "1. Introducción y multiplicación de matrices", el disertante analiza la importancia de la ingeniería de rendimiento y cómo ha evolucionado con el tiempo. Utilizando el ejemplo de la multiplicación de matrices, el orador muestra cómo las técnicas de codificación y las especificaciones de la máquina pueden tener un gran impacto en el rendimiento. La discusión cubre temas como el orden de los bucles, el uso de caché y la programación paralela. El orador también explora formas de optimizar el código para diferentes procesadores y cálculos aritméticos. En general, el video brinda información valiosa sobre el mundo de la ingeniería de rendimiento y sus aplicaciones prácticas en los sistemas informáticos modernos.
Lección 2. Reglas de Bentley para optimizar el trabajo
2. Reglas de Bentley para optimizar el trabajo
Este video de YouTube analiza varias técnicas de optimización para programas informáticos. Se presentan las reglas de Bentley para optimizar el trabajo y las optimizaciones se agrupan en estructuras de datos, bucles, lógica y funciones. Se analizan diferentes técnicas como la codificación de valores, el aumento de la estructura de datos, el cálculo previo, el almacenamiento en caché y la utilización de matrices dispersas. El orador también se refiere a los beneficios de usar una representación de matriz dispersa para gráficos, optimización lógica y optimización de detección de colisiones en programas de gráficos. La implementación de estas técnicas de optimización ayuda a reducir el tiempo de ejecución de los programas, haciéndolos más eficientes.
La segunda parte del video cubre varias categorías de técnicas de optimización, incluido el levantamiento de bucles, el uso de centinelas en bucles, el desenrollado y la fusión de bucles y la incorporación de funciones. El orador desaconseja la optimización prematura y enfatiza la importancia de mantener la corrección y usar pruebas de regresión. El video también describe las Reglas de Bentley para optimizar el trabajo, una guía de seis pasos para aumentar la productividad y lograr objetivos de manera eficiente. Estas reglas incluyen establecer objetivos claros, desglosar tareas, planificar y organizar, priorizar tareas, minimizar las distracciones y revisar y ajustar periódicamente el enfoque propio.
Lección 3. Bit Hacks
3. Trucos de bits
Este video de YouTube cubre una variedad de temas de manipulación de bits, incluida la representación binaria, el complemento a dos, los operadores bit a bit, el intercambio de variables sin una variable temporal y la optimización de código. El video muestra varios trucos de bits, como encontrar el mínimo de dos enteros sin usar declaraciones if-else y cómo intercambiar dos enteros sin usar una variable temporal. El orador analiza las bifurcaciones impredecibles y presenta un truco de bit mínimo sin bifurcación para cuando las bifurcaciones predecibles no están disponibles, y muestra cómo los trucos de bit pueden optimizar el código al reemplazar operaciones costosas como la división con operaciones bit a bit simples. El video también analiza la secuencia de Bruijn y su aplicación para resolver problemas como el problema de N Queens.
La segunda parte trata sobre cómo resolver el problema de N Queens usando vectores de bits y contando eficientemente el número de bits 1 en una palabra binaria. El retroceso se usa para implementar el problema de N Queens, y los vectores de bits se usan para representar eficientemente el tablero. Se describen tres comprobaciones para colocar con seguridad una reina en el problema de N reinas y se presenta un método para contar el número de bits 1 en una palabra mediante la eliminación recursiva del bit 1 menos significativo. Además, se analiza el uso de la búsqueda en tablas y la manipulación de registros para contar el número de bits 1. El video termina con una demostración de un enfoque de divide y vencerás para contar 1 bits que tiene un rendimiento proporcional al logaritmo en base dos de la longitud de la palabra. También se proporcionan recursos para seguir aprendiendo.
Lección 4. Lenguaje ensamblador y arquitectura informática
Lección 4. Lenguaje ensamblador y arquitectura informática
Este video proporciona una descripción general completa del lenguaje ensamblador y la arquitectura de la computadora. El lenguaje ensamblador es una interfaz importante para optimizar el rendimiento del código, y comprender la arquitectura de la computadora es esencial para dominar el lenguaje ensamblador. El orador explica la historia de la arquitectura x86 64 y su desarrollo, sus registros clave, tipos de datos, modos de direccionamiento de memoria y arquitectura de conjunto de instrucciones, incluidas pilas, lógica entera y binaria, lógica booleana y subrutinas. También discuten extensiones como cero y extensión de signo y varios modos de direccionamiento en lenguaje ensamblador. Además, el video analiza los tipos de coma flotante, los vectores y las unidades vectoriales, las instrucciones SSE y tradicionales, y las características de diseño de la arquitectura de la computadora, como el procesamiento superescalar, la ejecución fuera de orden y la predicción de bifurcaciones.
El video también cubre varios temas relacionados con el lenguaje ensamblador y la arquitectura de la computadora. Uno de los temas centrales es el paralelismo de nivel de instrucción (ILP) y las paradas de canalización, que son causadas por peligros como las dependencias de datos. El orador analiza las dependencias de datos verdaderos, anti y de salida y cómo los procesadores superescalares pueden explotar más paralelismo en el hardware para ejecutar múltiples instrucciones a la vez. Sin embargo, para evitar peligros, los arquitectos han implementado estrategias como renombrar y reordenar, así como ejecución especulativa para adivinar el resultado de una rama y ejecutarla de antemano. El orador alienta a la audiencia a comprender estos métodos para comprender mejor las optimizaciones de software.
Lección 5. C a Asamblea
Lección 5. C a Asamblea
En esta parte del video, se analiza la importancia de comprender C en lenguaje ensamblador, además de cómo se implementa el código C en lenguaje ensamblador usando un compilador. La atención se centra específicamente en cómo LLVM IR se traduce en ensamblaje en la convención de llamadas Linux x86 64. El presentador explica los componentes básicos de LLVM IR y cómo las construcciones en el lenguaje de programación C se traducen a LLVM IR. El video también cubre el diseño de la memoria virtual, el tema de la coordinación de llamadas de funciones entre múltiples funciones y el uso de dos punteros en la convención de llamadas Linux x86 64, el BP y el SP, para administrar todos los marcos de pila.
El video también explica las estrategias para mantener los estados de registro en la programación de C a ensamblador, como guardar registros como guardado de llamadas o guardado de llamadas, y cómo la convención de llamadas x86 evita la pérdida de trabajo. Cubre cómo funcionan las llamadas a funciones en C y ensamblador, analizando el proceso de guardar argumentos y variables locales en la pila, así como la optimización común de usar el puntero de pila en lugar del puntero base. El video también muestra el proceso de compilación de LV miR hasta código ensamblador, analizando el prólogo de la función, guardando registros, manejando condiciones y convirtiendo código C en código ensamblador usando un gráfico de flujo de control. Finalmente, habla de la función epilogue utilizada para restaurar registros antes de devolver resultados.
Lección 6. Programación multinúcleo
Lección 6. Programación multinúcleo
Esta videoconferencia analiza la programación multinúcleo y la aparición de procesadores multinúcleo debido a la Ley de Moore y el final del escalado de frecuencias de reloj. El orador explica el problema de la densidad de potencia que enfrentan los procesadores y cómo llevó a la adición de múltiples núcleos a los chips para mantenerse al día con la Ley de Moore. La conferencia también cubre los conceptos básicos de los protocolos de coherencia de caché en hardware de memoria compartida y plataformas de concurrencia como Pthreads, TBB, OpenMP y Silk que brindan abstracciones para la programación paralela. Los pros y los contras de cada plataforma se analizan y demuestran con ejemplos de implementación de programas de Fibonacci. El video proporciona una descripción general completa de la programación multinúcleo y los desafíos y soluciones que enfrentan los programadores.
El video también cubre varios aspectos de Silk, una herramienta de abstracción para manejar el procesamiento paralelo. El orador analiza temas como la seda anidada para bucles, la generación de código ensamblador, la reducción mediante reductores, el planificador y la optimización del rendimiento. También brindan una descripción general del ecosistema Silk y las herramientas relacionadas, como el desinfectante de seda y la escala de seda para depurar y analizar la escalabilidad, respectivamente. La conclusión principal es que escribir programas paralelos para procesadores multinúcleo puede ser un desafío, pero Silk simplifica el proceso al manejar tareas complejas de manera eficiente, brindando a los programadores más control sobre la ejecución de su código.
Lección 7. Carreras y Paralelismo
Lección 7. Carreras y Paralelismo
El video cubre una variedad de temas relacionados con carreras, paralelismo y problemas de computación en la programación de Silk. Algunos conceptos clave cubiertos incluyen las declaraciones de generación y sincronización para la ejecución simultánea, la importancia de evitar las condiciones de carrera y el uso del detector de carreras de Silk para identificarlas. El video también cubre la ley de Amdahl, la ley del trabajo y la ley de amplitud como formas de cuantificar la cantidad de paralelismo en un programa, junto con formas de analizar el trabajo y la amplitud de los cálculos. También se analizan la posible aceleración y el paralelismo de los algoritmos de clasificación en paralelo y el concepto de la teoría de la programación, centrándose en el teorema del programador codicioso. En general, el video brinda información valiosa para comprender y optimizar el rendimiento del programa en la programación de Silk.
El video explica los corolarios del límite del programador codicioso, que esencialmente establece que cualquier programador codicioso logra una aceleración lineal casi perfecta siempre que T1/Tinfinity sea mayor o igual a P^2. El programador de seda, que utiliza un programador de robo de trabajo, puede lograr una aceleración lineal casi perfecta siempre que la cantidad de procesadores sea mucho menor que T1/Tinfinity. El sistema de tiempo de ejecución de seda funciona manteniendo una plataforma de trabajo de hilos listos y manipula la parte inferior de la plataforma como una pila. El video también analiza Cactus Stack, que permite múltiples vistas de pilas en paralelo y hace posibles las llamadas a funciones paralelas. El límite superior en el espacio de pila requerido por la ejecución del procesador P a menudo es mucho más flexible que la cantidad real necesaria, ya que es posible que cada procesador no necesite recorrer todo el gráfico de cálculo cada vez que roba trabajo.
Lección 8. Análisis de Algoritmos Multiproceso
Lección 8. Análisis de Algoritmos Multiproceso
Este video analiza el método maestro para analizar las recurrencias de divide y vencerás, y lo aplica a algoritmos de subprocesos múltiples comparando la base logarítmica B de n con la base logarítmica B de A con F de N para determinar su crecimiento en n y el trabajo requerido. El video presenta una hoja de trucos con soluciones para algoritmos básicos de subprocesos múltiples y cubre temas como el trabajo y el análisis de intervalos, la eficiencia del trabajo y la superación de los costos generales a través de la optimización del tamaño de grano. Se enfatiza la importancia de la empatía cuando se comunican temas técnicos y se introduce el concepto de un DAG como un medio para equilibrar el trabajo y la extensión para aumentar el paralelismo y disminuir el tiempo de ejecución.
El video también analiza el análisis de algoritmos de subprocesos múltiples, centrándose en el trabajo y el intervalo, y cómo maximizar el paralelismo y minimizar el intervalo para lograr una aceleración lineal casi perfecta. El orador sugiere un enfoque de divide y vencerás para los algoritmos de subprocesos múltiples, donde la cantidad de tareas asignadas a los subprocesos es lo suficientemente grande, y advierte contra la generación de numerosas tareas pequeñas debido a los gastos generales de programación. El código de ejemplo presentado incluye uno eficiente y uno pésimo. El orador también analiza cómo representar submatrices en la codificación e indexación bidimensional y enfatiza el uso de 'restringir' en el código de multiplicación de matrices divide y vencerás para mejorar el rendimiento.
Lección 9. Lo que pueden y no pueden hacer los compiladores
Lección 9. Lo que pueden y no pueden hacer los compiladores
Este video analiza cómo los compiladores pueden optimizar el código, usando varios ejemplos. Explica cómo los compiladores pueden eliminar el almacenamiento innecesario y las referencias a la memoria, y cómo pueden optimizar los bucles para mejorar el rendimiento.
Este video también explica el concepto de pases de optimización del compilador y cómo se pueden usar para mejorar el rendimiento del código. También analiza las limitaciones de los compiladores, específicamente en lo que respecta a la vectorización. Los compiladores solo pueden vectorizar el código si pueden determinar que los punteros en el código no tendrán alias. Si los punteros hacen alias, el compilador no podrá vectorizar el código. Como programador, puede ayudar al compilador anotando sus punteros para proporcionar más información sobre su uso.