• Nenhum resultado encontrado

Resumo das aulas anteriores

N/A
N/A
Protected

Academic year: 2021

Share "Resumo das aulas anteriores"

Copied!
60
0
0

Texto

(1)

Resumo das aulas anteriores

Lu´ıs Nogueira

luis@dei.isep.ipp.pt

Departamento Engenharia Inform ´atica Instituto Superior de Engenharia do Porto

(2)

Instruction Set Architecture

• Hardware controlado através de instruções • Conjunto de instruções define arquitectura

◦ Interface entre hardware e software

◦ Exemplos: MIPS, SPARC, PA-RISC, ix86, Alpha • Balanço delicado

◦ No de instruções fornecidas ◦ Formato das instruções

◦ No de ciclos de relógio por instrução ◦ Velocidade do ciclo de relógio

• 2 tipos de abordagens

◦ Complex Instruction Set Computer (CISC) ◦ Reduced Instruction Set Computer (RISC)

(3)

MIPS

• Simplicidade e regularidade

• Todas as instruções possuem o mesmo tamanho (32 bits) • Possui 32 registos disponíveis

• Instruções aritméticas exigem sempre 3 registos • Só duas instruções acedem à memória (lw,sw)

• Todas as instruções são convertidas em 1 de 3 formatos ◦ Formato R, I ou J

◦ Mantendo posições dos campos dos registos

(4)

Desenho do processador

• ISA tem enorme impacto no desenho do processador • Regularidade e simplicidade do MIPS facilita desenho

• Que componentes vamos precisar?

◦ Memória de instruções para armazenar o programa ◦ Registos para armazenar valores

◦ ALU para operação artiméticas/lógicas ◦ Incrementador para avançar PC

◦ Memória de dados para armazenar estruturas de dados

(5)

Desenho do processador

• Como executar uma instrução?

◦ Obter instrução de 32 bits apontada por PC

◦ Ler 1 ou 2 registos, usando campos das instruções

sempre nas mesmas posições

◦ Próximos passos dependem da instrução em causa

◦ Mas em MIPS são muito semelhantes!

• Todas usam a ALU depois de lerem registos ◦ Aritméticas e lógicas por razões óbvias

◦ Acesso à memória para calcular endereço (base +

deslocamento)

◦ Salto condicional para comparar valores dos registos

(6)

Desenho do processador

• Depois de usar a ALU diferem um pouco

◦ lw lê conteúdo da memória no endereço calculado e

escreve no registo destino

◦ sw escreve valor do registo no endereço calculado

◦ Aritméticas precisam escrever resultado no registo

destino

◦ Salto condicional precisa determinar se salta ou não • Nesse caso temos de conseguir

◦ Decidir quais os componentes a usar

◦ Controlar o funcionamento desses componentes

• Como?

◦ Usando sinais de controlo que dependem do tipo de

instrução

(7)

Sinais de controlo

• Controlar funcionamento dos componentes

◦ ALU pode realizar uma de várias instruções ◦ Instrução pode ler ou escrever na memória ◦ Instrução pode escrever no registo

• Seleccionar input (em conjunto com multiplexador)

◦ PC pode avançar para a próxima instrução ou saltar ◦ Registos actualizados nas operações

aritméticas/lógicas ou lw

◦ ALU recebe endereço ou registo como 2o argumento ◦ Registo destino diferente nos formatos R e I

(8)

Arquitectura do processador

PAT05F17.eps Read register 1 Read register 2 Write register Write data Write data Registers ALU Add Zero Read data 1 Read data 2 Sign extend 16 32 Instruction [31–0] ALU result Add ALU result M u x M u x M u x Address Data memory Read data Shift left 2 4 Read address Instruction memory PC 1 0 0 1 0 1 M u x 0 1 ALU control Instruction [5–0] Instruction [25–21] Instruction [31–26] Instruction [15–11] Instruction [20–16] Instruction [15–0] RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Control Resumo – p. 8

(9)

Melhorar performance com pipelining

• Objectivo

◦ Melhorar performance global sem diminuir tempo de

execução da instrução

• Como conseguir?

◦ Dividir execução da instrução em fases ◦ Ciclo de relógio menor

• Tempo de execução de uma fase em vez de instrução

completa

◦ Todas as instruções demoram mesmo número de ciclos ◦ Sobrepor processamento de várias instruções em fases

distintas

(10)

Divis ˜ao da instruc¸ ˜ao em fases

