[c언어] 멀티 스레딩을 이용한 병렬 알고리즘

목차

  1. 멀티 스레딩과 병렬 알고리즘 소개
  2. 멀티 스레딩을 이용한 C 언어 병렬 알고리즘 예제
  3. 참고 자료

1. 멀티 스레딩과 병렬 알고리즘 소개

멀티 스레딩은 프로그램 내부의 독립적인 실행 흐름을 생성하는 기술로, 시스템 자원을 효율적으로 활용하여 병렬 처리를 가능케 합니다. 병렬 알고리즘은 이러한 멀티 스레딩을 활용하여 하나의 작업을 여러 개의 작은 작업으로 분할한 뒤, 동시에 처리함으로써 성능 향상을 이끌어냅니다.

2. 멀티 스레딩을 이용한 C 언어 병렬 알고리즘 예제

다음은 C 언어를 사용하여 멀티 스레딩을 통한 병렬 알고리즘을 구현한 예제 코드입니다:

#include <stdio.h>
#include <pthread.h>

#define NUM_THREADS 4
#define NUM_ELEMENTS 1000000

int data[NUM_ELEMENTS];
int partial_results[NUM_THREADS];

void* process_data(void* thread_id) {
    int id = (int)thread_id;
    int start = id * (NUM_ELEMENTS / NUM_THREADS);
    int end = (id + 1) * (NUM_ELEMENTS / NUM_THREADS);
    int sum = 0;

    for (int i = start; i < end; i++) {
        sum += data[i];
    }

    partial_results[id] = sum;

    pthread_exit(NULL);
}

int main() {
    pthread_t threads[NUM_THREADS];

    // Initialize data array
    for (int i = 0; i < NUM_ELEMENTS; i++) {
        data[i] = i;
    }

    // Create threads
    for (int t = 0; t < NUM_THREADS; t++) {
        pthread_create(&threads[t], NULL, process_data, (void*)t);
    }

    // Wait for all threads to complete
    for (int t = 0; t < NUM_THREADS; t++) {
        pthread_join(threads[t], NULL);
    }

    // Aggregate partial results
    int total_sum = 0;
    for (int i = 0; i < NUM_THREADS; i++) {
        total_sum += partial_results[i];
    }

    printf("Total sum: %d\n", total_sum);

    return 0;
}

이 예제는 1000000개의 요소를 갖는 배열을 4개의 스레드로 나누어 합산하는 간단한 병렬 알고리즘을 구현한 것입니다.

3. 참고 자료