我對並行計算瞭解不多,但是我想對任務中的「進一步工作」提出建議並希望確保我是正確的。 我已經用C++寫了一個光線跟蹤器。我在vector
中存儲射線信息(例如命中點),並在模擬結束時將這些向量寫入CSV(這是不錯的編程?)如果我跟蹤了一些射線,說1000,與跟蹤相比,仿真需要更多時間100次射線10次。我認爲這是因爲我的vector's
的大小更大,所以它們在堆內存(?)中佔用大量空間。每條射線都可以在沒有來自其他射線的信息的情況下追蹤(該節目正在乞求並行)。我正確的是說,如果程序是並行的,每個處理器都有它自己的內存,那麼不會是一個佔用大量內存的大型向量,而是可以更有效地處理的小向量?內存使用並行編程
內存使用並行編程
回答
假設每個處理器都有自己的「內存」,這聽起來像是嘗試提高CPU高速緩存的使用率(不管您的任務如何並行,RAM都保持不變 - 除非您將它分佈到羣集上)。雖然一般情況下並行化會提供更多的CPU緩存,但是由於線程在內核之間遷移(Windows實際上會這樣做),因此可能會有更多的緩存未命中。
也許你只是以低效的方式使用std :: vector。例如。您將在開始處插入項目或逐個追加項目(這些操作可能會佔用O(vector.size()
))。或者可能存在其他數據結構,其在光線數量增加時減慢。這可能可以在幾個處理器之間不分裂任務的情況下解決。
儘管程序肯定會從並行化中獲益。
這正是我所做的。我從來沒有被要求'處理'我的結果,所以我花了很多精力來有效地跟蹤場景中的光線。但是爲了顯示我正在做的事實際上是正確的,每次光線碰到一個物體時,我都會追加一個帶有該生物體座標的「矢量」並繼續計算。最後,我將該矢量寫入csv並使用Matlab來繪製漂亮的圖片 - 是否有快速修復的方法? – Seb 2013-04-10 17:38:08
矢量中元素的最終數目是多少?您可以將向量的容量設置爲該數字(或稍大一些)以避免在追加新元素時重新分配內存:'your_vector.reserve(1000000);'(假設您將存儲最多1000000個項目) 更智能的方式可能是這個輸出數據有一個合理大小的緩衝區,並最終將其刷新到CSV文件,而不是將所有內容存儲在RAM中,並在最後進行一次大的寫入。 – Inspired 2013-04-10 17:44:51
我曾考慮調整矢量大小,但不幸的是,光線可能會在場景周圍發生反彈,所以生命值的數量將遠遠大於物體的數量。對於緩衝區,我是否瞭解你:我有一個'vector.reserve(100000k)',並且當它達到容量時,我經常將它寫入CSV中? – Seb 2013-04-10 17:50:21
- 1. 並行編程使用OpenMP
- 2. 使用C#進行並行編程
- 3. 使用工具進行並行編程
- 4. 編譯並運行內存中的c/C++程序
- 5. 並行調用並行編程
- 6. 並行編程
- 7. 並行編程使用加速(Data.Array.Accelerate)
- 8. 使用C++異步並行編程async
- 9. 在C#中使用並行編程
- 10. 計算/使用並行編程C++
- 11. R - 並行編程
- 12. Flash並行編程
- 13. MPI並行編程
- 14. QT並行編程
- 15. 併發內核執行需要使用固定內存
- 16. 使用行內彙編來更新內部系統寄存器
- 17. 初學彙編編程內存使用問題
- 18. 使用內部連接使用合併的存儲過程
- 19. 並行編程與並行編程相同嗎?
- 20. 用戶空間內存編輯程序
- 21. 內存使用多線程
- 22. 通過編碼計算應用程序使用的內存
- 23. 如何使用Testng以編程方式運行並行套件?
- 24. 如何在java中使用輸入值進行並行編程
- 25. 使用python的多處理和進程並行編程defunc
- 26. Cilk的共享內存並行編程方法是萬靈丹嗎?
- 27. 有沒有辦法在使用MPI的並行過程中共享內存?
- 28. 並行端口Java編程
- 29. C#.net 4並行編程
- 30. 並行編程和C++
或者也許讓程序通過線程('std :: thread')允許並行執行。 – Mushy 2013-04-10 17:10:27
很可能您在1x1000和10x100測試中使用了不同的光線。如果是這樣,我會調查相同的光線正在測量他們的時間。我願意賭一個不那麼小的身體部位,以致向量的大小完全不相關。主存儲器速度以GB/s爲單位進行測量 - 額外元素的「一對」(一千或幾百萬)對執行速度沒有明顯影響。爲什麼不編寫一些分析代碼來查看向量的速度(或查找其他人的結果)QueryHighPerformanceFrequency和QueryHighPerformanceTimer - 在Windows上工作時都很方便。 – enhzflep 2013-04-10 17:18:05
好的 - 基本上回答了我的問題。與較小的矢量相比,幾百萬個元素的矢量不會顯着影響模擬。謝謝 – Seb 2013-04-10 17:39:46