Instruction Fetch instrução é transferida da memóriaInstruction Decode tipo e operandos são determinadosExecute operação executada/endereço calculado

Memory Access acesso a memória em lw/swWrite Back resultado escrito em registo

200 400 600 800 1000

Time

add $s0, $t0, $t1 IF ID EX MEM WB

PAT06F04.eps

(11)

Sobreposic¸ ˜ao de execuc¸ ˜ao

Program execution order (in instructions) lw $1, 100($0) lw $2, 200($0) lw $3, 300($0)

Time (in clock cycles)

CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC7

IM Reg ALU DM Reg

IM Reg ALU DM Reg

IM Reg ALU DM Reg

PAT06F10.eps

(12)

Ciclo ´

unico vs Pipelining

Program execution order (in instructions) lw $1, 100($0) lw $2, 200($0) lw $3, 300($0) Time 200 400 600 800 1000 1200 1400 1600 1800 Instruction

fetch Reg ALU

Data

access Reg

Instruction

fetch Reg ALU

Data access Reg Instruction fetch 800 ps 800 ps 800 ps Program execution order (in instructions) lw $1, 100($0) lw $2, 200($0) lw $3, 300($0) Time 200 400 600 800 1000 1200 1400 Instruction

fetch Reg ALU

Data access Reg PAT06F03.eps Instruction fetch Instruction fetch

Reg ALU Data

access Reg

Reg ALU Data

access Reg

200 ps

200 ps

200 ps 200 ps 200 ps 200 ps 200 ps

(13)

Implementac¸ ˜ao de pipelining

• No mesmo ciclo de relógio

◦ Instruções em fases distintas ◦ Partilham fluxo de informação

• Necessário armazenar informação intermédia • Adicionar registos entre estágios do pipeline

IF/ID informação da instrução que passa de IF para IDID/EX informação da instrução que passa de ID para EXEX/MEM informação da instrução que passa de EX para

MEM

MEM/WB informação da instrução que passa de MEM

para WB

(14)

Arquitectura do processador com pipelining

WB M EX WB M WB M e m W ri te PCSrc M e m to R e g MemRead Add Address Instruction memory Read register 1 Read register 2 Instruction [15–0] Instruction [20–16] Instruction [15–11] Write register Write data Read data 1 Read data 2 Registers Address Write data Read data Data memory Add Add result ALU ALU result Zero Shift left 2 Sign extend PC 4 ID/EX IF/ID EX/MEM MEM/WB PAT06F27.eps 16 32 6 ALU control RegDst ALUOp ALUSrc R e g W In s tr u c ti o n ri te Branch Control 0 M u x 1 0 M u x 1 0 M u x 1 0 M u x 1 Resumo – p. 14

(15)

Problemas em pipelining

• Objectivo manter pipeline cheio (IPC = 1) • No entanto

◦ Dependências de dados entre instruções sequenciais ◦ Acesso à memória tem latência elevada (lw,sw)

◦ Instruções de salto alteram fluxo de execução

• Próxima instrução não pode executar no próximo ciclo de

relógio

• Como optimizar funcionamento do pipeline? ◦ Melhorando compilador

◦ Adicionando hardware ao pipeline

(16)

Depend ˆencias entre instruc¸ ˜oes

Program execution order (in instructions) sub $2, $1, $3 and $12, $2, $5 or $13, $6, $2 add $14, $2, $2 sw $15, 100($2)

Time (in clock cycles)

CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9 PAT06F28.eps IM Reg DM Reg IM Reg DM Reg IM Reg DM Reg IM Reg DM Reg IM Reg DM Reg 10 10 10 10 10/–20 –20 –20 –20 –20 Value of register $2: Resumo – p. 16

(17)

Forwarding - Propagac¸ ˜ao de valores

Program execution order (in instructions) sub $2, $1, $3 and $12, $2, $5 or $13, $6, $2 add $14, $2, $2 sw $15, 100($2)

Time (in clock cycles)

CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9 PAT06F29.eps IM Reg DM Reg IM Reg DM Reg IM Reg DM Reg IM Reg DM Reg IM Reg DM Reg 10 10 10 10 10/–20 –20 –20 –20 –20 Value of register $2: Value of EX/MEM: X X X –20 X X X X X Value of MEM/WB: X X X X –20 X X X X Resumo – p. 17

(18)

