iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0

OpenMP(Open Multi-Processing)是一組編譯指示和一個API給使用C、C++或FORTRAN寫的程式用。它提供共用記憶體環境下的平行程式支援。OpenMP會辨認平行區端(parallel region)為可以平行執行的程式碼區段。

OpenMP例子:openmp.c

/**
 * Example of openmp parallel region
 * 
 * To compile, enter:
 *
 *	gcc -fopenmp openmp.c
 *
 * You should see the message "I am a parallel region" for each
 * processing core on your system.
 *
 * For those using a virtual machine, make sure you set the number of
 * processing cores > 1 to see parallel execution of the parallel region.
 */

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

int main(int argc, char *argv[])
{
	/* sequential code */

	#pragma omp parallel
	{
		printf("I am a parallel region\n");
	}

	/* sequential code */

	return 0;
}

當OpenMP遇到編譯指示

	#pragma omp parallel

它會產生和系統處理核心一樣多的執行緒,然後所有的執行緒同時執行平行區塊,當每一個執行緒離開平行區塊,程式就結束。

Terminal
編譯並執行

gcc -fopenmp openmp.c
./a.out

結果:(雙核心系統,#pragma omp parallel 產生兩個執行緒)
https://ithelp.ithome.com.tw/upload/images/20240929/20168766mPEWj6DmLE.png

  1. Thread(s) per core(每核心的執行緒數)
    這表示每個核心可以同時執行的執行緒數量。許多現代 CPU 支援超執行緒技術(如 Intel 的 Hyper-Threading),使得每個核心能同時處理兩個執行緒。若此值為 1,則表示每個核心只能處理一個執行緒。

  2. Core(s) per socket(每插槽的核心數)
    這表示每個 CPU 插槽中有多少個物理核心。若此值為 2,則表示在該插槽中有兩個物理核心。這意味著該 CPU 可以同時處理多個獨立的任務,因為每個核心都是獨立的執行單元。

參考:greggagne/OSC9e/ch4/openmp.c


上一篇
ch4圖4.12-計算非負整數總和的Java程式
下一篇
ch5-POSIX未命名信號量(Unnamed Semaphores)
系列文
十年後重讀作業系統恐龍本30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言