Skip to content

Latest commit

 

History

History

saxpy

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

SAXPY

Problema bem simples que consiste em: dado dois vetores x e y, um escalar a, para cada posição yi = a * xi + yi.

Implementação

Para realizar o processamento da imagem é preciso implementar a função saxpy_parallel no arquivo student.cpp:

void saxpy_parallel(std::vector<int> &y, std::vector<int> x, int a, size_t n)
{
    // seu código
}

Como compilar

Para facilitar o desenvolvimento, existe um arquivo Makefile contendo os passos de compilação do programa.

  • Compilar:
$ make build
  • Limpar:
$ make clean
  • Executar:
$ ./runner

Loop Scheduling

  • Static

É o padrão do OpenMP, quando um bloco paralelo é executado, as iterações são dividas entre as threads.

#pragma omp parallel for schedule(static)
for (i = 0; i < N; i++)
  • Dynamic

Um static scheduling pode não ser eficiente quando existem iterações mais demoradas que outras, podendo gerar um desbalanceamento de carga!

Sendo assim, existe o dynamic scheduling em que as iterações são alocadas para as threads por demanda. No entanto, existe um overhead implícito!

#pragma omp parallel for schedule(dynamic)
for (i = 0; i < N; i++)
  • Chunk size

É possível definir explicitamente a quantidade de elementos em um laço que uma thread irá receber através de um segundo parâmetro CHUNK. Como por exemplo: schedule(static, CHUNK) e schedule(dynamic, CHUNK).

  • Guided

Similar ao dynamic scheduling, porém o bloco de elementos (CHUNK) varia ao longo do tempo.

#pragma omp parallel for schedule(guided)
for (i = 0; i < N; i++)