在單機上執行julia並行加速的例子
用sharedarray + @parallel for 與 array + for對比
cnt = SharedArray(Int,1) cnt[1]=0; st=time(); for i in 1:10^7 cnt[1]=cnt[1]+1; end; ed=time(); println(cnt[1]) println(ed-st); cnt = Array(Int,1) cnt[1]=0; st=time(); for i in 1:10^7 cnt[1]=cnt[1]+1; end; ed=time(); println(cnt[1]) println(ed-st); cnt = SharedArray(Int,1) cnt[1]=0; st=time(); @parallel for i in 1:10^7 cnt[1]=cnt[1]+1; end; ed=time(); println(cnt[1]) println(ed-st); println(cnt) ---輸出 julia> include("d:\\testp.txt") 10000000 2.1689999103546143 10000000 1.6689999103546143 0 0.42100000381469727 [10000000]
序列的程式碼,cnt[1]的輸出是好的,不知道並行程式碼cnt[1]為什麼輸出0,如果把cnt的輸出移到後面,就可以輸出了。
把sharedarray改為array也能算對,也是一樣的速度
cnt = Array(Int,1) cnt[1]=0; st=time(); @parallel for i in 1:10^7+100 cnt[1]=cnt[1]+1; end; ed=time(); println(ed-st); println(cnt[1]) println(cnt) ---輸出 julia> include("d:\\testp.txt") 0.437000036239624 10000100 [10000100]
訪問陣列也是並行快
a=trues(10^7); for i in 1:10^6 a[i*10]=0; end cnt = Array(Int,1); cnt[1]=0; st=time(); @parallel for i in 1:10^7 cnt[1]=cnt[1]+a[i]; end; ed=time(); println(ed-st); println(cnt[1]) println(cnt) ---輸出 julia> include("d:\\testp.txt") 0.42100000381469727 9000000 [9000000]
但是訪問遞迴函式就是並行慢
function re(n::Int32) if n>10 return 1; else return re(n+1)+n; end end cnt = Array(Int,1); cnt[1]=0; st=time(); @parallel for i in 1:10^6 cnt[1]=cnt[1]+re(1); end; ed=time(); println(ed-st); println(cnt[1]) println(cnt) cnt = Array(Int,1); cnt[1]=0; st=time(); for i in 1:10^6 cnt[1]=cnt[1]+re(1); end; ed=time(); println(ed-st); println(cnt[1]) println(cnt) ---輸出 0.437000036239624 56000000 [56000000] 0.28099989891052246 56000000 [56000000]
相關文章
- 用並行查詢讓SQL Server加速執行並行SQLServer
- 執行緒和執行緒池的理解與java簡單例子執行緒Java單例
- 以生活例子說明單執行緒與多執行緒執行緒
- ClusterShell:一個在叢集節點上並行執行命令的好工具並行
- 多執行緒 -- 初學簡單例子執行緒單例
- 並行執行並行
- 一個基於配置檔案構建有向無環圖,並多執行緒執行圖上節點的例子執行緒
- 在NuoDB上執行AsteriskAST
- 在window上執行bash
- Java中使用ThreadPoolExecutor並行執行獨立的單執行緒任務Javathread並行執行緒
- wine-在mac上執行exe執行檔案Mac
- 多執行緒賣火車票簡單例子執行緒單例
- Python簡單實現多執行緒例子Python執行緒
- 在oracle 叢集多例項中執行並行操作Oracle並行
- parallel: 一個簡單的並行執行Go迴圈的庫Parallel並行Go
- 6個在本地機器上執行 Kubernetes 的工具
- 在 Azure 上使用 Docker 執行 MonoDockerMono
- 轉:在Linux上執行WinFormLinuxORM
- 在Linux機器上安裝執行Oracle(三)(轉)LinuxOracle
- 在Linux機器上安裝執行Oracle(二)(轉)LinuxOracle
- 如何取得Oracle並行執行的traceOracle並行
- 9i並行執行的限制並行
- 通過一個簡單的例子,瞭解 Cypress 的執行原理
- 如何讓 Python 像 Julia 一樣快地執行Python
- 理一下docker在各平臺上的執行機制Docker
- 使用11g dbms_parallel_execute執行並行更新(上)Parallel並行
- hadoop權威指南上 天氣例子測試執行Hadoop
- Java多執行緒下載的例子。Java執行緒
- 在LINUX下編寫程式並執行Linux
- 並行執行任務的Fork/Join框架並行框架
- 並行執行的學習與測試並行
- [Java併發]執行緒的並行等待Java執行緒並行
- 通過paramiko模組在遠端主機上執行命令
- Oracle並行操作——淺議使用並行的時機Oracle並行
- 在單獨執行緒中執行物件成員函式 (轉)執行緒物件函式
- Hazelcast JET在Spring Boot上執行ASTSpring Boot
- Phoenix:在HBase上執行SQL查詢SQL
- 在Heroku上執行Go+Revel程式Go