Jump to content
zecapistolas

Paralelização através do OpenMP

Recommended Posts

zecapistolas

Viva,

Preciso de alguma ajuda a entender o funcionamento do OpenMP....

Supondo este pedaço de código:

ullong i;
#pragma omp parallel for private(i) shared(xpto) num_threads(4)
for (i = 9; i < MAX; i += 6)
xpto[i] = 5;

Isto separa o for pelos 4 processadores?! MAX tem valor de 1073741824, cada processador ficará com 1/4 desse MAX?!

PS: Esse pedaço de código sem OpenMP demora cerca de 2.690sec com OpenMP demora cerca de 2.960sec ... a diferença não é grande, mas de qualquer forma...  👎

cumps  :P

Share this post


Link to post
Share on other sites
falk0n

E já viste o código resultante (assembly desse código em C) ele não irá criar threads ? E o overhead da criação das threads compensará ?

Pensa nisto, pode ser que tires as tuas conclusões de o pq de isso  👎 (dessa forma)

Boas programações

Share this post


Link to post
Share on other sites
Triton

Não conheço bem OpenMP, mas ao meter shared talvez ele sincronize o acesso ao xpto, logo explica porque o código paralelizado fica mais lento.


<3 life

Share this post


Link to post
Share on other sites
zecapistolas

E já viste o código resultante (assembly desse código em C) ele não irá criar threads ? E o overhead da criação das threads compensará ?

Yah, se contarmos com o overhead da criação de threads e afins, se calhar não compensa.... Mas isto é para um trabalho académico, é obrigatório utilizar OpenMP...  :D

Não conheço bem OpenMP, mas ao meter shared talvez ele sincronize o acesso ao xpto, logo explica porque o código paralelizado fica mais lento.

Agora alterei para:

ullong i;
#pragma omp for nowait // parallel loop | work is distributed
for (i = 9; i < MAX; i += 6)
        xpto[i] = 5;

#pragma omp barrier // synchronization

e agora o tempo para resolver o for é 30segundos abaixo comparando com versão não paralela.

--8<---

E com dois for's juntos?  🤔

for (i = 5; i < MAX; i++)
if (i % 2 == 0)
	for (val = i*i; val < MAX; val += i)
		 xpto[val] = i;

Como posso paralelizar este bloco?

cumps  :P

Share this post


Link to post
Share on other sites
zecapistolas

ullong i;
#pragma omp for nowait // parallel loop | work is distributed
for (i = 9; i < MAX; i += 6)
        xpto[i] = 5;

#pragma omp barrier // synchronization

Oops, assim não cria threads....  👎  🤔

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.