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/