quinta-feira, 30 de setembro de 2010

O que são multi e hyper-threading?

Os processadores foram os componentes de computador que tiveram uma evolução galopante desde seu primeiro modelo até os que encontramos hoje no mercado. Para aumentar a velocidade dos processadores e a dos computadores, diversas tecnologias novas foram desenvolvidas.
Hoje você não precisa procurar muito para encontrar computadores que tenham processadores com mais de um núcleo, ou que possam simular diversos. Porém, as especificações destas máquinas muitas vezes utilizam nomes específicos como Multithread ou Hyper-threading e geram dúvidas sobre seu funcionamento.
O que é Thread?
Em palavras simples, uma thread é um conjunto de tarefas existentes em um ou mais programas, executadas ao mesmo tempo pelo processador. Por exemplo, você não precisa parar de ouvir música enquanto utiliza um editor de texto, muito menos fechar uma janela de seu navegador para imprimir uma imagem. Agora pense em diversas tarefas dentro de um único processo (como a emissão de sons e imagens ao mesmo tempo em um jogo) e você tem threads.

Uma Thread acontece quando um programa precisa resolver duas ou mais tarefas concorrentes (e em andamento). Threads não são processos, estando contidas dentro de processos. Pode haver múltiplas threads dentro de um mesmo processo (ao menos uma sempre existe) e também é possível dividir recursos do computador (como memória e arquivos abertos, por exemplo), enquanto processos não podem fazê-lo.
Nos computadores cujo processador possui um núcleo, as threads são processadas de maneira, aparentemente, simultânea, pois a mudança entre uma e outra é feita de maneira muito rápida. Nos computadores cujo processador tem mais do que um núcleo, as threads são efetivamente realizadas de forma simultânea.
Resumindo...
Normalmente, um processo (de qualquer programa) é dividido em várias linhas, as quais possuem ordens específicas. Cada linha pode ser lida e processada separadamente pelo processador. Estas linhas são o que chamamos de Threads. Evidentemente, para que as Threads possam ser executadas ao mesmo tempo, o computador precisa de duas coisas: um sistema capaz de realizar esta divisão de threads e um processador capaz de executar várias threads.
Multithread
Multithreading é a capacidade que o sistema operacional possui de executar várias threads simultaneamente sem que uma interfira na outra. Estas threads compartilham os recursos do processo, mas são capazes de ser executadas de forma independente. Para possuir processamento multithread “real”, os processadores precisam ser capazes de atender duas ou mais threads ao mesmo tempo e não simular este efeito, atendendo-as uma por vez em um curto período de tempo.
A maior vantagem trazida com a execução multithread é permitir que os computadores com múltiplos núcleos de processamento possam aproveitar todo o seu potencial e operar de forma mais rápida. Apenas para ilustrar, nos computadores sem este tipo de suporte, quando o processo principal toma muito tempo, a aplicação inteira parece travar.
SuperThreading
Esta tecnologia foi desenvolvida a partir da observação de que algumas vezes o processador era deixado ocioso enquanto executava as instruções de uma thread (nem todo processo requisita toda a capacidade do processador). O objetivo principal era aproveitar este período de ociosidade para a execução de instruções de outra thread.
Na execução SuperThreading o processador pode executar instruções de threads diferentes para cada ciclo de processamento. Entretanto, quando um destes ciclos não está mais sendo utilizado por determinada thread, é aproveitado para executar outra que esteja pronta.
Hyper-threading
Hyper-threading ou Simultaneous multithreading (SMT), basicamente, seria uma espécie de evolução da tecnologia SuperThreading, porém sem a limitação de que todas as instruções executadas em um mesmo ciclo de processamento sejam da mesma thread.

A tencologia de Hyper-thread permite que as threads sejam executadas em paralelo (paralelismo) dentro de cada núcleo de processador existente no computador. Este tipo de processamento aproveita de forma mais eficiente o uso dos recursos dos processadores e melhora ainda mais a performance multithread dos programas. Na imagem abaixo você pode conferir a presença da tecnologia Hyper-threading (HT) nos processadores Pentium 4.

Veja que o Windows reconhece dois núcleos num processador que tem apenas um núcleo físico
Para deixar um pouco mais claro, pode-se dizer que um único processador com tecnologia hyper-threading habilitada é tratado pelo sistema operacional como dois processadores ao invés de apenas um. Assim sendo, um único processador físico poderia ser tratado pelo Sistema como dois processadores virtuais dividindo tarefas entre eles.
Como um exemplo atual, poderíamos utilizar os processadores Core i7 da Intel, que apesar de possuírem quatro núcleos físicos, simulam o funcionamento de oito.
Por Ana Paula Sedrez de Souza Pereira

LABORATÓRIO 3 - SIMULADOR - SOSIM

LABORATÓRIO 3
Execute os seguintes passos:
1. Execute o simulador SOsim e identifique as quatro janelas que são abertas na inicialização. Para esta experiência você pode fechar ou minimizar a janela da Gerência de Memória
2. Crie um processo: janela Gerência de Processos / Criar.
Analise o seguinte:
1. Na janela Gerência de Processos, observe algumas informações sobre o contexto de software do processo como PID, prioridade, estado do processo e tempo de processador.
2. Na janela Gerência de Processador, observe o processo transicionando entre estados.
3. Na janela Gerência de Processador, movimente a barra de Clock de UCP e observe as variações ocorridas.
Tendo feito isto, você seria capaz de responder, com base na observação do comportamento do processo criado, se o processo é I/O-bound ou CPU-bound? Justifique a resposta.
____________________________________________________________________________________________________
____________________________________________________________________________________________________
____________________________________________________________________________________________________
____________________________________________________________________________________________________
Execute os seguintes passos:
1. Reinicialize o simulador.
2. Crie um processo do tipo CPU-bound: janela Gerência de Processos / Criar | janela Criação de Processos / Criar (tipo de processo deve ser CPU-bound).
3. Crie outro processo do tipo I/O-bound: janela Gerência de Processos / Criar | janela Criação de Processos / Criar (tipo de processo deve ser I/O-bound).
Analise o seguinte:
1. Na janela Gerência de Processos, observe as mudanças de estado dos dois processos.
2. Na janela Gerência de Processador, observe o comportamento dos processos e as mudanças de contexto em função do tipo I/O-bound e CPU-bound.
3. Na janela Gerência de Processos, compare a taxa de crescimento do tempo de processador dos dois processos.
Tendo feito isto, você seria capaz de analisar os efeitos gerados no caso de redução do tempo gasto na operação de E/S pelo processo I/O-bound.
____________________________________________________________________________________________________
____________________________________________________________________________________________________

Melhore esta experiência refazendo-a com mais um processo, que seja misto, tanto CPU-Bound como IO-Bound.
 
Visitas