eu tenho o seguinte código que faz a soma de uma progressão harmônica:
1/1, 1/2, 1/3, 1/4, ...
definida por:
Sn = ∑ i=1n (1/i)
#include <stdio.h>
#include <string.h>
#include <omp.h>
#define START 1000000
#define STEP 1000000
#define END 10000000
#define DIGITS 1000
void sum(char* output, const long unsigned int d, const long unsigned int n) {
long unsigned int digit, i, remainder, div, mod;
long unsigned int digits[d + 11];
for (digit = 0; digit < d + 11; ++digit) {
digits[digit] = 0;
}
for (i = 1; i <= n; ++i) {
remainder = 1;
for (digit = 0; digit < d + 11 && remainder; ++digit) {
div = remainder / i;
mod = remainder % i;
digits[digit] += div;
remainder = mod * 10;
}
}
for (i = d + 11 - 1; i > 0; --i) {
digits[i - 1] += digits[i] / 10;
digits[i] %= 10;
}
if (digits[d + 1] >= 5) {
++digits[d];
}
for (i = d; i > 0; --i) {
digits[i - 1] += digits[i] / 10;
digits[i] %= 10;
}
sprintf(output,"%lu.",digits[0]);
unsigned long int t = strlen(output);
for (i = 1; i <= d; ++i)
output[t++] = digits[i]+'0';
output[t] = '\0';
}
int main() {
long unsigned int n;
double start, finish;
char output[DIGITS + 10]; // extra chars to avoid error
for (n=START; n<=END; n+=STEP) {
start = omp_get_wtime();
sum(output, DIGITS, n);
finish = omp_get_wtime();
fprintf(stdout,"%s\n",output);
fprintf(stderr,"%lu %lf\n",n,finish-start);
}
return 0;
}
pra paralelizar esse trecho, tenho que adicionar 2 diretivas openmp, uma no laço a ser a identificado e outra na seção critica, alguma ideia? não manjo muito de c e to meio perdido kkkkkk
Pergunta
ribskz
eu tenho o seguinte código que faz a soma de uma progressão harmônica:
1/1, 1/2, 1/3, 1/4, ...
definida por:
Sn = ∑ i=1n (1/i)
pra paralelizar esse trecho, tenho que adicionar 2 diretivas openmp, uma no laço a ser a identificado e outra na seção critica, alguma ideia? não manjo muito de c e to meio perdido kkkkkk
Editado por ribskzLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.