![]() |
Sistemas de Computação |
Semana: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
Última
Modificação:22 Mai 2021
departamento de informática |
|
Nota 1: Os sumários das aulas que já ocorreram estão
a preto, enquanto as propostas de sumário para as sessões seguintes estão a cinzento.
Sempre que haja documentação a disponibilizar pertinente para uma sessão que
ainda não decorreu, essa indicação deixa de estar a cinzento.
Nota 2: As referências nos sumários a textos de
consulta estão abreviadas para Sta (livro/resumo de Stallings, sugerido
como complementar em anos anteriores), Bry (livro/resumo de
Bryant), e P&H (livro de Patterson & Hennessy ); são
normalmente seguidas do respectivo capítulo/secção, e quando existe em formato
electrónico é indicado o respectivo link.
Semana 1
18-fev-
21
(T1, T2)
Metodologia de funcionamento da disciplina com
análise ao website da UC (em
http://gec.di.uminho.pt/miei/sc/): princípios básicos, modo de funcionamento e
respetivo planeamento,
elementos e modelos de avaliação.
Introdução aos
conceitos de "computador" e de "informação" no contexto de um computador.
Sistemas de numeração e conversão de bases.
(Notas de estudo: slides
de introdução à matéria (ISC_1_short),
contendo já a matéria a lecionar na próxima aula; notas de
estudo relativos à introdução aos sistemas de computação (ISC, Cap.1) e ainda notas sobre
representação
binária de números;
o vídeo com a
gravação da aula está colocado no BB; enunciado do
TPC1, para ser
submetido no BB no local associado a cada um dos turnos, impreterivelmente até
24 horas antes do início da sessão PL da semana seguinte).
19-fev-
21
(PL03, PL04, PL05, PL06, PL07, PL09, PL10, PL12)
Não houve aula ainda.
22-fev-
21
(PL01, PL02, PL08, PL11)
Não houve aula ainda.
23-fev-
21
(T1, T2)
Representação binária de valores numéricos positivos e negativos: sinal e amplitude,
complemento para 1, complemento para 2, por excesso.
(Notas de estudo: os slides e os vídeos disponibilizados na semana anterior)
Semana 2
25-fev- 21
(T1,
T2)
Representação binária de valores reais em vírgula flutuante: noção básicas e vantagens
duma normalização;
apresentação da norma IEEE 754 na representação
de valores binários em vírgula flutuante..
(Notas de estudo: slides completos sobre representação de informação (ISC_1), contendo ainda matéria da próxima aula;
o vídeo com a
gravação da aula está colocado no BB;
enunciado do
TPC2, para ser entregue,
impreterivelmente, até 24 horas antes do
início da sessão PL da semana seguinte)
26-fev- 21
(PL03, PL04, PL05, PL06,
PL07, PL09, PL10, PL12)
Resolução de exercícios com binários inteiros.
01-mar- 21
(PL01, PL02,
PL08, PL11)
Resolução de exercícios com binários inteiros.
02-mar- 21
(T1, T2)
Representação da informação não numérica no computador, utilizando bits: texto e respectivos alfabetos (referência aos códigos Baudot, Braille, ASCII 7/8 bits e UNICODE),
codificação de informação audiovisual com introdução a técnicas de compactação,
desde imagens estáticas a imagens animadas e ao som; codificação dos comandos
de controlo de um processador.
Análise sucinta da estrutura interna dum
computador elementar, nomeadamente a estrutura e funções do processador: a unidade de controlo, o
conjunto de registos e as unidades funcionais.
(Notas de estudo: os mesmos slides da aula anterior e ainda os slides
ISC_2;
texto
ISC (Cap.2); referências complementares: Sta
Ch1.1 e 1.2 e
Ch 3.1, 3.2)
Semana 3
04-mar-21
(T1,
T2)
Introdução aos níveis de abstracção presentes num computador (o nível HLL, o
nível da linguagem assembly e o da linguagem máquina).
Análise detalhada da execução de uma instrução em linguagem máquina: a
busca de uma instrução à memória, caracterizando os barramentos de endereços,
controlo e de dados, a atualização do apontador para a próxima instrução (IP),
a descodificação duma instrução e a sua execução (incluindo a eventual busca de
operando(s) à memória.
(Notas de estudo: slides
ISC_3;
enunciado
do
TPC3, cuja resolução deverá ser
entregue, impreterivelmente,
até 24 horas antes do início da sessão PL da semana seguinte;
ficheiro
TPC1r com os resultados dos exercícios
propostos em TPC1)
05-mar-21
(PL03, PL04, PL05, PL06,
PL07, PL09, PL10, PL12)
Análise crítica da resolução de exercícios com valores em vírgula
flutuante.
08-mar-21
(PL01,
PL02, PL08, PL11)
Análise crítica da resolução de exercícios com valores em vírgula
flutuante.
09-mar-21
(T1, T2)
Análise do processador ao nível da arquitetura do instruction set
(ISA): (i) introdução às operações num processador, com análise do
n.º de operandos em cada instrução e à localização de operandos (escalares em
registos, e estruturados em memória), (ii) registos
visíveis ao programador (em arquiteturas RISC e no IA-32), (iii) modos de
acesso aos operandos (em arquiteturas RISC e no IA-32), (iv) tipos de
instruções presentes num processador (para transferência de informação,
operações aritméticas e lógicas, para controlo do fluxo de execução), (v)
análise de formatos de instruções (no IA-32 e em processadores RISC, MIPS e ARM), (vi) ordenação em memória dos bytes
presentes num número constituído por vários bytes (little-endian,
big-endian).
(Notas de estudo: texto ISC (Cap. 3, 4.1 a 4.5, 5,1 a 5.3 e 5.7), Bry (Ch.1.5 e
1.6), Sta (Ch 3.2); a bibliografia de base iniciada nesta aula e com continuação
para as próximas aulas sobre o nível ISA segue quase exclusivamente o livro CSAPP, com destaque para o
Ch.3; as noções apresentadas e analisadas nos dois primeiros capítulos do
livro foi sendo coberta pelo texto entretanto disponibilizado (ISC), enquanto
esta aula e a seguinte seguem essencialmente as secções 3.4 e 3.5 do livro; o
ficheiro electrónico com a versão preliminar dos três primeiros capítulos do
livro encontra-se disponível, para estudo,
aqui, 1.51MiB.
Slides:
ISC_4 e o instruction set do IA-32
numa página
A4;
o vídeo com a
gravação da aula está colocado no BB;
)
Semana 4
11-mar-21
(T1,
T2)
Análise do nível ISA do IA-32 em Linux: modelo da
arquitectura ISA do IA-32 no desenvolvimento de programas, com a visão do par
processador-memória na perspectiva de um programador.
(Notas de estudo: slides ISA_1
; ficheiro
TPC2r com os resultados dos exercícios
propostos em TPC2
).
12-mar-21
(PL03, PL04, PL05, PL06,
PL07, PL09, PL10, PL12)
Análise crítica da resolução de exercícios de codificação binária de
instruções do ISA-16 e da análise de tráfego nos barramentos entre o CPU e a
memória na execução de instruções.
Treino das capacidades de visualização de conceitos sobre sistemas de
computação, através de um exercício experimental online com estudantes-atores:
5 atores a representar a execução de instruções em linguagem máquina (corpo de
uma função em C compilada para IA-16).
15-mar-21 (PL01,
PL02, PL08, PL11)
Análise crítica da resolução de exercícios de codificação binária
de instruções do ISA-32 e da análise de tráfego nos barramentos entre o CPU e a
memória na execução de instruções.
Treino das capacidades de visualização de conceitos sobre sistemas de
computação, através de um exercício experimental online com estudantes-atores: 5 atores representaram a execução de instruções em linguagem máquina (corpo de
uma função em C compilada para IA-16).
16-mar-21
(T1, T2)
Análise do nível ISA do IA-32 em Linux: modos de especificação de operandos e modos de os
aceder nas instruções mais comuns de transferência de informação e em operações
aritméticas/lógicas. Exemplo detalhado de utilização de um modo de endereçamento
simples à memória.
(Notas de estudo: slides
ISA_2
).
18-mar-21
(T1,
T2)
Análise do nível ISA do IA-32 em Linux: instruções específicas para
manuseamento de apontadores e para controlo do fluxo de execução de instruções
(conceito de códigos de condição e estrutura da codificação de jumps);
técnicas de codificação da estrutura de controlo if-else (e sua generalização) presente em C, com análise detalhada de um exemplo.
(Notas de estudo: Bry (Ch 3.6), e primeira parte dos slides
ISA_3 ;
texto do enunciado do
TPC4 (e respectivo guião
laboratorial), cuja resolução deverá ser entregue no BB)
19-mar-21
(PL03, PL04, PL05, PL06,
PL07, PL09, PL10, PL12)
Continuação do exercício experimental da semana anterior.
22-mar-21 (PL01,
PL02, PL08, PL11)
Continuação do exercício experimental da semana
anterior.
23-mar-21
(T1, T2)
Análise do nível ISA do IA-32 em Linux:
técnicas de codificação das estruturas de controlo do-while, while, for
(e sua generalização) presentes em C, com análise detalhada de um exemplo.
(Notas de estudo: Bry (Ch 3.6), e parte restante dos slides
ISA_3; ficheiro
TPC3r reformulado com os
resultados dos exercícios e do guião teatral
propostos em TPC3.
Notas adicionais para as sessões laboratoriais da próxima semana
(TPC4): (i) a plataforma computacional a usar sempre
será um servidor Unix (Linux) com as ferramentas GCC adequadas para SC, acessível
remotamente (ler o guião em TPC4 para saber como), (ii) os códigos de acesso
ao servidor remoto foram já remetidos por email a todos os inscritos na
UC, e (iii) disponibiliza-se
aqui uma introdução ao ambiente Unix.)
Semana 6
25-mar-21
(T1, T2)
Evolução das tecnologias e eficiência: caracterização das arquiteturas RISC;
oportunidades para melhorar o desempenho de sistemas de computação: com
introdução de paralelismo ao nível da instrução (paralelismo desfasado, pipeline;
ao nível dos dados, computação vetorial; paralelismo "real", VLIW e
super-escalaridade) e no acesso à memória e sua hierarquização (interleaving,
data-width, cache).
Aparecimento e evolução da arquitectura IA-32 nos processadores da Intel, do
i4004 ao Skylake (Intel 64).
(Notas de estudo: novo conjunto de slides da série ISC,
ISC_5_short
que poderá ser
complementado com vários sites na Web a pesquisar a partir do Wikipedia;
texto do enunciado do
TPC5, cuja resolução deverá
ser entregue no BB)
26-mar-21 (PL03,
PL04, PL05, PL06, PL07, PL09, PL10, PL12)
Introdução aos níveis de abstração dum computador, em ambiente laboratorial
em Linux/IA-32, e respectivos mecanismos de conversão e análise (gcc,
objdump,
gdb).
05-abr-21 (PL01,
PL02, PL08, PL11)
Não houve aula: semana reservada às avaliações
intercalares.
06-abr-21
(T)
Teste
ensaio (Teste 1).
Semana 7
08-abr-21
(T11,T2)
Não houve aulas: semana reservada às
avaliações intercalares.
09-abr-21 (PL03,
PL04, PL05, PL06, PL07, PL09, PL10, PL12)
Não houve aulas: semana reservada às
avaliações intercalares.
12-abr-21 (PL01,
PL02, PL08, PL11)
Introdução aos níveis de abstração dum computador, em ambiente laboratorial
em Linux/IA-32, e respectivos mecanismos de conversão e análise (gcc,
objdump,
gdb).
13-abr-21
(T1, T2)
Evolução das tecnologias e eficiência: do
modelo Tick-Tock de desenvolvimento de processadores da Intel ao
novo modelo Process-Architecture-Optimization; evolução dos chips
manycore da Intel, do SCC ao Xeon Phi Knights Corner; a concorrência da
Intel nos PU-chips para servidores HPC (AMD Epyc, ARM
(Notas
de estudo: versão estendida dos slides da aula anterior,
ISC_5.)
Semana 8
15-abr-21
(T1,T2)
Análise do nível ISA do IA-32 em Linux: introdução às propriedades das funções
em C para análise do suporte requerido ao nível do ISA, incluindo o contexto na
stack a ser construído.
(Notas de estudo: Bry (Ch 3.7),
primeiros 20 slides no ficheiro
ISA_4 .
Texto do enunciado do
TPC6, cuja resolução deverá
ser entregue no BB; ficheiro
TPC4r com os resultados dos exercícios
propostos.)
16-abr-21
(PL03,
PL04, PL05, PL06, PL07, PL09, PL10, PL12)
Resolução de exercícios do TPC5 (operações e acessos a
operandos, e instruções de salto, do IA-32 em Linux).
19-abr-21 (PL01,
PL02, PL08, PL11)
Resolução de exercícios do TPC5 (operações e acessos a
operandos, e instruções de salto, do IA-32 em Linux).
20-abr-21
(T1, T2)
Análise do nível ISA do IA-32 em Linux: exemplo com análise
detalhada da estrutura do código e dos contextos para suporte à invocação e
regresso de procedimentos/funções em HLL (C em particular); análise da stack
no caso de funções aninhadas e recursivas.
(Notas de estudo: Bry (Ch 3.7), restantes 20 slides no ficheiro
ISA_4.)
Semana 9
22-abr-21
(T1, T2)
Análise do nível ISA do IA-32 em Linux: revisão dos modelos Intel
64 e RISC versus CISC; análise comparativa do modelo de implementação de funções
numa arquitectura Intel 64 e em duas arquiteturas RISC (MIPS e ARM) versus IA-32.
(Notas de estudo: primeiros 17 slides de
ISA_5 e Bry
(Ch 3.8 e 3.9).
Texto do enunciado do
TPC7,
cuja resolução deverá
ser entregue no BB; ficheiro
TPC5r com os resultados dos exercícios
propostos.)
23-abr-21 (PL03,
PL04, PL05, PL06, PL07, PL09, PL10, PL12)
Análise laboratorial de código C compilado por ferramentas da GNU
em Linux para o IA-32 (TPC6), contendo acesso a uma função e uma estrutura de controlo
while (com utilização do depurador
gdb).
26-abr-21
(PL01,
PL02, PL08, PL11)
Análise laboratorial de código C compilado por ferramentas da GNU
em Linux para o IA-32 (TPC6), contendo acesso a uma função e uma estrutura de controlo
while (com utilização do depurador
gdb).
27-abr-21
(T1, T2)
Análise do nível ISA do IA-32 em Linux: análise comparativa do modelo de
implementação de funções numa arquitetura RISC (ARM) versus IA-32.
Análise do nível ISA do IA-32 em Linux: impacto da estruturação
da informação numa HLL na execução desse código, organização em memória e
métodos de acesso e manipulação de dados estruturados em C, com respectiva
análise da codificação para assembly (arrays uni-dimensionais,
vulgo vetores).
(Notas de estudo:
restantes slides de slides de
ISA_5 e primeiros slides de
ISA_6.)
Semana 10
29-abr-21
(T1, T2)
Análise do nível ISA do IA-32 em Linux: organização em memória e
métodos de acesso e manipulação de dados estruturados em C, com respectiva
análise da codificação para assembly (arrays multi-dimensionais, structures e
unions).
(Notas de estudo: Bry (Ch 3.7), e resto dos slides
ISA_6;
Bry (Ch. 3.15, Ch. 5.1 a 5.6, Ch. 9.0 e 9.3);
sugere-se a leitura de P&H (Ch2.2, e 2.3).
Texto do enunciado do
TPC8, cuja resolução deverá
ser entregue no
BB;
ficheiro
TPC6r com os resultados dos exercícios
propostos.)
30-abr-21 (PL03,
PL04, PL05, PL06, PL07, PL09, PL10, PL12)
Análise laboratorial de código C compilado por ferramentas da GNU
em Linux para o IA-32 (TPC7), contendo acesso a uma função e uma estrutura de controlo
while (com utilização do depurador gdb).
(Notas de estudo: o manual de utilização do depurador
disponibilizado pela GNU está em
Debugging
with DBG
, mas
existe uma cópia local duma versão mais antiga em PDF
aqui (2.04MB))
03-mai-21
(PL01,
PL02, PL08, PL11)
Análise laboratorial de código C compilado por ferramentas da GNU
em Linux para o IA-32 (TPC7), contendo acesso a uma função e uma estrutura de controlo while (com utilização do depurador gdb).
(Notas de estudo: o manual de utilização do depurador
disponibilizado pela GNU está em
Debugging
with DBG
, mas
existe uma cópia local duma versão mais antiga em PDF
aqui (2.04MB))
04-mai-21
(T1, T2)
Avaliação de desempenho na execução de programas: objetivos e metodologias na
avaliação de desempenho na execução de programas; potencialidades e limitações
dos compiladores; análise de técnicas de otimização de código independentes da
arquitetura do processador (code motion, strength reduction,
partilha de sub-expressões); métrica de avaliação de desempenho de
aplicações de processamento numérico de arrays, nomeadamente as componentes para
o cálculo dos Ciclos Por Elemento (CPE); introdução do tipo de dados abstracto (ADT) e de um
exemplo de operação com elementos de um array para se introduzir
melhorias de eficiência.
(Notas de estudo:
slides
AvDes_1 e
AvDes_2 (apenas foi coberta parte do material neste 2º
conjunto de slides).
O tema Avaliação de Desempenho vem integral e detalhadamente descrito no Cap. 5
do livro Bry, incluindo os exemplos que se encontram nos slides; à semelhança
das referências anteriores a capítulos e secções deste livro, a versão inicial
do livro que está disponível em formato eletrónico descreve com bastante
pormenor todo o conteúdo dos slides das aulas teóricas, pelo que se
recomenda a sua leitura).
Semana 11
06-mai-21
(T)
Avaliação de desempenho na execução de programas: estudo
do exemplo
combine
e introdução de técnicas de otimização independentes da máquina; introdução aos
fatores da arquitetura que maior impacto têm no desempenho, indispensável à
compreensão das técnicas de otimização dependentes da máquina: pipeline,
superescalaridade, hierarquia de memória; organização hierárquica da memória: o
princípio da localidade, conceitos associados à cache e seu desempenho,
regras de codificação orientada ao desempenho.
(Notas de estudo: conclusão do material dos slides
AvDes_2 e primeiros slides de
AvDes_3.
Texto do enunciado do
TPC9, cuja resolução deverá
ser entregue no BB; ficheiro
TPC7r com os resultados dos exercícios
propostos.)
07-mai-21
(PL03,
PL04)
Análise laboratorial do código C compilado por ferramentas da GNU em
Linux para o IA-32 (TPC8), contendo acesso a função e a estrutura de controlo
for, com
utilização do depurador
gdb.
10-mai-21
(PL01,
PL02)
Análise laboratorial do código C compilado por ferramentas da GNU em
Linux para o IA-32 (TPC8), contendo acesso a função e a estrutura de controlo
for, com
utilização do depurador
gdb.
11-mai-21
(T)
Avaliação
de desempenho na execução de programas: introdução
à evolução das arquiteturas para modelos manycore; introdução ao modelo de representação
de um par processador-memória (no Intel P6), com destaque para os modelos de
representação do pipeline e da superescalaridade.
(Notas de estudo:
os restantes slides de
AvDes_3
Semana 12
13-mai-21
(T)
Avaliação
de desempenho na execução de programas: análise de técnicas de otimização
dependentes da máquina, nomeadamente loop unroll, com e sem a introdução de
paralelismo, e de hierarquia de memória; a análise do comportamento dum Intel P6 em
operações iterativas.
(Notas de estudo: slides
AvDes_4.)
14-mai-21
(PL03,
PL04)
TPC9: execução em ambiente laboratorial de funções com deficiências (no IA-32 em Linux) e respectiva análise do
código gerado pelo compilador.
17-mai-21
(PL01,
PL02)
TPC9: execução em ambiente laboratorial de funções com deficiências (no IA-32 em Linux) e respectiva análise do
código gerado pelo compilador.
18-mai-21
(T)
Outras
técnicas de otimização de desempenho na execução de programas: técnicas já
exploradas pelo gcc; papel dos profilers na análise de componentes de
código e sua aplicação na caracterização das partes críticas de desempenho de
código.
Apresentação e discussão da Lei de Amdahl.
(Notas de estudo: slides
AvDes_5.
Ficheiro
TPC9r com os resultados dos exercícios
propostos.)