Lat ˆencia no acesso `a mem ´

oria

Program execution order (in instructions) lw $2, 20($1) and $4, $2, $5 or $8, $2, $6 add $9, $4, $2 slt $1, $6, $7

Time (in clock cycles)

CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9 PAT06F34.eps IM Reg DM Reg IM Reg DM Reg IM Reg DM Reg IM Reg DM Reg IM Reg DM Reg Resumo – p. 18

(19)

Lat ˆencia no acesso `a mem ´

oria

• Soluções

◦ Compilador

• Reordena instruções

• Instrução seguinte a lw não depende desta

◦ Hardware

Detectar dependência em run time • Inserir estados de espera no pipeline

(20)

Estados de espera

lw $2, 20($1) Program execution order (in instructions) and $4, $2, $5 or $8, $2, $6 add $9, $4, $2 slt $1, $6, $7 Reg IM Reg Reg IM DM CC 1 CC 2 CC 3 CC 4 CC 5 CC 6

Time (in clock cycles)

IM Reg DM Reg IM IM DM Reg IM DM Reg CC 7 CC 8 CC 9 CC 10 DM Reg Reg Reg Reg bubble Resumo – p. 20

(21)

Instruc¸ ˜oes de salto

Reg Program execution order (in instructions) 40 beq $1, $3, 28 44 and $12, $2, $5 48 or $13, $6, $2 52 add $14, $2, $2 72 lw $4, 50($7) Time (in clock cycles)

CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9 PAT06F37.eps IM Reg DM Reg IM Reg DM Reg IM DM Reg IM Reg DM Reg IM Reg DM Reg Resumo – p. 21

(22)

Instruc¸ ˜oes de salto - Soluc¸ ˜oes

• Assumir que salto não é efectuado ◦ Execução sequencial

◦ Se salto for efectuado descartar instruções em IF, ID, EX • Reduzir latência da decisão de salto

◦ Antecipar decisão para ID

◦ Exige alterações do hardware • Branch delay slot

◦ Compilador reordena instruções

◦ Coloca instruções que não dependem do salto até ser

conhecida decisão

(23)

Instruc¸ ˜oes de salto - Soluc¸ ˜oes

• Branch predication

◦ Eliminar saltos condicionais com lógica de predicados • Previsão dinâmica de saltos

◦ Prever resultado do salto baseado na sua história • Execução especulativa

◦ Executar instruções sequencialmente com base na

previsão do salto

◦ Exige detecção do resultado da previsão

◦ Método para descartar efeitos de instruções que não

deviam ter sido executadas (má previsão)

(24)

Como melhorar a performance?

• Equação de performance

tempo CPU = número de instruções IPC * frequência relógio

• Alternativas

◦ Diminuir número de instruções do programa ◦ Aumentar frequência de relógio

◦ Aumentar número de instruções executadas por ciclo • Explorando paralelismo ao nível das instruções

(25)

Superpipelining

• Pipeline mais profunda e maior frequência interna dos

estágios

• Exige maior velocidade da memória • Aumentam problemas originados por

◦ Dependências entre instruções ◦ Latência no acesso à memória ◦ Instruções de salto

• Técnica limitada pela velocidade dos circuitos

◦ Necessidade de armazenar valores intermédios nos

registos do pipeline

• Muito usado em unidades funcionais especializadas

(26)

Arquitecturas multiple-issue

• Replicar componentes funcionais

• Executar instruções em paralelo no mesmo ciclo de relógio • Recorrem à execução especulativa

• Exige bom previsor de saltos

◦ Má previsão perda de performance

• Duas abordagens para a distribuição das instruções ◦ Static multiple-issue

• Compilador

◦ Dynamic multiple-issue

• Hardware

(27)

Dynamic multiple-issue

• Instruction Fetch and Issue Unit

◦ Obtém, descodifica e distribui instruções

◦ Processadores CISC actuais descodificam instruções

complexas em conjunto de instruções simples

• Várias unidades funcionais

Operandos armazenados em reservation station ◦ Execução fora de ordem

• Assim que todos os operandos são conhecidos ◦ Forwarding para unidades que esperam valores ◦ Envio de resultados para commit unit

(28)

Dynamic multiple-issue

• Commit Unit

Register renaming cria registos temporáriosRe-order buffer preserva semântica original do

programa

◦ Instrução de salto foi bem prevista • Validação (commit) dos resultados

• Registos temporários registos do CPU ◦ Instrução de salto mal prevista

• Resultados descartados

(29)

Dynamic multiple-issue

