在不想调用GPU进行并行加速,但又想要提升代码效率时,可以考虑CPU多线程并行计算。
主要基于multiprocessing库,如果代码中存在重复运行又较占内存的代码块时,可以考虑采用这种方法。
主要调用代码如下:
partial_work = partial(feedforward_cpu, data_temp=data_temp)
pool = multiprocessing.Pool(processes=12)
y = pool.map(partial_work, testX)
其中,需要循环的函数feedforward_cpu实现如下:
def feedforward_cpu(x,data_temp):
# x is a numpy array with 10 elements.
h1 = sigmoid(data_temp[0][0] * x[0] + data_temp[0][1] * x[1] + data_temp[0][2] * x[2] + data_temp[0][3] * x[3] +
data_temp[0][4] * x[4] + data_temp[0][5]+data_temp[0][6] * x[5])
h2 = sigmoid(data_temp[1][0] * x[0] + data_temp[1][1] * x[1] + data_temp[1][2] * x[2] + data_temp[1][3] * x[3] +
data_temp[1][4] * x[4] + data_temp[1][5]+data_temp[1][6] * x[5])
h3 = sigmoid(data_temp[2][0] * x[0] + data_temp[2][1] * x[1] + data_temp[2][2] * x[2] + data_temp[2][3] * x[3] +
data_temp[2][4] * x[4] + data_temp[2][5]+data_temp[2][6] * x[5])
h4 = sigmoid(data_temp[3][0] * x[0] + data_temp[3][1] * x[1] + data_temp[3][2] * x[2] + data_temp[3][3] * x[3] +
data_temp[3][4] * x[4] + data_temp[3][5]+data_temp[3][6] * x[5])
o1 = sigmoid(
data_temp[4][0] * h1 + data_temp[4][1] * h2 + data_temp[4][2] * h3 + data_temp[4][3] * h4 + data_temp[4][4])
return o1
其中进程数目需要根据自己设备的CPU情况来酌情设定。