Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Aula 34. Matrizes de Distância, Problema de Procusto
34. Matrizes de Distância, Problema de Procusto
O palestrante discute o problema de Procrustes, que envolve encontrar a melhor transformação ortogonal que leva um conjunto de vetores o mais próximo possível de outro conjunto de vetores. Eles explicam diferentes expressões para calcular a norma de Frobenius de uma matriz de distância e sua conexão com o problema de Procrustes. O palestrante também introduz o conceito de traço de matrizes e encontra o Q correto no problema de Procusto. Além disso, eles abordam a questão de saber se o aprendizado profundo realmente funciona e apresentam a solução para um problema de matriz envolvendo encontrar a melhor matriz ortogonal, que envolve calcular o SVD do produto escalar de duas matrizes e usar as matrizes ortogonais do SVD.
Aula 35. Encontrando Clusters em Gráficos
35. Encontrando Clusters em Gráficos
Este vídeo discute o agrupamento em gráficos e como encontrar agrupamentos usando diferentes algoritmos, como K-means e agrupamento espectral. A matriz Laplaciana é usada no agrupamento espectral e pode fornecer informações sobre os agrupamentos no grafo por meio de seus autovetores. O autovetor de Fiedler, que é o autovetor para o menor autovalor positivo, é importante para agrupamento. O palestrante também enfatiza a importância dos autovetores serem ortogonais na identificação de diferentes clusters. Além disso, há uma breve prévia da próxima aula, que abordará a propagação reversa usando Julia em álgebra linear. Os alunos são incentivados a enviar seus projetos on-line ou fora do escritório do instrutor.
Aula 36: Alan Edelman e Julia Language
Aula 36: Alan Edelman e Julia Language
Neste vídeo, Alan Edelman discute o poder das linguagens de programação para aprendizado de máquina e sua importância na matemática. Ele destaca o desenvolvimento recente da linguagem Julia, reconhecida pelo Google, por seus méritos técnicos e usabilidade em aprendizado de máquina. Edelman explica como funciona a diferenciação automática em Julia e dá um exemplo de como calcular a raiz quadrada de x sem usar diferenças numéricas finitas por meio do algoritmo babilônico. Ele também discute o uso de tipos em Julia para computação eficiente e simplificação do processo de retropropagação com matrizes de bloco. No geral, Edelman enfatiza a importância da álgebra linear para cálculos matemáticos e seu papel na compreensão de fenômenos complexos.
MIT 6.172 Engenharia de desempenho de sistemas de software, outono de 2018 - 1. Introdução e multiplicação de matrizes
1. Introdução e Multiplicação de Matrizes
Neste vídeo do YouTube intitulado "1. Introdução e multiplicação de matrizes", o palestrante discute a importância da engenharia de desempenho e como ela evoluiu ao longo do tempo. Usando o exemplo da multiplicação de matrizes, o palestrante mostra como as técnicas de codificação e as especificações da máquina podem ter um grande impacto no desempenho. A discussão abrange tópicos como ordem de loop, uso de cache e programação paralela. O palestrante também explora maneiras de otimizar o código para diferentes processadores e cálculos aritméticos. No geral, o vídeo fornece informações valiosas sobre o mundo da engenharia de desempenho e suas aplicações práticas nos sistemas de computação modernos.
Aula 2. Regras da Bentley para otimizar o trabalho
2. Regras da Bentley para otimizar o trabalho
Este vídeo do YouTube discute várias técnicas de otimização para programas de computador. As regras da Bentley para otimizar o trabalho são apresentadas e as otimizações são agrupadas em estruturas de dados, loops, lógica e funções. Diferentes técnicas como valores de codificação, aumento da estrutura de dados, pré-computação, cache e utilização de matrizes esparsas são discutidas. O palestrante também aborda os benefícios de usar uma representação de matriz esparsa para gráficos, otimização lógica e otimização de detecção de colisão em programas gráficos. A implementação dessas técnicas de otimização auxilia na redução do tempo de execução dos programas, tornando-os mais eficientes.
A segunda parte do vídeo cobre várias categorias de técnicas de otimização, incluindo loop hoisting, uso de sentinelas em loops, desenrolamento e fusão de loop e função inlining. O palestrante desaconselha a otimização prematura e enfatiza a importância de manter a correção e usar testes de regressão. O vídeo também descreve as Regras da Bentley para otimizar o trabalho, um guia de seis etapas para aumentar a produtividade e atingir metas de maneira eficiente. Essas regras incluem estabelecer metas claras, dividir tarefas, planejar e organizar, priorizar tarefas, minimizar distrações e revisar e ajustar regularmente a abordagem de cada um.
Aula 3. Bit Hacks
3. Hacks de bits
Este vídeo do YouTube cobre uma variedade de tópicos de manipulação de bits, incluindo representação binária, complemento de dois, operadores bit a bit, troca de variáveis sem uma variável temporária e otimização de código. O vídeo demonstra vários truques de bits, como encontrar o mínimo de dois inteiros sem usar instruções if-else e como trocar dois inteiros sem usar uma variável temporária. O palestrante discute ramificações imprevisíveis e apresenta um truque de bit mínimo sem ramificação para quando ramificações previsíveis não estão disponíveis e mostra como os hacks de bits podem otimizar o código substituindo operações caras, como divisão, por operações bit a bit simples. O vídeo também discute a sequência de De Bruijn e sua aplicação na solução de problemas como o problema de N Queens.
A segunda parte discute a solução do problema N Queens usando vetores de bits e contando eficientemente o número de bits 1 em uma palavra binária. Backtracking é usado para implementar o problema N Queens, e vetores de bits são usados para representar a placa de forma eficiente. Três verificações são descritas para colocar com segurança uma rainha no problema de N Rainhas, e um método para contar o número de bits 1 em uma palavra, eliminando recursivamente o bit 1 menos significativo, é apresentado. Além disso, é discutido o uso de pesquisa de tabela e manipulação de registro para contar o número de bits 1. O vídeo termina com uma demonstração de uma abordagem de divisão e conquista para contar 1 bits que tem um desempenho proporcional ao log base dois do comprimento da palavra. Recursos para aprendizagem adicional também são fornecidos.
Aula 4. Linguagem Assembly e Arquitetura de Computador
Aula 4. Linguagem Assembly e Arquitetura de Computador
Este vídeo fornece uma visão geral abrangente da linguagem assembly e da arquitetura do computador. A linguagem assembly é uma interface importante para otimizar o desempenho do código, e entender a arquitetura do computador é essencial para dominar a linguagem assembly. O palestrante explica a história da arquitetura x86 64 e seu desenvolvimento, seus principais registradores, tipos de dados, modos de endereçamento de memória e arquitetura do conjunto de instruções, incluindo pilhas, lógica inteira e binária, lógica booleana e sub-rotinas. Eles também discutem extensões como zero e extensão de sinal e vários modos de endereçamento em linguagem assembly. Além disso, o vídeo discute tipos de ponto flutuante, vetores e unidades vetoriais, instruções tradicionais e SSE e recursos de design de arquitetura de computador, como processamento superescalar, execução fora de ordem e previsão de ramificação.
O vídeo também aborda vários tópicos relacionados à linguagem assembly e arquitetura de computadores. Um dos temas centrais é o paralelismo de nível de instrução (ILP) e as paradas de pipeline, que são causadas por perigos como dependências de dados. O palestrante discute as dependências de dados verdadeiras, anti e de saída e como os processadores superescalares podem explorar mais paralelismo no hardware para executar várias instruções ao mesmo tempo. No entanto, para evitar riscos, os arquitetos implementaram estratégias como renomear e reordenar, bem como a execução especulativa para adivinhar o resultado de uma ramificação e executá-la antecipadamente. O palestrante incentiva o público a entender esses métodos para compreender melhor as otimizações de software.
Aula 5. C para assembléia
Aula 5. C para assembléia
Nesta parte do vídeo, é discutida a importância de entender C para linguagem assembly, juntamente com como o código C é implementado em linguagem assembly usando um compilador. O foco está especificamente em como o LLVM IR é convertido em assembly na convenção de chamada x86 64 do Linux. O apresentador explica os componentes básicos do LLVM IR e como as construções na linguagem de programação C são traduzidas para o LLVM IR. O vídeo também aborda o layout da memória virtual, a questão da coordenação de chamadas de função entre várias funções e o uso da convenção de chamada do Linux x86 64 de dois ponteiros - o BP e o SP - para gerenciar todos os quadros de pilha.
O vídeo também explica as estratégias para manter os estados de registro em programação C para Assembly, como salvar registros como caller-save ou callee-save, e como a convenção de chamada x86 evita o desperdício de trabalho. Ele aborda como as chamadas de função funcionam em C e assembly, discutindo o processo de salvar argumentos e variáveis locais na pilha, bem como a otimização comum de usar o ponteiro da pilha em vez do ponteiro base. O vídeo também mostra o processo de compilação do LV miR em código assembly, discutindo o prólogo da função, salvando registradores, manipulando condições e convertendo código C em código assembly usando um gráfico de fluxo de controle. Finalmente, fala sobre a função epílogo usada para restaurar registros antes de retornar resultados.
Aula 6. Programação Multicore
Aula 6. Programação Multicore
Esta videoaula discute a programação multi-core e o surgimento de processadores multi-core devido à Lei de Moore e ao fim do escalonamento das frequências de clock. O palestrante explica o problema de densidade de energia enfrentado pelos processadores e como isso levou à adição de vários núcleos aos chips para acompanhar a Lei de Moore. A palestra também aborda os fundamentos dos protocolos de coerência de cache em hardware de memória compartilhada e plataformas de simultaneidade como Pthreads, TBB, OpenMP e Silk, que fornecem abstrações para programação paralela. Os prós e contras de cada plataforma são discutidos e demonstrados com exemplos de implementação de programas Fibonacci. O vídeo fornece uma visão abrangente da programação multi-core e os desafios e soluções enfrentados pelos programadores.
O vídeo também cobre vários aspectos do Silk, uma ferramenta de abstração para manipulação de processamento paralelo. O palestrante discute tópicos como silk for loops aninhados, geração de código assembly, redução usando redutores, agendador e otimização de desempenho. Eles também fornecem uma visão geral do ecossistema Silk e das ferramentas relacionadas, como o higienizador de seda e a escala de seda para depuração e análise de escalabilidade, respectivamente. A principal conclusão é que escrever programas paralelos para processadores multicore pode ser um desafio, mas o Silk simplifica o processo lidando com tarefas complexas com eficiência, dando aos programadores mais controle sobre a execução de seu código.
Aula 7. Raças e Paralelismo
Aula 7. Raças e Paralelismo
O vídeo cobre uma variedade de tópicos relacionados a raças, paralelismo e dags de computação na programação Silk. Alguns dos principais conceitos abordados incluem as instruções de geração e sincronização para execução simultânea, a importância de evitar condições de corrida e o uso do detector de corrida do Silk para identificá-las. O vídeo também aborda a lei de Amdahl, a lei do trabalho e a lei do span como formas de quantificar a quantidade de paralelismo em um programa, junto com maneiras de analisar o trabalho e o alcance dos cálculos. O potencial de aceleração e paralelismo dos algoritmos de ordenação paralela e o conceito de teoria do escalonamento também são discutidos, com foco no teorema do escalonador guloso. No geral, o vídeo fornece informações valiosas para entender e otimizar o desempenho do programa na programação Silk.
O vídeo explica os corolários do limite do escalonador ganancioso, que essencialmente afirma que qualquer escalonador ganancioso atinge uma aceleração linear quase perfeita, desde que T1/Tinfinity seja maior ou igual a P^2. O agendador de seda, que usa um agendador de roubo de trabalho, pode atingir uma aceleração linear quase perfeita, desde que o número de processadores seja muito menor que T1/Tinfinity. O sistema silk runtime funciona mantendo uma plataforma de trabalho de fios prontos e manipula a parte inferior da plataforma como uma pilha. O vídeo também discute o Cactus Stack, que permite múltiplas visualizações de pilhas em paralelo e possibilita chamadas de funções paralelas. O limite superior do espaço de pilha exigido pela execução do processador P é geralmente muito mais flexível do que a quantidade real necessária, pois cada processador pode não precisar percorrer todo o caminho do gráfico de computação toda vez que rouba trabalho.