PAT06F49.eps Instruction fetch

and decode unit

Reservation station Reservation station Reservation station Reservation station

Integer Integer Floating point Load/ Store Commit unit In-order issue Out-of-order execute Functional units In-order commit ... ... Resumo – p. 29

(30)

Static multiple-issue

• Transferir para o compilador ◦ Análise de dependências

◦ Distribuição das instruções pela unidades funcionais • Pacotes de n instruções directamente enviado para as

unidades funcionais

◦ Very Large Instruction Word (VLIW) ◦ Sem dependências entre instruções ◦ Pacote pode ter slots vazios

• Reduz substancialmente a complexidade do hardware • Exige compilador poderoso

◦ Transmeta adiciona camada de software no Crusoe

(31)

Very Large Instruction Word

• Exemplo de pacote com 8 instruções ◦ 2 ftp + 2 int + 2 lw/sw + 1 salto

• Pacote sem dependências executado em paralelo

(32)

Fraco paralelismo dos progamas

• Exploração do paralelismo através de execução

super-escalar é limitada

◦ Maioria dos programas não possuem paralelismo

suficiente

• Distribuição dinâmica e optimização do compilador em

conjunto

◦ Em média apenas 2 instruções por ciclo em programas

“normais”

• Resultado

◦ Unidades funcionais sub-aproveitadas

◦ Performance máxima do CPU não é atingida

(33)

Symmetric Multiprocessing (SMP)

• Executar cada processo/thread num CPU diferente ◦ Foco: processadores multi-core

• Escalonamento do S.O. divide processos pelos CPUs

◦ Maior tempo de execução disponível para os processos ◦ Menor tempo de espera pelo time slice

• Continuam a existir recursos comuns

◦ Acessos resolvidos por exclusão mútua

• SMP não optimiza forma como os programas usam o

hardware de cada CPU

• Multiplica tempo de execução para os processos

◦ Assim como o desperdício de hardware por ciclo de

relógio!

(34)

Symmetric Multiprocessing (SMP)

(35)

Simultaneous Multithreading (SMT)

• Explorar paralelismo dentro dos processos ◦ Maximizar utilização do CPU

• Apenas um CPU físico

◦ Fornece dois ou mais processadores lógicos ao S.O. • Exige duplicação apenas dos componentes que

armazenam contexto dos processos

◦ Pequena parte do hardware do CPU

◦ Unidades funcionais partilhadas pelas threads

• Processador executa várias threads simultaneamente ◦ Idealmente resultando na maximização da utilização

das unidades funcionais

◦ Aumentando IPC aumenta performance

(36)

Simultaneous Multithreading (SMT)

(37)

Arquitecturas Vectoriais

• Executar instrução sobre conjunto de dados ◦ Explora paralelismo ao nível dos dados • Registos e unidades vectoriais especializadas

◦ Vectores mantidos em registos especiais no CPU ◦ Instruções aplicadas sobre registos vectoriais

• Aumenta a performance

◦ Aplicações onde paralelismo de dados é fácil de obter

• SIMD usado em ISAs especializadas

◦ MMX/SSE, 3DNow!, AltiVec

(38)

Single Instruction Multiple Data (SIMD)

SISD vs SIMD

(39)

Hierarquia de mem ´

oria

• Problema

◦ Velocidade do CPU muito superior à da memória

• Consequência

◦ Acessos à memória provocam perda de performance

• Usar memória com mesma velocidade do CPU

◦ Técnica e economicamente impraticável

◦ Custo por bit de hardware rápido é muito elevado

◦ Memórias rápidas possuem pequena capacidade

• Como disponibilizar grande capacidade a elevada

velocidade?

(40)

Hierarquia de mem ´

oria

PAT07F01.eps Speed Fastest Slowest Smallest Biggest

Size Cost ($/bit)

Current Technology Highest Lowest SRAM DRAM Magnetic Disk CPU Memory Memory Memory Resumo – p. 40

(41)

Hierarquia de mem ´

oria - Onde colocar um bloco?

• Nas caches existem 3 esquemas

◦ Direct-mapped ◦ Fully associative

◦ n-way Set associative

• Vantagem em aumentar grau de associatividade

◦ Diminui miss rate, diminuindo colisões entre blocos • Desvantagens em aumentar grau de associatividade

◦ Maior custo e tempo de pesquisa

• Colocação de páginas em memória é fully associative ◦ Elevada penalização no acesso ao disco

