or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing
xxxxxxxxxx
OpenMP
硬體配置:
若是使用Virtual box或是其他虛擬機器,必須要先將處理器的數量調到大於一,否則不管使用何種平行化的程式設計,結果將不會產生任何平行化的效果。(我在這邊卡了好久,原來是CPU配置的問題…)
Virtual box的處理器設定: (原本是 1CPU調整為4CPU)
調整完後,在terminal輸入:
便可以看到CPU的即時情況,也可以看到有4CPU(S)的資訊
Start OpenMP
在使用OpenMP前要先引入標頭檔:
先來看個簡單的範例:
其中"#pragma omp parallel"是告訴程式在後面的括號中要進行多執行續的模式。
而後在linux的編譯環境下,若是要使用OpenMP的function,則需要在編譯時加上編譯參數"-fopenmp",才能成功的致能。編譯後執行的結果如下:
可以觀察到在多執行緒的區塊中printf被執行了四次(預設執行緒為4:defaut # of thread = 4)。
設定執行緒數量:
結果:
可以看到若是初始化執行緒數量為n,則thread num =0~n-1
平行化for loop:
有兩種方法,如下:都是先設定執行緒的數量為4,而後針對for loop進行平行化。
結果:
可以看到這兩種方法都確實將for loop要做的工作分配給了4個CPU個別去執行。另外,也可以從印出的結果發現OpenMP在分配工作給CPU時,是將連續的區塊分給同一個CPU,剛好也滿足先前所提到的spatial locality的優化。接下來便要將openmp的平行化程式設計應用在先前提到的矩陣乘法上。