多线程

多线程_第1张图片

openMP本身是sequential program只有程序员指定的地方才并行运算。在指定地方,程序可以forks一堆 线程。这些线程一般都执行一样的Instructions, on different portions of data. 等所有线程执行完毕,leave regions.

OpenMP使用共享的Memory, 所有线程access same address space. 也可以有分布式memory。共享内存比较容易实现,但是不是scalable。。


多线程_第2张图片

加速Vector Addition。

多线程_第3张图片

i = thread_id. 不同Id的负责不同regions。

所以并行运算一个最简单的例子就是可以做Vector Addition.

多线程_第4张图片

也可以让每个Thread负责一个regions。

多线程_第5张图片

dot product = 元素1 in A * 元素2 in B + 元素2 in A *元素2 in B。。。

challenge: result 变量也许会被race condition read/write!

多线程_第6张图片


多线程_第7张图片

In Java:


多线程_第8张图片


多线程_第9张图片


多线程_第10张图片


synchronized

http://www.geeksforgeeks.org/synchronized-in-java/

Critical section 在java里面叫做Synchronized blocks. java 需要标记一个synchronized keyword.

多线程_第11张图片

Monitor!就是得到了Lock。所有想access 被loced moniter的地方,都会被suspended.

多线程_第12张图片

http://www.geeksforgeeks.org/inter-thread-communication-java/

你可能感兴趣的:(多线程)