(42)

Hierarquia de mem ´

oria - Como pesquisar um bloco?

• Em direct-mapped um bloco só pode estar numa entrada • N-way Set associative e Fully associative

◦ Bloco pode estar numa de n entradas

◦ Para pesquisa ser eficiente tem de ser feita em paralelo ◦ Maior custo do hardware

• Elevada latência do disco exige fully associative em

memória

◦ S.O. pode usar algoritmos de pesquisa mais eficientes • Memória virtual usa tabela de páginas

◦ Exige acesso extra à memória ◦ Para ser eficiente exige TLB

(43)

Hierarquia de mem ´

oria - Qual o bloco a substituir?

• Duas técnicas principais em caches associativas • Aleatoriamente

◦ Bloco seleccionado aleatoriamente entre os possíveis

candidatos

• Least Recently Used (LRU)

◦ Bloco substituído é o que não é usado há mais tempo • Na prática LRU é muito custoso com grande

associatividade

◦ Opta-se por LRU aproximado

• Memória virtual usa sempre LRU aproximado ◦ Reference bit

(44)

Hierarquia de mem ´

oria - Como lidar com escritas?

• Duas técnicas principais • Write-through

◦ Bloco escrito na cache e na memória

◦ Cache misses nunca requerem escrita em memória

• Write-back

◦ Bloco apenas escrito na cache numa primeira fase ◦ Só é escrito em memória quando tiver que ser

substituído

◦ Múltiplas escritas na cache uma escrita em memória ◦ Cache misses podem exigir escrita em memória

• Memória virtual usa sempre write-back ◦ Elevada latência do disco

(45)

Computac¸ ˜ao paralela

• Criar computadores poderosos ligando vários CPUs

◦ Custos de desenvolvimento de novos processadores ◦ Limites da tecnologia de semicondutores

• Diminuir tempo de execução dos programas ◦ Aumentar throughput

• Tratar problemas mais complexos

◦ Genética, farmacologia, física, . . . • Sistemas robustos e tolerantes a falhas

(46)

Quest ˜oes

• Como partilhar dados pelos processadores? ◦ Memória partilhada

◦ Passagem de mensagens

• Como coordenar os diversos processadores? ◦ Sincronização (semáforos)

◦ Primitivas send/receive ◦ Protocolos do S.O.

• Como ligar os diversos processadores? ◦ Bus único

◦ Rede de interconexão

(47)

Symmetric Multiprocessors (SMPs)

• Espaço de endereçamento físico global

◦ Fisicamente partilhado através de um bus único ◦ Latência no acesso à memória independente do

processador

• Processadores comunicam através de variáveis partilhadas

em memória

◦ Sincronização através de semáforos ◦ Modelo de programação atractivo

• Cada processador utiliza uma cache individual ◦ Diminuir tráfego no bus partilhado

◦ Mantém cópia de dados partilhados em memória

(48)

Symmetric Multiprocessors (SMPs)

Cache Processor Cache Processor Cache Processor Single bus Memory I/O Resumo – p. 48

(49)

Problema de coer ˆencia das caches

Tempo Evento Cache CPU A Cache CPU B Memória

0 1

1 CPU A lê X 1 1

2 CPU B lê X 1 1 1

3 CPU A escreve 0 em X 0 1 0 • Réplicas nas caches privadas têm de ser coerentes • Necessário garantir

◦ Escritas em memória são visíveis a todos os

processadores (write propagation)

◦ Ordem das escritas é a mesma para todos os

processadores (write serialization)

(50)

Snooping

• Controlador da cache monitoriza transacções que passam

no bus

• Todas as transacções são visíveis a todos os controladores • Todos os controladores veêm transacções pela mesma

ordem

• Controladores actuam sobre blocos locais quando

necessário

◦ Write-update ◦ Write-invalidade

• Etiquetas dos blocos em cache são duplicadas

◦ Evitar interferências quando CPU acede à cache ◦ Controlador acede a etiquetas duplicadas

(51)

Snooping

Cache tag and data Processor Single bus Memory I/O Snoop

tag Cache tagand data

Processor

Snoop

tag Cache tagand data

Processor

Snoop tag

(52)

Processadores ligados por rede de interconecc¸ ˜ao

• Cada processador possui memória e caches privadas • Processadores ligados por rede de interconecção

◦ Especializada e com diversas topologias • Relativamente à memória

◦ Distribuída

