900 likes | 1.04k Views
Melhorando o desempenho da CPU. Roteiro da Aula. Melhorando desempenho Mais recursos Lavanderia Técnica de Pipeline Comparando desempenho Entendendo o funcionamento do pipeline Resolvendo conflitos no pipeline Conflito dado Conflito controle Resolvendo situações de exceção Resumo.
E N D
Melhorando o desempenho da CPU Infra-estrutura de Hardware
Roteiro da Aula • Melhorando desempenho • Mais recursos • Lavanderia • Técnica de Pipeline • Comparando desempenho • Entendendo o funcionamento do pipeline • Resolvendo conflitos no pipeline • Conflito dado • Conflito controle • Resolvendo situações de exceção • Resumo Infra-estrutura de Hardware
Como um documento é processado? 1- Busca documento 2 - Identifica tipo de transação 3 - Verifica se saldo é positivo 4 - Efetiva transação e atualiza saldo Infra-estrutura de Hardware
Ciclo de Instrução Busca instrução Incrementa PC Decodifica instrução Busca operando Executa instrução Armazena resultado Infra-estrutura de Hardware
O hardware está sendo bem utilizado? • Numa implementação serial de instruções partes do hardware ficam ociosas durante a execução de uma instrução • Se várias instruções fossem processadas ao mesmo tempo com cada parte do hardware atuando numa instrução distinta teríamos melhor utilização do hardware. • Pipeline Infra-estrutura de Hardware
Melhorando a eficiência Busca documento Identifica tipo de transação Verifica se saldo é positivo Efetiva transa- ção e atualiza saldo Infra-estrutura de Hardware
Outro Exemplo • Exemplo: Lavanderia • Lavagem: 30 min • Secagem: 30 min • Passar a ferro: 30 min • guardar : 30 min Infra-estrutura de Hardware
1 6 P M 7 8 9 1 0 1 1 1 2 2 A M T i m e T a s k o r d e r A B C D Lavanderia • Lavagem sequencial • Duração: 8 horas Infra-estrutura de Hardware
1 6 P M 7 8 9 1 0 1 1 1 2 2 A M T i m e T a s k o r d e r A B C D Lavanderia • Lavagem em pipeline • Duração: 3.5 horas Infra-estrutura de Hardware
6 P M 7 8 9 1 0 T i m e T a s k o r d e r A B C D Lavanderia pipeline • Pipelining não diminui o tempo de execução de uma tarefa, ele melhora a taxa de execução de um conjunto de tarefas • Tarefas múltiplas simultâneas usando diferentes recursos • Aumento no desempenho= Número de estágios • Taxa é limitada pelo estágio mais lento • Tempo para “encher” e “esvaziar” o pipeline reduz o desempenho • Espera quando houver dependências Infra-estrutura de Hardware
Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Load Ifetch Reg/Dec Exec Mem Wr Os 5 estágios de uma instrução LOAD • Ifetch: Busca de instrução da memória de instrução • Reg/Dec: Carregamento de registradores e decodificação da instrução • Exec: Cálculo do endereço de memória • Mem: Leitura da memória de dados • Wr: Escrita no banco de registradores Infra-estrutura de Hardware
P r o g r a m 2 4 6 8 1 0 1 2 1 4 1 6 1 8 e x e c u t i o n T i m e o r d e r ( i n i n s t r u c t i o n s ) I n s t r u c t i o n D a t a l w $ 1 , 1 0 0 ( $ 0 ) R e g A L U R e g f e t c h a c c e s s I n s t r u c t i o n D a t a l w $ 2 , 2 0 0 ( $ 0 ) R e g A L U R e g 8 n s f e t c h a c c e s s I n s t r u c t i o n l w $ 3 , 3 0 0 ( $ 0 ) 8 n s f e t c h . . . 8 n s 1 4 2 4 6 8 1 0 1 2 T i m e I n s t r u c t i o n D a t a l w $ 1 , 1 0 0 ( $ 0 ) R e g A L U R e g f e t c h a c c e s s I n s t r u c t i o n D a t a l w $ 2 , 2 0 0 ( $ 0 ) 2 n s R e g A L U R e g f e t c h a c c e s s l w $ 3 , 3 0 0 ( $ 0 ) Pipeline vs. Mono-ciclo P r o g r a m e x e c u t i o n o r d e r ( i n i n s t r u c t i o n s ) I n s t r u c t i o n D a t a R e g A L U R e g 2 n s f e t c h a c c e s s Infra-estrutura de Hardware 2 n s 2 n s 2 n s 2 n s 2 n s
Clk Single Cycle Implementation: Load Store Waste Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 Cycle 7 Cycle 8 Cycle 9 Cycle 10 Clk Multiple Cycle Implementation: Load Store R-type Ifetch Reg Exec Mem Wr Ifetch Reg Exec Mem Ifetch Pipeline Implementation: Load Ifetch Reg Exec Mem Wr Store Ifetch Reg Exec Mem Wr R-type Ifetch Reg Exec Mem Wr Mono, multi-ciclo e Pipeline Cycle 1 Cycle 2 Infra-estrutura de Hardware
I F : I n s t r u c t i o n f e t c h I D : I n s t r u c t i o n d e c o d e / E X : E r e g i s t e r f i l e r e a d 0 M u x 1 A d d A d d 4 A d d r e s u l t S h i f t l e f t 2 R e a d r e g i s t e r 1 A d d r e s s P C R e a d d a t a 1 R e a d Z e r o r e g i s t e r 2 I n s t r u c t i o n R e g i s t e r s A L U R e a d A L U 0 R e a d W r i t e d a t a 2 r e s u l t A d d r e s s 1 d a t a r e g i s t e r M I n s t r u c t i o n M u D a t a u m e m o r y W r i t e x m e m o r y x d a t a 1 0 W r i t e d a t a 1 6 3 2 S i g n e x t e n d Implementando o pipeline x e c u t e / M E M : M e m o r y a c c e s s W B : W r i t e b a c k a d d r e s s c a l c u l a t i o n Infra-estrutura de Hardware
Registradores do Pipeline 0 M u x 1 I F / I D E X / M E M M E M / W B A d d A d d 4 A d d r e s u l t S h i f t l e f t 2 n o i t A d d r e s s P C c u r t s n I I n s t r u c t i o n m e m o r y 0 0 W r i t e 3 2 Implementando o pipeline I D / E X R e a d r e g i s t e r 1 R e a d d a t a 1 R e a d Z e r o r e g i s t e r 2 R e g i s t e r s A L U R e a d A L U R e a d W r i t e A d d r e s s d a t a 2 1 r e s u l t d a t a r e g i s t e r M M u D a t a u W r i t e x m e m o r y x d a t a 1 d a t a 1 6 S i g n e x t e n d Infra-estrutura de Hardware
l w I n s t r u c t i o n f e t c h 0 M u x 1 I F / I D I D / E X E X / M E M M E M / W B A d d A d d 4 A d d r e s u l t S h i f t l e f t 2 R e a d n o i r e g i s t e r 1 t A d d r e s s P C R e a d c u d a t a 1 r t R e a d s Z e r o n r e g i s t e r 2 I I n s t r u c t i o n R e g i s t e r s A L U R e a d A L U m e m o r y 0 R e a d W r i t e A d d r e s s d a t a 2 r e s u l t 1 d a t a r e g i s t e r M M u D a t a u W r i t e x m e m o r y x d a t a 1 0 W r i t e d a t a 1 6 3 2 S i g n e x t e n d Operação de um pipeline: lw (1) 80000008 80000004 8D28 04B0 Infra-estrutura de Hardware
l w 0 I n s t r u c t i o n d e c o d e M u x 1 I F / I D I D / E X E X / M E M M E M / W B A d d A d d 4 A d d r e s u l t S h i f t l e f t 2 R e a d n o i r e g i s t e r 1 t A d d r e s s P C R e a d c u d a t a 1 r t R e a d s Z e r o n r e g i s t e r 2 I I n s t r u c t i o n R e g i s t e r s A L U R e a d A L U m e m o r y 0 R e a d W r i t e A d d r e s s d a t a 2 r e s u l t 1 d a t a r e g i s t e r M M u D a t a u W r i t e x m e m o r y x d a t a 1 0 W r i t e d a t a 1 6 3 2 S i g n e x t e n d Operação de um pipeline : lw (2) 80000008 80000008 9 8 80000004 00000002 80000004 8D28 04B0 00000008 Infra-estrutura de Hardware
Operação de um pipeline : lw (3) 80000008 80000004 8000000C 00000008 Infra-estrutura de Hardware
l w 0 M e m o r y M u x 1 I F / I D I D / E X E X / M E M M E M / W B A d d A d d 4 A d d r e s u l t S h i f t l e f t 2 n R e a d o i r e g i s t e r 1 t A d d r e s s P C R e a d c u r d a t a 1 t R e a d s Z e r o n r e g i s t e r 2 I I n s t r u c t i o n R e g i s t e r s A L U R e a d A L U m e m o r y 0 R e a d W r i t e A d d r e s s d a t a 2 r e s u l t 1 d a t a r e g i s t e r M D a t a M u u m e m o r y W r i t e x x d a t a 1 0 W r i t e d a t a 1 6 3 2 S i g n e x t e n d Operação de um pipeline : lw (4) 00000005 8000000C 00000005 Infra-estrutura de Hardware
l w 0 M u W r i t e b a c k x 1 I F / I D I D / E X E X / M E M M E M / W B A d d A d d 4 A d d r e s u l t S h i f t l e f t 2 n R e a d o i r e g i s t e r 1 t A d d r e s s P C R e a d c u r d a t a 1 t R e a d s n Z e r o r e g i s t e r 2 I I n s t r u c t i o n R e g i s t e r s A L U R e a d A L U m e m o r y 0 R e a d W r i t e A d d r e s s d a t a 2 r e s u l t 1 d a t a r e g i s t e r M D a t a M u m e m o r y u W r i t e x x d a t a 1 0 W r i t e d a t a 1 6 3 2 S i g n e x t e n d Operação de um pipeline : lw (5) 01000 00000005 ? Infra-estrutura de Hardware 00000005
0 M u x 1 I F / I D I D / E X E X / M E M M E M / W B A d d A d d 4 A d d r e s u l t S h i f t l e f t 2 n R e a d o i r e g i s t e r 1 t A d d r e s s P C c R e a d u r d a t a 1 t R e a d s n Z e r o r e g i s t e r 2 I I n s t r u c t i o n R e g i s t e r s A L U R e a d A L U m e m o r y 0 R e a d W r i t e A d d r e s s d a t a 2 r e s u l t 1 d a t a r e g i s t e r M M D a t a u u W r i t e x m e m o r y x d a t a 1 0 W r i t e d a t a 1 6 3 2 S i g n e x t e n d Operação de um pipeline : lw (5) 00000005 00000005 80000004 01000 01000 01000 Infra-estrutura de Hardware
s w 0 E x e c u t i o n M u x 1 I F / I D I D / E X E X / M E M M E M / W B A d d A d d 4 A d d r e s u l t S h i f t l e f t 2 n R e a d o i r e g i s t e r 1 t A d d r e s s P C c R e a d u r d a t a 1 t R e a d s n Z e r o r e g i s t e r 2 I I n s t r u c t i o n R e g i s t e r s A L U R e a d A L U m e m o r y 0 R e a d W r i t e d a t a 2 r e s u l t 1 d a t a r e g i s t e r M M D a t a u u m e m o r y W r i t e x x d a t a 1 0 W r i t e d a t a 1 6 3 2 S i g n e x t e n d Operação de um Pipeline: sw (3) 00000002 00000002 00000002 80000004 A d d r e s s 80000004 8000000C 00000008 Infra-estrutura de Hardware
s w 0 M e m o r y M u x 1 I F / I D I D / E X E X / M E M M E M / W B A d d A d d 4 A d d r e s u l t S h i f t l e f t 2 n R e a d o i r e g i s t e r 1 t A d d r e s s P C R e a d c u r d a t a 1 t R e a d s n Z e r o r e g i s t e r 2 I I n s t r u c t i o n R e g i s t e r s A L U R e a d A L U m e m o r y 0 R e a d W r i t e d a t a 2 A d d r e s s r e s u l t 1 d a t a r e g i s t e r M M u D a t a u W r i t e x m e m o r y x d a t a 1 0 W r i t e d a t a 1 6 3 2 S i g n e x t e n d Operação de um Pipeline: sw (4) 00000002 8000000C 00000002 i Infra-estrutura de Hardware
s w 0 M W r i t e b a c k u x 1 I F / I D I D / E X E X / M E M M E M / W B A d d A d d 4 A d d r e s u l t S h i f t l e f t 2 n R e a d o i r e g i s t e r 1 A d d r e s s t P C R e a d c u d a t a 1 r t R e a d s Z e r o n r e g i s t e r 2 I I n s t r u c t o n R e g i s t e r s A L U R e a d A L U m e m o r y 0 R e a d W r i t e A d d r e s s d a t a 2 r e s u l t 1 d a t a r e g i s t e r M M D a t a u u W r i t e x m e m o r y x d a t a 1 0 W r i t e d a t a 1 6 3 2 S i g n e x t e n d Operação de um Pipeline: sw (5) i Infra-estrutura de Hardware
T i m e ( i n c l o c k c y c l e s ) P r o g r a m C C 1 C C 2 C C 3 C C 4 C C 5 C C 6 C C 7 e x e c u t i o n o r d e r ( i n i n s t r u c t i o A L U l w $ 2 , 2 0 0 ( $ 0 ) I M R e g D M R e g A L U l w $ 3 , 3 0 0 ( $ 0 ) I M R e g D M R e g Representação de um pipeline n s ) A L U l w $ 1 , 1 0 0 ( $ 0 ) I M R e g D M R e g Infra-estrutura de Hardware
T i m e ( i n c l o c k c y c l e s ) P r o g r a m C C 1 C C 2 C C 3 C C 4 C C 5 C C 6 e x e c u t i o n o r d e r ( i n i n s t r u c t i o n s ) l w $ 1 0 , 2 0 ( $ 1 ) I M R e g D M R e g s u b $ 1 1 , $ 2 , $ 3 I M R e g D M R e g Representando o pipeline A L U A L U Infra-estrutura de Hardware
T i m e ( i n c l o c k c y c l e s ) P r o g r a m e x e c u t i o n o r d e r C C 1 C C 2 C C 3 C C 4 C C 5 C C 6 ( i n i n s t r u c t i o n s ) I n s t r u Representando o pipeline D a t a c t i o n I n s t r u c t i o n E x e c u t i o n l w $ 1 0 , $ 2 0 ( $ 1 ) W r i t e b a c k a c c e s s f e t c h d e c o d e D a t a I n s t r u c t i o n I n s t r u c t i o n E x e c u t i o n W r i t e b a c k s u b $ 1 1 , $ 2 , $ 3 a c c e s s f e t c h d e c o d e Infra-estrutura de Hardware
4 B r a n c h R e g W r i t e n R e a d o i t r e g i s t e r 1 P C A d d r e s s c R e a d u r d a t a 1 t s R e a d A L U S r c M e m t o R e g n I r e g i s t e r 2 I n s t r u c t i o n R e g i s t e r s R e a d m e m o r y 0 R e a d W r i t e d a t a 2 1 r e g i s t e r M d a t a M u u W r i t e x x d a t a 1 0 W r i t e d a t a I n s t r u c t i o n 6 [ 1 5 – 0 ] 1 6 3 2 S i g n A L U e x t e n d M e m R e a d c o n t r o l I n s t r u c t i o n [ 2 0 – 1 6 ] A L U O p I n s t r u c t i o n [ 1 5 – 1 1 ] R e g D s t Implementando o Pipeline: processamento P C S r c 0 M u x 1 I F / I D I D / E X E X / M E M M E M / W B A d d A d d A d d r e s u l t S h i f t l e f t 2 M e m W r i t e Z e Z r e o r o A L U A L U A d d r e s s r e s u l t D a t a m e m o r y 0 M u x Infra-estrutura de Hardware 1
Implementando o Pipeline:controle Infra-estrutura de Hardware
C A d d A d d 4 A d d e r e s u l t t i r W B r a n c h S h i f t g e l e f t 2 R A L U S r c g n R e a d e o i R t r e g i s t e r 1 P C c o R e a d t u r m d a t a 1 t s e R e a d n M Z e r o I r e g i s t e r 2 I n s t r u c t i o n R e g i s t e r s R e a d A L U m e m o r y 0 R e a d W r i t e d a t a 2 r e s u l t 1 d a t a r e g i s t e r M M u u W r i t e x x d a t a 1 0 W r i t e d a t a I n s t r u c t i o n 1 6 3 2 [ 1 5 – 0 ] S i g n A L U M e m R e a d e x t e n d c o n t r o l I n s t r u c t i o n [ 2 0 – 1 6 ] 0 A L U O p M u x 1 R e g D s t Implementando o Pipeline:controle P C S r c I D / E X 0 M W B u E X / M E M x 1 o n t r o l M W B M E M / W B E X M W B I F / I D e t i r W m e M A d d r e s s A L U A d d r e s s D a t a m e m o r y 6 I n s t r u c t i o n Infra-estrutura de Hardware [ 1 5 – 1 1 ]
O pipeline é sempre eficiente??? • Eficiência do pipeline: • estágios com a mesma duração • instruções independentes de resultados calculados em instrução anterior • execução sequencial das instruções • ... mas as características acima quase sempre não • são satisfeitas: • dependência de dados • instruções de desvio Infra-estrutura de Hardware
Conflitos • Impedem a execução da próxima instrução no ciclo previsto • Tipos: • estrutural • conflito no uso dos recursos • controle • alteração do fluxo do programa por instruções de desvio e chamada de funções • dado • dependência de dados Infra-estrutura de Hardware
Conflito Estrutural -Algum recurso não suficientemente replicado -Mesma memória (cache) para dados e instruções O conflito estrutural pode ser eliminado replicando-se o recurso Infra-estrutura de Hardware
Mem ALU Mem Mem Reg Reg ALU Mem Mem Reg Reg ALU ALU Mem Mem Reg Reg ALU Conflito estrutural: memória única Time (clock cycles) I n s t r. O r d e r Mem Reg Reg Load Instr 1 Instr 2 Mem Mem Reg Reg Instr 3 Instr 4 Infra-estrutura de Hardware
Im ALU Im ALU Im Im Dm Reg Reg ALU ALU Conflito na utilização do registrador r1: Problema Time ( Time ( clock cycles clock cycles ) ) IF IF ID/RF ID/RF EX EX MEM MEM WB WB add add r1 r1 ,r2,r3 ,r2,r3 Reg Reg Reg Reg ALU ALU Im Im Dm Dm I I n n Im Im Dm Dm Reg Reg sub r4, sub r4, r1 r1 ,r3 ,r3 Reg Reg ALU ALU s s t t r. r. Im Im Dm Dm Reg Reg Reg Reg and and r6, r6, r1 r1 ,r7 ,r7 ALU ALU O O r r Im Im Dm Dm Reg Reg Reg Reg ALU ALU or or r8, r8, r1 r1 ,r9 ,r9 d d e e Im Im Dm Dm Reg Reg Reg Reg ALU ALU xor xor r10, r10, r1 r1 ,r11 ,r11 r r Infra-estrutura de Hardware
Im ALU Im ALU Im ALU Conflito de Dado em R1: Funcionamento Correto Time (clock cycles) IF ID/RF EX MEM WB add r1,r2,r3 Reg Reg ALU Im Dm I n s t r. O r d e r sub r4,r1,r3 Dm Reg Reg and r6,r1,r7 Dm Reg Reg or r8,r1,r9 Im Dm Reg Reg ALU xor r10,r1,r11 Dm Reg Reg Infra-estrutura de Hardware
Resolvendo o conflito de dado - Software : inserir NOP’s Infra-estrutura de Hardware
Im ALU Im ALU Im Im Im ALU ALU ALU Inserindo NOP´s IF ID/RF EX MEM WB • Inserir NOP’s add r1,r2,r3 Reg Reg ALU Im Dm I n s t r. O r d e r nop Dm Reg Reg nop Dm Reg Reg sub r4,r1,r3 Dm Reg Reg and r6,r1,r7 Dm Reg Reg or r8,r1,r9 Im Dm Reg Reg ALU xor r10,r1,r11 Dm Reg Reg Infra-estrutura de Hardware
Resolvendo o conflito de dado - Software : inserir NOP’s degradação do desempenho trocar a ordem das instruções. Infra-estrutura de Hardware
Im ALU Im ALU Im Im Im ALU ALU ALU Rearrumando código IF ID/RF EX MEM WB • Inserir NOP’s add r1,r2,r3 Reg Reg ALU Im Dm I n s t r. O r d e r and r12, r12, r13 Dm Reg Reg or r14, r14, r15 Dm Reg Reg sub r4,r1,r3 Dm Reg Reg and r6,r1,r7 Dm Reg Reg or r8,r1,r9 Im Dm Reg Reg ALU xor r10,r1,r11 Dm Reg Reg Infra-estrutura de Hardware
Resolvendo o Conflito de Dados - Software : inserir NOP’s degradação do desempenho trocar a ordem das instruções compilador “inteligente” - Hardware : método do curto circuito Infra-estrutura de Hardware
P r o g r a m e x e c u t i o n 2 4 6 8 1 0 o r d e r T i m e ( i n i n s t r u c t i o n s ) a d d $ s 0 , $ t 0 , $ t 1 I F I D E X M E M W B s u b $ t 2 , $ s 0 , $ t 3 M E M I F I D E X M E M W B Método do Curto Circuito Infra-estrutura de Hardware
Im ALU Im ALU Im Dm Reg Reg ALU Curto Circuito - Forwarding Time (clock cycles) IF ID/RF EX MEM WB add r1,r2,r3 Reg Reg ALU Im Dm I n s t r. O r d e r sub r4,r1,r3 Dm Reg Reg Dm Reg Reg and r6,r1,r7 Im Dm Reg Reg or r8,r1,r9 ALU xor r10,r1,r11 Infra-estrutura de Hardware
I D / E X E X / M E M M E M / W B M u x R e g i s t e r s A L U M D a t a u m e m o r y M x u x F o r w a r d B E X / M E M . R e g i s t e r R d R d F o r w a r d i n g M E M / W B . R u n i t b . W i t h f o r w a r d i n g I D / E X E X / M E M M E M / W B Curto Circuito R e g i s t e r s A L U D a t a m e m o r y M u x a . N o f o r w a r d i n g F o r w a r d A R s R t R t M u x e g i s t e r R d Infra-estrutura de Hardware
Resolvendo o Conflito de Dados - Software : inserir NOP’s degradação do desempenho trocar a ordem das instruções compilador “inteligente” - Hardware : método do curto circuito operações entre registradores inserir retardo (reg/mem) Infra-estrutura de Hardware
Im ALU Inserindo retardos Time (clock cycles) IF ID/RF EX MEM WB lw r1,0(r2) Reg Reg ALU Im Dm b u b b l e b u b b l e b u b b l e b u b b l e sub r4,r1,r3 Dm Reg Reg Infra-estrutura de Hardware
P r o g r a m T i m e ( i n c l o c k c y c l e s ) e x e c u t i o n C C 1 C C 2 C C 3 C C 4 C C 5 C C 6 C C 7 C C 8 C C 9 C C 1 0 o r d e r ( i n i n s t r u c t i o n s ) R e g D M R e g I M l w $ 2 , 2 0 ( $ 1 ) R e g D M I M R e g a n d $ 4 , $ 2 , $ 5 R e g o r $ 8 , $ 2 , $ 6 D M R e g I M I M a d d $ 9 , $ 4 , $ 2 R e g I M D M s l t $ 1 , $ 6 , $ 7 R e g D M I M R e g Inserindo retardos R e g b u b b l e R e g Infra-estrutura de Hardware
I D / E X . M e m R e a d H a z a r d d e t e c t i o n u n i t I D / E X e t W B i r E X / M E M W D M I / F C o n t r o l u M W B I M E M / W B x 0 E X M W B I F / I D e t i r W M n C o P u i t c x u r t s R e g i s t e r s n I D a t a I n s t r u c t i o n A L U P C m e m o r y M m e m o r y u x M u x I F I F / I D . R e g i s t e r R t M u I F / I D . R e g i s t e r R d x I D / E X . R e g i s t e r R t F o r w a r d i n g u n i t Detectando e Resolvendo Conflitos I F / I D . R e g i s t e r R s / I D . R e g i s t e r R t R t E X / M E M . R e g i s t e r R d R d R s M E M / W B . R e g i s t e r R d R t Infra-estrutura de Hardware
Conflito de Controle • Necessidade da alteração no fluxo: • desvios condicionais e incondicionais • chamadas e retornos de subrotinas • interrupções • Como resolver o conflito minimizando a perda de desempenho? Infra-estrutura de Hardware