平行運算

Flynn 分類法

分類說明範例
SISD單一指令流、單一資料流傳統馮紐曼架構
SIMD單一指令流、多重資料流GPU、SSE/AVX
MISD多重指令流、單一資料流很少使用
MIMD多重指令流、多重資料流多核 CPU、叢集

平行化層級

共享記憶體平行化

// POSIX Threads 範例
#include <pthread.h>
#define NUM_THREADS 4

void *partial_sum(void *arg) {
    // 每個執行緒計算部分和
    return NULL;
}

int main() {
    pthread_t threads[NUM_THREADS];
    for (int i = 0; i < NUM_THREADS; i++)
        pthread_create(&threads[i], NULL, partial_sum, &data[i]);
    for (int i = 0; i < NUM_THREADS; i++)
        pthread_join(threads[i], NULL);
    return 0;
}

分散式記憶體

MPI(Message Passing Interface)是分散式記憶體系統的標準。每個程序有獨立記憶體,透過訊息傳遞通訊。適合大規模叢集和超級電腦。OpenMP 則用於共享記憶體系統,透過編譯器指令(#pragma omp)簡化平行化。

相關連結