• Memória fisicamente distribuída pelos processadores ◦ Virtualmente partilhada

• Memória fisicamente distribuída mas logicamente

partilhada

(53)

Processadores ligados por rede de interconecc¸ ˜ao

Network Cache Processor Cache Processor Cache Processor

Memory Memory Memory

(54)

Arquitecturas de mem ´oria distribu´ıda

• Memória fisicamente distribuída

◦ Processador apenas endereça memória privada • Exige distribuição de tarefas

◦ Distribuir explicitamente dados pelos n processadores ◦ Agrupar resultados

• Comunicação entre processadores é explícita ◦ Enviar mensagem para partilhar dados

◦ Receber mensagem para aceitar dados enviados

(55)

Arquitecturas de mem ´

oria virtualmente partilhada

• Memória fisicamente distribuída mas logicamente

partilhada

◦ Camada de software simula espaço endereçamento

único

• Conceito semelhante a memória virtual em uniprocessador ◦ Tabela de páginas indica se página local ou remota

◦ Referências remotas são transformadas em mensagens • Performance muito dependente da localidade das

referências

Miss penalty envolve mensagem pela rede

◦ Largura de banda gasta com transferência de páginas

(56)

Coer ˆencia das caches em mem ´oria distribu´ıda

• Espaço de endereçamento único coloca novamente o

problema

◦ Cópias do mesmo endereço em caches distintas • Snooping não resolve problema

◦ Não existe um bus partilhado onde são propagadas

todas as referências à memória

◦ Natureza distribuída do protocolo não é escalonável a

um grande no de processadores

◦ Exige comunicação com todas as caches num cache

miss

• Sem coerência das caches

◦ Apenas dados privados podem estar na cache

Blocos partilhados são marcados como uncacheable

(57)

Protocolos de coer ˆencia baseados em direct ´

orios

• Directório central mantém informação dos blocos em cache ◦ Que caches que possuem cópias do bloco

◦ Estado do bloco

• Processador comunica alteração de bloco na cache ao

directório

◦ Directório invalida ou actualiza cópias ◦ Não é necessário broadcast!

• Transições entre estados geradas por mensagens explícitas ◦ Geradas por eventos em snooping

(58)

Distribuic¸ ˜ao de direct ´

orios

• Elevada escalabilidade com distribuição de directórios ◦ Cada directório monitoriza caches que referenciam

endereços físicos da porção de memória que controla

• Directórios distribuídos mantêm característica essencial ◦ Informação sobre um dado bloco está apenas num

único directório conhecido

◦ Bits mais significativos usados como etiqueta

(59)

Distribuic¸ ˜ao de direct ´

orios

(60)

Topologias das redes de interconecc¸ ˜ao

• Redes estáticas

◦ Ligações entre CPUs são fixas

◦ Mensagens seguem rotas bem definidas

• Redes dinâmicas

◦ Usar switches nas ligações entre CPUs

◦ Caminhos para as mensagens encontrados

dinâmicamente

• Características

◦ Largura de banda ◦ Latência

◦ Custo

◦ No máximo de hops entre CPUs ◦ Conectividade

Referências

Documentos relacionados

Para reduzir a exposição do paciente à radiação, as instruções de utilização requerem que o paciente use um avental de chumbo. Salvo o paciente, nenhuma outra pessoa sem

e 10.º da Lei n.º 112/2017, de 29 de dezembro, torna-se Escola Secundária de Avelar Brotero, cias que lhe foram delegadas pelo Despacho n.º Geral da Administração Escolar

Caso seja após a largada os atletas que porventura se utilizar da mudança do percurso serão identificados para que no resultado final sejam colocados em colocação posterior ao

As trocas de calor ocorrem principalmente por condução (piso-leitão), ainda que atualmente o tipo de piso mais utilizado nas instalações comerciais de creche suína seja o

A biotita apresenta-se intimamente associada aos minerais opacos, ocorrem em contatos retos e irregulares com feldspato alcalino e contatos irregulares com cristais de

AS FÊMEAS E MACHOS CASTRADOS FORAM SUJEITOS A UM TESTE PARA A DETEÇÃO DE ARTERITE VIRAL EQUINA, EM CONFORMIDADE COM AS DISPOSIÇÕES DO MANUAL DOS ANIMAIS TERRESTRES

Os entrevistados reconheceram uma série de questões concebidas por eles como dificuldades, quais sejam: oscilação de humor da companheira, mudanças na vida