并行计算

目录
  1. Fortran/C
  2. Python
    1. threading
    2. multiprocessing

​ 在很多科学计算中,并行计算可以极大的缩短计算时间,提高资源的利用率。如果配合服务器、超算中心,并行计算更是不可或缺。博主一个Fotran程序,同样的计算过程,单核计算费时50h,不过改变代码,利用MPI并行,直接15核跑起来,就只需要2000s。这里就并行计算Mark一下

Fortran/C

博主一般使用Fortran,使用的并行计算接口是MPI,不过这个C语言也是一样的。

Python

Python并行计算相对来讲就简单多了。

threading

threading模块的Thread通过多线程实现了并行计算。

1
import threading
  • generate a Thread object
1
2
3
4
5
6
7
8
9
10
11
12
13
def run(num)
print(num)

task1 = threading.Thread(target = run, args = (1), name = 'taksk1')
'''
这个类需要提供:
target参数用来输入你要执行的的函数。注意不是调用,所以函数后面不加括号
args输入前面run需要输入的实参
name参量输入名称,可以不提供,threading自动命名
返回一个task1的实例
'''
task1.start() #start thread
task1.join() #start next line until task1 finished
  • Other Method
1
2
3
threading.currentThread() # 返回当前的线程变量。
threading.enumerate() # 返回一个包含正在运行的线程的list。。
threading.activeCount() # 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

multiprocessing

python的多线程无法利用多核优势,多进程各自内存互不干预,在io计算时有很多好处。

  • Import
1
from multiprocessing import Process
  • Usage
  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def run(name):
    print(name)
    p1=Process(target=run,args=('anne',)) #必须加,号
    p2=Process(target=run,args=('alice',))
    p3=Process(target=run,args=('biantai',))
    p4=Process(target=run,args=('haha',))

    p1.start()
    p2.start()
    p3.start()
    p4.start()
1
2
3
4
5
6
7
8
9
10
11
class Run(Process):
def __init__(self,name):
super().__init__()
self.name = name
def run(self):
print(%self.name)

p1 = Run('one')
p2 = Run('two')
p1.start()
p2.start()
  • Method

同样Process也有join方法