Multithreading e multiprocessamento (continuação) DAP Spr.‘98 ©UCB 1 Coerência de cache DAP Spr.‘98 ©UCB 2 Coerência de sistema memória Um sistema de memória é coerente se: 1 – Uma leitura de um processador P a uma posição X que segue uma uma escrita de X por P, sem nenhuma escrita de X por um outro processador ocorrendo entre a escrita e a leitura por P, sempre retorna o valor escrito por P. 2- Uma leitura por um processador à posição X que segue uma escrita por um outro processador a X retorna o valor escrito se a leitura e a escrita são suficientemente separadas no tempo e nenhuma outra escrita a X ocorre entre os dois acessos. 3- Escritas à mesma posição são serializadas; isto é, duas escritas à mesma posição por quaisquer dois processadores são vistas na mesma ordem por todos os processadores. Por exemplo: se valores 1 e 2 são escritos numa posição, os processadores nunca vão ler primeiro o 2 e depois o 1. DAP Spr.‘98 ©UCB 3 Protocolos de coerência Existem dois protocolos comumente usados para a obtenção da coerência de sistemas de cache em multiprocessadores: Baseados em diretório – o estado de compartilhamento de um bloco de memória é mantido num único local chamado de diretório. Esse tipo de protocolo pode ser escalável, ou seja, pode ser usado para um sistema com um número grande de processadores. Snooping – todo cache que tem uma cópia de um dado de um bloco de memória também tem uma cópia do estado de compartilhamento do bloco. Os caches são todos acessíveis via algum meio de difusão (broadcast) e todos os controladores de cache monitoram (snoop) o meio para determinar se tem ou não uma cópia de um bloco que é requisitado num acesso pelo barramento (ou outro sistema de interconexão usado). DAP Spr.‘98 ©UCB 4 Invalidação na escrita Existem duas formas de manter a coerência. Um método é assegurar que um processador tenha acesso exclusivo a uma dada posição antes de escrever. Esse estilo de protocolo é chamado de protocolo de invalidação na escrita (write invalidate protocol), pois invalida outras cópias numa escrita. É de longe, o protocolo mais comum, tanto para o esquema de snooping comno para o de diretório. O acesso exclusivo assegura que nenhuma outra cópia de uma posição exista quando uma escrita ocorre: todas as outras cópias em cache do conteúdo daquela posição são invalidadas. DAP Spr.‘98 ©UCB 5 Multiprocessador com memória compartilhada usa protocolo snooping DAP Spr.‘98 ©UCB 6 Protocolo snooping DAP Spr.‘98 ©UCB 7 Protocolo snooping usando write-back (ações originadas pelo processador) Read hit – shared/modified – acerto no cache, leitura no cache, e fica no estado atual. Read miss – invalid – falta no cache, faz leitura do bloco na memória e vai para shared. Read miss – shared - o bloco requisitado pela CPU usa o mesmo slot do cache, logo há falta de conflito de endereço. Substitui o bloco fazendo uma leitura na memória e continua no mesmo estado. Read miss – modified - o bloco requisitado pela CPU usa o mesmo slot do cache, logo há falta de conflito de endereço. Substitui o bloco fazendo write-back e lê o bloco requisitado na memória. Vai para o estado shared. DAP Spr.‘98 ©UCB 8 Write hit – modified – escreve dado no cache Write hit – shared – o bloco é atualizado no cache e as cópias do bloco em outros caches são invalidadas. Passa para estado modified. Write miss – invalid – falta de escrita, o bloco deve ser lido da memória, modificado no cache, e vai para o estado modified. Write miss – shared - o bloco no cache ocupa o mesmo slot do bloco para escrita, portanto ocorre conflito de endereço. Deve fazer write-back e uma leitura de bloco na memória. O novo bloco é modificado e vai para o estado modified. Write miss- modified- o bloco no cache ocupa o mesmo slot do bloco para escrita, portanto ocorre conflito de endereço. Deve fazer write-back e uma leitura de bloco na memória. O novo bloco é modificado DAP Spr.‘98 ©UCB 9 e permanece no estado modified. Diagrama de transição das ações originadas pelo processador Solicitação CPU – tipo normal Operação – tipo negrito DAP Spr.‘98 ©UCB 10 Protocolo snooping usando write-back (ações originadas pelo barramento) Read miss – shared – um outro processador (bus) tenta ler o bloco. Continua no estado shared. Read miss – modified – um outro processador (bus) tenta ler o bloco, e o bloco não está atualizado na memória pois foi modificado. Atualizar a memória (write-back), abortando acesso à memória pelo outro processador. Vai para o estado shared. Invalidate - shared – um outro processador (bus) tenta escrever no bloco compartilhado, resultando em write hit. Invalida o bloco indo para o estado invalid. Write miss – shared – um outro processador (bus) tenta escrever no bloco compartilhado, resultando em write miss. Invalida o bloco indo para o estado invalid. Write miss – modified – um outro processador (bus) tenta escrever no bloco modificado. Atualizar a memória (write-back), abortando acesso à memória pelo outro processador. Vai para o estado invalid. DAP Spr.‘98 ©UCB 11 Diagrama de transição das ações originadas pelo barramento Solicitação Bus – tipo normal Operação – tipo negrito DAP Spr.‘98 ©UCB 12 Diagrama completo CPU – preto Bus – cinza Atividade - negrito DAP Spr.‘98 ©UCB 13 Example Processor 1 step P1: Write 10 to A1 P1: Read A1 P2: Read A1 P1 State Addr Processor 2 P2 Value State Addr Bus Memory Bus Value Action Proc. Addr Memory Value Addr Value P2: Write 20 to A1 P2: Write 40 to A2 Assumes initial cache state is invalid and A1 and A2 map to same cache block, but A1 A2 Remote Write or Miss Invalid Remote Write or Miss Write Back Read miss on bus Write miss on bus Remote Read Write Back CPU Read hit Shared CPU Write Place Write Miss on Bus Exclusive CPU read hit CPU write hit DAP Spr.‘98 ©UCB 14 Example: Step 1 step P1: Write 10 to A1 P1: Read A1 P2: Read A1 P1 State Excl. P2 Value State 10 Addr A1 Addr Bus Value Action Proc. Addr WrMs P1 A1 Memory Value Addr Value P2: Write 20 to A1 P2: Write 40 to A2 Assumes initial cache state is invalid and A1 and A2 map to same cache block, but A1 A2 . Active arrow = Remote Write or Miss Invalid Remote Write or Miss Write Back Read miss on bus Write miss on bus Remote Read Write Back CPU Read hit Shared CPU Write Place Write Miss on Bus Exclusive CPU read hit CPU write hit DAP Spr.‘98 ©UCB 15 Example: Step 2 step P1: Write 10 to A1 P1: Read A1 P2: Read A1 P1 State Excl. Excl. P2 Value State 10 10 Addr A1 A1 Bus Value Action Proc. Addr WrMs P1 A1 Addr Memory Value Addr Value P2: Write 20 to A1 P2: Write 40 to A2 Assumes initial cache state is invalid and A1 and A2 map to same cache block, but A1 A2 Remote Write or Miss Invalid Remote Write or Miss Write Back Read miss on bus Write miss on bus Remote Read Write Back CPU Read hit Shared CPU Write Place Write Miss on Bus Exclusive CPU read hit CPU write hit DAP Spr.‘98 ©UCB 16 Example: Step 3 step P1: Write 10 to A1 P1: Read A1 P2: Read A1 P1 State Excl. Excl. Shar. P2 Value State Addr 10 10 Shar. A1 10 Shar. A1 Addr A1 A1 A1 Bus Value Action Proc. Addr WrMs P1 A1 10 RdMs WrBk RdDa P2 P1 P2 Memory Value Addr Value A1 A1 A1 10 10 A1 P2: Write 20 to A1 P2: Write 40 to A2 Assumes initial cache state is invalid and A1 and A2 map to same cache block, But A1 A2 Remote Write or Miss Invalid Remote Write or Miss Write Back Read miss on bus Write miss on bus Remote Read Write Back 10 10 10 10 10 CPU Read hit Shared CPU Write Place Write Miss on Bus Exclusive CPU read hit CPU write hit DAP Spr.‘98 ©UCB 17 Example: Step 4 step P1: Write 10 to A1 P1: Read A1 P2: Read A1 P1 State Excl. Excl. Shar. P2: Write 20 to A1 P2: Write 40 to A2 P2 Value State Addr 10 10 Shar. A1 10 Shar. A1 Excl. A1 Addr A1 A1 A1 Inv. Assumes initial cache state is invalid and A1 and A2 map to same cache block, but A1 A2 Bus Value Action Proc. Addr WrMs P1 A1 10 20 RdMs WrBk RdDa WrMs Remote Write or Miss Invalid Remote Write or Miss Write Back Read miss on bus Write miss on bus Remote Read Write Back P2 P1 P2 P2 Memory Value Addr Value A1 A1 A1 A1 10 10 A1 10 10 10 10 10 CPU Read hit Shared CPU Write Place Write Miss on Bus Exclusive CPU read hit CPU write hit DAP Spr.‘98 ©UCB 18 Example: Step 5 step P1: Write 10 to A1 P1: Read A1 P2: Read A1 P1 State Excl. Excl. Shar. P2: Write 20 to A1 P2: Write 40 to A2 Addr A1 A1 A1 Inv. P2 Value State Addr 10 10 Shar. A1 10 Shar. A1 Excl. A1 Excl. Assumes initial cache state is invalid and A1 and A2 map to same cache block, but A1 A2 Bus Value Action Proc. Addr WrMs P1 A1 10 20 A2 40 RdMs WrBk RdDa WrMs WrMs WrBk Remote Write or Miss Invalid Remote Write or Miss Write Back Read miss on bus Write miss on bus Remote Read Write Back P2 P1 P2 P2 P2 P2 Memory Value Addr Value A1 A1 A1 A1 A2 A1 10 10 A1 20 A1 CPU Read hit Shared CPU Write Place Write Miss on Bus Exclusive CPU read hit CPU write hit DAP Spr.‘98 ©UCB 19 10 10 10 10 20 Multiprocessamento com memória distribuída e o protocolo baseado em diretório DAP Spr.‘98 ©UCB 20 Os blocos de memória podem estar num dos seguintes estados DAP Spr.‘98 ©UCB 21 No protocolo baseado em diretório o sistema faz troca de mensagens Local cache refere-se ao local node - nó onde as requisições originam. Home directory refere-se ao home node - nó onde a posição de memória e a entrada no diretório de um endereço se encontram. DAP Spr.‘98 ©UCB 22 Remote cache refere-se a todos os caches, exceto local cache. Mensagens originadas do local cache para o home directory. Read miss – O processador P tem uma falta de leitura no endereço A. Requisita dados e transforma P em compartilhador de leitura. Write miss - O processador P tem uma falta de escrita no endereço A. Requisita dados e transforma P em proprietário exclusivo. Invalidate - Requisita o envio de invalidações a todos os caches remotos que estejam com o bloco com endereço A. DAP Spr.‘98 ©UCB 23 Outras mensagens Invalidate – invalida uma cópia compartilhada de dados do endereço A. Fetch – busca o bloco do endereço A e envia ao home directory. Muda o estado de A do remote cache para shared. Fetch/invalidate – Busca o bloco do endereço A e envia ao home directory. Invalida o bloco no cache. Data value reply – retorna um dado da memória (home memory). Data write back – faz o write-back de um dado no endereço A. DAP Spr.‘98 ©UCB 24 Diagrama de transição CPU- bloco de cache individual no protocolo baseado em diretório processador local - preto diretório - cinza DAP Spr.‘98 ©UCB 25 CPU -Cache State Machine CPU Read hit Invalidate • State machine or Miss due to for CPU requests address conflict: for each Invalid CPU Read memory block Send Read Miss • Invalid state message if in CPU Write: Fetch/Invalidate memory Send Write Miss or Miss due to address conflict: send Data Write Back message to home directory msg to h.d. Exclusive (read/write) Shared (read/only) CPU Write: Send Write Miss message to home directory Fetch: send Data Write Back message to home directory CPU read hit CPU write hit DAP Spr.‘98 ©UCB 26 Diagrama de transição para o diretório. Os negritos indicam as ações tomadas pelo diretório em resposta à requisição. Todas as requisições são causadas externamente. DAP Spr.‘98 ©UCB 27 Directory State Machine • State machine for Directory requests for each memory block • Uncached state if in memory Uncached Data Write Back: Sharers = {} (Write back block) Write Miss: Sharers = {P}; send Fetch/Invalidate; send Data Value Reply msg to remote cache Read miss: Sharers = {P} send Data Value Reply Write Miss: Sharers = {P}; send Data Value Reply msg Exclusive (read/write) Read miss: Sharers += {P}; send Data Value Reply Shared (read only) Write Miss: send Invalidate to Sharers; then Sharers = {P}; send Data Value Reply msg Read miss: Sharers += {P}; send Fetch; send Data Value Reply msg to remote cache DAP Spr.‘98 ©UCB 28 (Write back block) Example Processor 1 Processor 2 Interconnect step P1: Write 10 to A1 Directory Memory P1 P2 Bus Directory Memory State Addr Value State Addr Value Action Proc. Addr Value Addr State {Procs} Value P1: Read A1 P2: Read A1 P2: Write 20 to A1 P2: Write 40 to A2 A1 and A2 map to the same cache block DAP Spr.‘98 ©UCB 29 Example Processor 1 Processor 2 Interconnect step P1: Write 10 to A1 Directory Memory P1 P2 Bus Directory Memory State Addr Value State Addr Value Action Proc. Addr Value Addr State {Procs} Value WrMs P1 A1 A1 Ex {P1} Excl. A1 10 DaRp P1 A1 0 P1: Read A1 P2: Read A1 P2: Write 20 to A1 P2: Write 40 to A2 A1 and A2 map to the same cache block DAP Spr.‘98 ©UCB 30 Example Processor 1 Processor 2 Interconnect step P1: Write 10 to A1 P1: Read A1 P2: Read A1 Directory Memory P1 P2 Bus Directory Memory State Addr Value State Addr Value Action Proc. Addr Value Addr State {Procs} Value WrMs P1 A1 A1 Ex {P1} Excl. A1 10 DaRp P1 A1 0 Excl. A1 10 P2: Write 20 to A1 P2: Write 40 to A2 A1 and A2 map to the same cache block DAP Spr.‘98 ©UCB 31 Example Processor 1 Processor 2 Interconnect step P1: Write 10 to A1 P1: Read A1 P2: Read A1 P1 P2 Bus State Addr Value State Addr Value Action Proc. WrMs P1 Excl. A1 10 DaRp P1 Excl. A1 10 Shar. A1 RdMs P2 Shar. A1 10 Ftch P1 Shar. A1 10 DaRp P2 Directory Memory Directory Memory Addr Value Addr State {Procs} Value A1 A1 Ex {P1} A1 0 A1 A1 A1 10 10 A1 A1 Shar. {P1,P2} P2: Write 20 to A1 P2: Write 40 to A2 10 10 10 10 10 Write Back A1 and A2 map to the same cache block DAP Spr.‘98 ©UCB 32 Example Processor 1 Processor 2 Interconnect step P1: Write 10 to A1 P1: Read A1 P2: Read A1 P2: Write 20 to A1 P1 P2 Bus State Addr Value State Addr Value Action Proc. WrMs P1 Excl. A1 10 DaRp P1 Excl. A1 10 Shar. A1 RdMs P2 Shar. A1 10 Ftch P1 Shar. A1 10 DaRp P2 Excl. A1 20 WrMs P2 Inv. Inval. P1 Directory Memory Directory Memory Addr Value Addr State {Procs} Value A1 A1 Ex {P1} A1 0 A1 A1 A1 A1 A1 10 10 A1 A1 Shar. {P1,P2} A1 Excl. P2: Write 40 to A2 {P2} 10 10 10 10 10 A1 and A2 map to the same cache block DAP Spr.‘98 ©UCB 33 Example Processor 1 Processor 2 Interconnect step P1: Write 10 to A1 P1: Read A1 P2: Read A1 P2: Write 20 to A1 P2: Write 40 to A2 P1 P2 Bus State Addr Value State Addr Value Action Proc. WrMs P1 Excl. A1 10 DaRp P1 Excl. A1 10 Shar. A1 RdMs P2 Shar. A1 10 Ftch P1 Shar. A1 10 DaRp P2 Excl. A1 20 WrMs P2 Inv. Inval. P1 WrMs P2 WrBk P2 Excl. A2 40 DaRp P2 Directory Memory Directory Memory Addr Value Addr State {Procs} Value A1 A1 Ex {P1} A1 0 A1 A1 A1 A1 A1 A2 A1 A2 10 10 20 0 A1 A1 Shar. {P1,P2} A1 A2 A1 A2 Excl. {P2} Excl. {P2} Unca. {} Excl. {P2} 10 10 10 10 0 20 0 A1 and A2 map to the same cache block DAP Spr.‘98 ©UCB 34