Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
so:calculo_de_pi_com_threads [2017/08/03 14:08] – [Observações] maziero | so:calculo_de_pi_com_threads [2019/04/25 16:55] (atual) – [Cálculo de ¶ usando threads] maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Cálculo de ¶ usando threads ====== | ||
+ | |||
+ | O objetivo deste projeto é compreender melhor o conceito de thread e como elas podem ser usadas para utilizar melhor os recursos de processamento disponíveis nos computadores modernos. Para isso, será construído um programa em C usando a biblioteca Posix Threads para calcular ¶ usando N threads simultâneas. O valor de ¶ pode ser aproximado pela [[https:// | ||
+ | |||
+ | {{ so: | ||
+ | |||
+ | ===== Observações ===== | ||
+ | |||
+ | * Devem ser calculados pelo menos 1 bilhão (10< | ||
+ | * O programa deve dividir o espaço de cálculo uniformemente entre as N threads; cada thread efetua uma soma parcial de forma autônoma; | ||
+ | * Para evitar o uso de mecanismos de sincronização, | ||
+ | * Para garantir um bom desempenho, evite operar muito com variáveis globais dentro das threads; copie as variáveis globais necessárias para variáveis locais (alocadas automaticamente na pilha da thread) e ao final dos cálculos copie os resultados finais de volta para as variáveis globais correspondentes; | ||
+ | * Devem ser medidos os tempos de execução **do programa** para execuções com 1, 2, 4, 8, 16 e 32 threads, em dois computadores com configuração distinta, como por exemplo: | ||
+ | - uma máquina mono-processada | ||
+ | - uma máquina dual-processada | ||
+ | * Para determinar o tempo de cada execução, use o comando '' | ||
+ | * Compilar com os flags '' | ||
+ | * Ao executar seus experimentos, | ||
+ | * Para que os resultados tenham valor estatístico, | ||
+ | |||
+ | ===== A entregar ===== | ||
+ | |||
+ | Deverá ser entregue ao professor o código-fonte desenvolvido (um arquivo '' | ||
+ | |||
+ | * Tabelas com os tempos de execução obtidos, valores médios e coeficientes de variação; | ||
+ | * Gráficos separados para as curvas de tempo médio de execução em cada plataforma e sua análise. Nos gráficos, o eixo X indica o número de threads e o eixo Y o tempo de execução; | ||
+ | * Um gráfico consolidado (todas as curvas no mesmo gráfico) com as curvas de tempo normalizadas e sua análise crítica. Uma curva normalizada guarda apenas as proporções entre os valores de tempo; nela, os tempos de execução com N threads são divididos pelo tempo de execução obtido com apenas uma thread, na mesma plataforma; | ||
+ | * O diagrama de tempo da execução (simplificado, | ||
+ | * Respostas às seguintes questões: | ||
+ | - As threads implementadas são preemptivas ou cooperativas? | ||
+ | - Que modelo de threads o sistema operacional que você usou implementa (N:1, 1:1 ou N:M) ? Como isso pode ser deduzido a partir dos experimentos? | ||
+ | |||
+ | ===== Referências ===== | ||
+ | |||
+ | * [[http:// | ||