我嘗試並行化這在for循環,因爲我想在的java與並行流在代碼中使用。問題是..每次我嘗試這樣做,我都沒有得到整個結果。我的意思是...這個代碼應該旋轉一個角度的圖像,但如果我正在做一個並行我只會收到一半的圖像旋轉。如何並行for循環
回答
一個問題可能是在for循環之外聲明的a,b,xx,yy變量。可能是不同的(交錯)迭代覆蓋了這些變量的值。例如,
- 迭代0寫入a和b
- 迭代0停止和迭代1開始寫a和b
- 調度追溯到迭代0,但是一個和b的值現在是來自迭代1的那些。
不,這不是......我已經把這個變量我的腦海中並...沒有發生 – cavaler12345
我的意思是,這是同樣的錯誤的結果 – cavaler12345
我認爲這個實現有一些問題。
1)來自parallelstream的每個線程將重寫另一個線程所做的ImageIo.write。
2)另外,forEach是無序的,所以你不知道哪一半會先發生。
我認爲你更好的選擇是使用Stream API中的collect
方法。如果您需要幫助,我可以提供一些代碼。但是,如果您在您的問題中給我一個可測試的代碼,我將編寫並行收集操作。否則,一切順利。
編輯
我做了一些檢查,發現你的rotateImage
是罪魁禍首。這個問題與parallelStream
無關。每個點(x1,y1)都需要很多轉換,現在對我來說代碼太多了。你的算法應該採取以下護理:
- 你需要計算新的高度和圖像的寬度時 你旋轉90度順時針您destHeight = srcWidth和 反之亦然。
- 首先,你必須繞原點貴點 (X0,Y0)
- 不僅如此,您需要將您的點(X1,Y1)座標系轉換到新的
- 這個新的座標系統原點位於圖像的左上角,因此您不僅需要旋轉,還要將您的點轉換爲新的座標系。
- 另外,請注意,在你寫的旋轉方程中,你可能假設x向右增加,y朝向頂端增加,但是當你將圖像寫入像素時,xx向右增加,但是yy增加底部(而不是頂部)。
一旦你照顧這一切的平移和旋轉每個像素隨着緩衝區的高度和寬度,在rotateImage功能,我想你可以叫上你的位置parallelStream功能流和你不會有問題。
,比如OpenGL一些庫可以爲你做這個很容易。他們負責旋轉和翻譯中心周圍的每個像素矢量與旋轉矢量和平移矢量。
以及..ķ給我一次,我會編輯自己的帖子 – cavaler12345
K,我有你需要的一切職務。如果你能夠爲我並聯,我會很高興。 :D – cavaler12345
當然讓我試試。嗯。沒有足夠的代碼,使其可編譯...無論如何,你能以最低的就給1)指令文件,看看你的學歷和旋轉,也rotateImage功能呢?不知道問題是否在rotateImage函數中。 –
- 1. 並行For循環
- 2. 並行For循環
- 3. 巢做for循環並行內部的並行for循環
- 4. OpenMP,並行for循環,bigIntegers
- 5. 並行for循環,Python
- 6. 並行for循環R
- 7. 並行for循環matlab
- 8. 並行python for循環
- 9. 並行化for循環
- 10. gnu並行並行for循環
- 11. 如何在使用GNU並行的shell中並行for循環
- 12. 並行執行Oracle For循環
- 13. Java 8:如何將for循環轉換爲並行運行?
- 14. 嵌套並行for循環...「並行外循環」in「並行內循環作爲函數」
- 15. 如何結束while循環並跳過for循環?
- 16. 代for循環中並行R中
- 17. openMP - for循環和私有的並行
- 18. 並行化for循環蟒蛇
- 19. Windows中的並行for循環
- 20. 並行MATLAB for循環來計算MLE
- 21. 在C++/cli中並行for循環
- 22. 非for循環的OpenMP並行化
- 23. 用並行FOR循環節省時間
- 24. for循環的並行區域內
- 25. OpenMP與並行減少的for循環
- 26. 在python中並行化for循環
- 27. 停止並繼續執行For循環
- 28. OpenMP:無法並行嵌套for循環
- 29. opencv for循環與CUDA - 並行處理
- 30. 在Java中for循環的並行化
你爲什麼不告訴我們的並行代碼不起作用? – Eran
我已經加我的主,我的函數現在 – cavaler12345
你應該添加您的代碼:)) –