Hands-on

GraGrass·2024년 1월 21일
0

Chapter 11

Pi 계산

1. 개요

2. C code

#include <stdio.h>
#include <math.h>
#include <omp.h>

int main()
{
	const long num_step=100000000;
    long i;
    double sum = 0.0, step, pi, x;
    
    step= (1.0/(double) num_step);
    
	# pragma omp parallel for private(i) reduction(+:sum)
	for (i=0; i<num_step; i++){
    	x = ((double) i - 0.5) * step;
        sum += 4.0 / (1.0 + x*x);
    }
    pi = step * sum;
    printf("PI = %17.15lf (Error = %e)\n", pi, fabs(acos(-1.0) - pi));
}

3. Result

  • 순차 코드(위)에 비해 병렬 코드(아래)가 훨씬 빠름
  • 성능은 지정하는 스레드의 개수에 따라 달라질 수 있음

파일 여러 개 읽기

1. C code

#include <stdio.h>
#include <string.h>

void ReadMesh(char *Input, char* Output);
int main(void)
{
	int i;
    char Inputfile[20], Outputfile[20];
    omp_set_num_threads(4)
#pragma omp parallel for private(i, Inputfile, Outputfile)
	for (i=1; i<=4; i++)
    {
    	sprintf(Inputfile, "t1_%ld.msh",i);
        sprintf(Outputfile, "t1Out_%ld.msh",i);
        ReadMesh(Inputfile, Outputfile);
    }
    return 0;
}

void ReadMesh(char *Input, char* Output)
{
	// ReadMesh() 정의
}

2. Result

  • 파일 이름이 a.msh, b.msh 이런 식으로 모두 다를 경우, for문이 아닌 #pragma omp sections 활용
profile
올해는 진짜 갓생 산다

0개의 댓글