我想知道:在嘗試在Python中創建並行算法會有什麼優點嗎?假設我想研究一種新的並行算法,並且我可以選擇C,C#和Python,其中一個或另一個是「更好」的來測試和測試這些算法,或者它們只是「功能上等價」,除與解釋/編譯/虛擬語言相關的常量,它們都將是相同的?謝謝Python,Java,C#和並行算法
回答
C有許多選擇,但它是低級語言。英特爾的線程構建模塊是基於Cilk的商業並行庫,我聽說它很好。
這取決於你想爲Python做什麼。雖然您可以通過使用Cython(一種預編譯的Python變體)來避開GIL,但Cython編譯速度慢並且失去平臺獨立性。另外,Python是一種腳本語言,因此您通常希望在並行化之前切換爲更快的語言。也就是說,使用Python中的multiprocessing
模塊(可以避開GIL),你可以編寫一些簡單的並行代碼。
Java可能是你最好的選擇。關鍵字以及體面的原語(例如線程安全的非阻塞隊列)使它相對愉快。 Java雖然老了,所以你浪費時間編寫比Python更詳細的代碼。
我在Haskell中慢慢地(漸進地)學習並行。獲得有效運行似乎並不是最容易的事情,但如果你的任務非常平行,那麼它似乎運作良好。而且,當然,Haskell具有令人難以置信的表達力(在你完成它後,它在語法上完全不同 - 因爲imho的理由不同),並且由於它的功能性,你不會得到奇怪的狀態腐敗問題。最糟糕的情況是你的代碼不能縮放。像STM(軟件事務存儲器)這樣的庫有很多種,它們似乎比(比如鎖)更強大的(理論上)解決某些問題比命令式程序員使用的基元更好。
我會明確地使用Python,因爲編寫Python程序既快速又簡單,而且它可能已經包含了您需要的所有工具。它將允許您專注於算法,而不是處理語法和聲明。
對於基準測試,您可以使用cProfile或timeit模塊。
你想測試什麼樣的並行算法?並行編程有很多種方法。對於需要擴展到很多進程的算法,最簡單的方法可能是使用MPI。 mpi4py是一個非常好的Python實現,並且與numpy緊密集成,如果您需要處理數組數組。
如前所述,multithreading只能使用1個處理器,因爲GIL。但是這個限制只適用於這種情況。您可以在所需的多個處理器上使用multiprocessing。
最後,在Python中有用於functional programming的工具。並且coroutines可以很適合併發編程。
- 1. OpenMP C並行化算法
- 2. Java和C並行開發#
- 3. 合併排序Java算法
- 4. Java中的並行計算
- 5. 並行搜索算法
- 6. 並行蠻力算法
- 7. 並行蠻力算法GPU
- 8. 算法Scrypt和PBKDF2 - Python的
- 9. 用PHP運行c/java/python?
- 10. 實現並行算法來計算pi
- 11. 在Objective-C中加密並在Java中解密的算法
- 12. C++算法結構和類
- 13. 有效的Java列表合併算法
- 14. Java併發狄克遜算法
- 15. Java併發API工作竊取算法
- 16. 並行運行遺傳算法
- 17. python條件並計算總和?
- 18. 讓Java與Python,C,C++和Ruby交談
- 19. 在Visual Studio上並行執行Python腳本和C#腳本
- 20. 使用並行python和類
- 21. 將算法C翻譯爲Python
- 22. 翻譯CRC算法從C到Java
- 23. 合併運算符 - 使用方法(c#)
- 24. 並行C代碼距離計算
- 25. 計算/使用並行編程C++
- 26. C++並行矩陣乘法,計算不正確
- 27. 如果條件與運算符執行在c + +和python
- 28. Python Negamax算法
- 29. 算法python itertools.permutations
- 30. Python Dijkstra算法
對我來說,平行和Erlang一起去吃麪包和黃油。 Jus'說'。:-) – 2011-06-10 02:57:54
:)好吧,也許是時候檢查Erlang了,但我想知道是否它選擇研究這種算法的語言。 – 2011-06-10 02:59:18