Theano2.1.21-基礎知識之theano中多核的支持

來自:http://deeplearning.net/software/theano/tutorial/multi_cores.htmlhtml

Multi cores support in Theanopython

1、BLAS 操做

    BLAS是一個針對於某些數學上操做的接口,其中包括兩個向量、一個向量和一個矩陣、兩個矩陣(即,介於向量/矩陣和矩陣/矩陣之間的點積操做)。固然有許多這樣接口的不一樣的實現方法,有些仍是能夠並行的。windows

    Theano是想盡量使用這個接口來保證總體的性能。因此若是想要實現theano的並行,這些操做將會在thenao中並行的運行。性能

    最頻繁的來控制線程的數量的方法就是經過 OMP_NUM_THREADS 環境變量來設置。在開啓python進程以前,將它設置成你想要使用到的線程的數量。一些BLAS實現也支持其餘環境變量。測試

    爲了測試你的BLAS是否支持 OpenMP/Multiple 多核,你可使用 theano/misc/check_blas.py 腳原本測試,命令以下:spa

OMP_NUM_THREADS=1 python theano/misc/check_blas.py -q
OMP_NUM_THREADS=2 python theano/misc/check_blas.py -q

ps:在windows的cmd上運行的時候,須要用到set OMP_NUM_THREADS=2。(set會臨時的定義環境變量,當關閉一個cmd的時候,就會被清除的。).net

我的:待分析線程

2、使用OpenMP來並行的逐元素ops

    由於在每一個張量元素上獨立的進行逐元素操做能夠很容易的經過OpenMP來並行化。code

   爲了使用OpenMP,你須要設置 openmp flag 爲 True.htm

    你可使用flag openmp_elemwise_minsize 來設置須要並行的最小的張量size。對於較短的張量來講,使用OpenMP反而可能會減慢該操做。默認的值是20w 。

    對於簡單的(快速)的操做來講,你能夠在很是大的張量獲得一個加速;而對於複雜的操做來講,你能夠在較小的張量上獲得一個不錯的加速。

    在theano/misc路徑下有一個腳本 elemwise_openmp_speedup.py ,你能夠用來針對你你的機器來調整 openmp_elemwise_minsize 的值。該腳本是對具備size爲 openmp_elemwise_minsize的向量執行兩個逐元素操做(一個快速操做,一個慢速操做) 並分別使用OpenMP和未使用兩種狀況下執行,從而來顯示不一樣狀況下的耗時狀況。

    惟一的用來控制線程數量的方法是經過 OMP_NUM_THREADS 環境變量。在開啓python進程以前將它設置成你想要的線程數量。你能夠用下面的命令來測試:

OMP_NUM_THREADS=2 python theano/misc/elemwise_openmp_speedup.py
#The output

Fast op time without openmp 0.000533s with openmp 0.000474s speedup 1.12
Slow op time without openmp 0.002987s with openmp 0.001553s speedup 1.92

 

我的:上面的沒成功,錯誤待分析,因此沒圖。

參考資料:

[1]:官網:http://deeplearning.net/software/theano/tutorial/multi_cores.html

相關文章
相關標籤/搜索