Ajude a manter o site livre, gratuito e sem propagandas. Colabore!
2.2 Escalabilidade e eficiência
Escalabilidade é a capacidade de um sistema computacional de aumentar sua performance com o aumento do número de threads disponíveis. A escalabilidade pode ser medida em termos da aceleração (speedup) e da eficiência.
Definição 2.2.1.
A aceleração é a razão entre o tempo de execução do código serial e o tempo de execução do código paralelo.
(2.1)
onde é a aceleração e é o tempo de execução do código com threads disponíveis.
A aceleração é uma medida de desempenho:
•
: o código não é paralelo;
•
: o código é paralelo;
•
: o código é mais lento que o serial.
•
quando : o código é escalável.
Exemplo 2.2.1.
A Figura 2.2 mostra a aceleração do Código 2 para vetores de tamanho . O computação do tempo de execução foi feita com o método omp_get_wtime().
Figura 2.2: Aceleração do Código 2 para vetores de tamanho .
A eficiência é a razão entre a performance do sistema e a performance ideal.
Definição 2.2.2.
A eficiência é a razão entre a aceleração e o número de threads disponíveis.
(2.2)
onde é a eficiência, é a aceleração e é o número de threads disponíveis.
A eficiência é uma medida de performance:
•
: o código é perfeitamente escalável;
•
: o código não é escalável.
•
quando : o código não é escalável.
•
quando : o código é escalável.
Exemplo 2.2.2.
A Figura 2.3 mostra a eficiência do Código 2 para vetores de tamanho . O computação do tempo de execução foi feita com o método omp_get_wtime().
Figura 2.3: Eficiência do Código 2 para vetores de tamanho .
Observação 2.2.1.(Dependência da máquina)
A eficiência e a aceleração dependem da arquitetura da máquina. O desempenho do código pode ser diferente em máquinas diferentes.
2.2.1 Exercícios
E. 2.2.1.
Faça um gráfico da aceleração do Código 2 para vetores de diferentes tamanhos . O que ocorre quando aumenta? Então, faça um estudo semelhante da eficiência de seu código.
E. 2.2.2.
Faça uma nova versão do Código 2 para computar a soma entre dois vetores de números randômicos em ponto flutuante. Para a distribuição da tarefa, os vetores são divididos em pedaços (chunks) de tamanho . Os pedaços são distribuídos para que cada thread compute as devidas somas parciais. Faça um estudo comparativo da escalabilidade de cada versão do código com:
a)
.
b)
.
c)
.
d)
.
e)
.
E. 2.2.3.
Faça um estudo da escalabilidade de seu código elaborado no Exercício 2.1.4. Você consegueria fazer uma nova versão paralela mais eficiente?
E. 2.2.4.
Faça um estudo da escalabilidade de seu código elaborado no Exercício 2.1.5. Você conseguiria fazer uma nova versão paralela mais eficiente?
Envie seu comentário
Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!
Ajude a manter o site livre, gratuito e sem propagandas. Colabore!
2.2 Escalabilidade e eficiência
Escalabilidade é a capacidade de um sistema computacional de aumentar sua performance com o aumento do número de threads disponíveis. A escalabilidade pode ser medida em termos da aceleração (speedup) e da eficiência.
Definição 2.2.1.
A aceleração é a razão entre o tempo de execução do código serial e o tempo de execução do código paralelo.
(2.1)
onde é a aceleração e é o tempo de execução do código com threads disponíveis.
A aceleração é uma medida de desempenho:
•
: o código não é paralelo;
•
: o código é paralelo;
•
: o código é mais lento que o serial.
•
quando : o código é escalável.
Exemplo 2.2.1.
A Figura 2.2 mostra a aceleração do Código 2 para vetores de tamanho . O computação do tempo de execução foi feita com o método omp_get_wtime().
Figura 2.2: Aceleração do Código 2 para vetores de tamanho .
A eficiência é a razão entre a performance do sistema e a performance ideal.
Definição 2.2.2.
A eficiência é a razão entre a aceleração e o número de threads disponíveis.
(2.2)
onde é a eficiência, é a aceleração e é o número de threads disponíveis.
A eficiência é uma medida de performance:
•
: o código é perfeitamente escalável;
•
: o código não é escalável.
•
quando : o código não é escalável.
•
quando : o código é escalável.
Exemplo 2.2.2.
A Figura 2.3 mostra a eficiência do Código 2 para vetores de tamanho . O computação do tempo de execução foi feita com o método omp_get_wtime().
Figura 2.3: Eficiência do Código 2 para vetores de tamanho .
Observação 2.2.1.(Dependência da máquina)
A eficiência e a aceleração dependem da arquitetura da máquina. O desempenho do código pode ser diferente em máquinas diferentes.
2.2.1 Exercícios
E. 2.2.1.
Faça um gráfico da aceleração do Código 2 para vetores de diferentes tamanhos . O que ocorre quando aumenta? Então, faça um estudo semelhante da eficiência de seu código.
E. 2.2.2.
Faça uma nova versão do Código 2 para computar a soma entre dois vetores de números randômicos em ponto flutuante. Para a distribuição da tarefa, os vetores são divididos em pedaços (chunks) de tamanho . Os pedaços são distribuídos para que cada thread compute as devidas somas parciais. Faça um estudo comparativo da escalabilidade de cada versão do código com:
a)
.
b)
.
c)
.
d)
.
e)
.
E. 2.2.3.
Faça um estudo da escalabilidade de seu código elaborado no Exercício 2.1.4. Você consegueria fazer uma nova versão paralela mais eficiente?
E. 2.2.4.
Faça um estudo da escalabilidade de seu código elaborado no Exercício 2.1.5. Você conseguiria fazer uma nova versão paralela mais eficiente?
Envie seu comentário
Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!