openMP本身是sequential program只有程序員指定的地方才并行運算。在指定地方,程序可以forks一堆 線程。這些線程一般都執行一樣的Instructions, on different portions of data. 等所有線程執行完畢,leave regions.
OpenMP使用共享的Memory, 所有線程access same address space. 也可以有分布式memory。共享內存比較容易實現,但是不是scalable。。
加速Vector Addition。
i = thread_id. 不同Id的負責不同regions。
所以并行運算一個最簡單的例子就是可以做Vector Addition.
也可以讓每個Thread負責一個regions。
dot product = 元素1 in A * 元素2 in B + 元素2 in A *元素2 in B。。。
challenge: result 變量也許會被race condition read/write!
In Java:
synchronized
http://www.geeksforgeeks.org/synchronized-in-java/
Critical section 在java里面叫做Synchronized blocks. java 需要標記一個synchronized keyword.
Monitor!就是得到了Lock。所有想access 被loced moniter的地方,都會被suspended.
http://www.geeksforgeeks.org/inter-thread-communication-java/