Buscar

IAC8 - Paralelismo 1 - Threads

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

11/05/2020 1
Threads
Introdução à Arquitetura de 
Computadores
2
Threads
Thread = linha de execução independente dentro de um mesmo 
processo
Multiplas threads: associação de múltiplos fluxos de trabalho a um 
processo. 
Em certas aplicações é conveniente disparar várias threads dentro do 
mesmo processo (programação concorrente).
Ex: quando diversos (>1) pedidos de E/S devem ser tratados 
concorrentemente, e que precisam compartilhar algumas estruturas 
de dados (e.g. uma cache em um servidor de arquivos ou conexões 
TCP em um servidor Web)
Processos com 1 ou mais treads
3
Principais Características
 Cada thread tem a sua pilha própria, mas compartilha o 
mesmo espaço de endereçamento do processo em que foi 
criada;
 Se duas threads executam o mesmo procedimento/método, 
cada uma terá a sua própria cópia das variáveis locais;
 As threads podem acessar todas os dados globais do 
programa, e o heap (memória alocada dinamicamente)
 Nesse acesso a dados globais (i.e. quando o acesso inclui 
mais do que uma instrução de máquina), as threads 
precisam ter acesso em regime de exclusão mútua (p.ex. 
usando locks( ) )
4
5
Exemplo de uso de threads
Fig.: Um processador de texto com três threads
6
Exemplo de uso de Threads
Um servidor web com múltiplas threads
7
Ativo
Diagrama de estados de threads 
New Thread Dead Thread
Executando
Runnable
new ThreadExample();
Método run() retorna
while (…) { … }
Blocked
Object.wait()
Thread.sleep()
blocking IO call
waiting on a monitor
thread.start();
8
Gerenciamento de Threads
 Cada thread possui sua própria pilha e contexto de CPU 
(conteúdo de PC, SP, registradores, PSW, etc.)
 A troca de contexto entre threads é mais leve do que a 
troca de contexto entre processos
 Uma tread pode estar nos estados: running, blocked & 
ready
Ao contrário de processos, threads compartilham a 
mesma região de memória
9
O Descritor de Thread
Contexto:
program counter (PC) /* próxima instrução */
process status word (PSW) /* resultado da operação, ex: carry-bit */
stack pointer (SP) /* pilha de execução do thread */
registers /* conteúdo dos registradores da CPU */
state /* blocked, running, ready */
priority
host_process /* processo hospedeiro ou kernel */
thread_Id /* identificador do thread */
processID /* processo ao qual a thread pertence */
• Para cada thread, o kernel (ou biblioteca de threads) 
mantém a seguinte informação, que é mantida 
independente dos descritores de processos (PCBs)
Gerenciamento processos vs 
threads
10
11
Sincronismo entre Threads
int pthread_join( pthread_t tid, void* status ) 
// a thread invocadora é bloqueada até que a thread tid termine 
 tid A threadID pela qual deseja-se esperar; 
 status O valor de retorno da thread execurando o exit(), será copiado para status
void main() {
pthread_t tid;
int status;
pthread_create(&tid,NULL,thread_main,NULL);
….
pthread_join(tid, (void*) &status);
printf(“Return value is: %d\n”, status);
}
void *thread_main( ){
int result;
....
Pthread_exit((void*) result);
}
12
Exemplo de Uso de Threads
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5 
void *PrintHello(void *threadid) 
{ 
printf("\n%d: Hello World!\n", threadid); 
/* do other things */
pthread_exit(NULL); /*not necessary*/
} 
int main() 
{ 
pthread_t threads[NUM_THREADS]; 
int t; 
for(t=0;t < NUM_THREADS;t++)
{ 
printf("Creating thread %d\n", t); 
pthread_create(&threads[t], NULL, PrintHello, (void *)t);
}
for(t=0; t < NUM_THREADS; t++)
pthread_join(threads[t],NULL); /* wait for all the threads to 
terminate*/
} 
Perguntas?
Exercício 1 - Subtração de vetores
Faça um programa paralelo para subtrair dois vetores de 1K (1024) 
posições cada, de acordo com o seguinte algoritmo
 O processo irá criar os dois vetores preenchidos com números 
aleatórios e um terceiro não inicializado, na área global do 
processo.
 A cada 256 elementos do vetor solução, o seu programa deverá 
gerar uma thread para o seu cálculo (são então 4 trabalhadores, o 
primeiro subtrai as posições de 0 a 255 dos dois vetores e 
armazena o resultado no terceiro vetor, o segundo faz o mesmo nas 
posições de 256 a 511 e assim sucessivamente).
 Ao final o processo exibe os vetores gerados e o vetor resultante da 
operação.
 Mostre que houve concorrência entre as threads. Caso não seja 
possível, indique o que pode ser feito para que isso ocorra.
 Compare o tempo sequencial e paralelo de execução da subtração 
de vetores.
Exercício 2 – Busca em vetor
Faça um programa sequencial e paralelo para localizar um valor 
(chave) em um vetor de 16K posições.
 O processo deve criar um vetor na memória com dados gerados 
aleatoriamente, selecionar um valor de busca e exibir todas as 
posições do vetor onde o valor foi encontrado via busca 
sequencial. Em seguida, deve dividir o espaço de busca por 8 
threads. 
 Cada thread deve procurar o dado na sua respectiva área do vetor 
(em memória) e informar a posição onde o valor da busca foi 
localizado. 
 Mostre que houve concorrência entre as threads. Caso não seja 
possível, indique o que pode ser feito para que isso ocorra.
 Compare o tempo sequencial e paralelo de execução da 
subtração de vetores.

Continue navegando