我尝试并行化这在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循环并行内部的并行for循环
- 2. 并行化for循环
- 3. 如何在使用GNU并行的shell中并行for循环
- 4. 嵌套并行for循环...“并行外循环”in“并行内循环作为函数”
- 5. 在Java中for循环的并行化
- 6. 在C++/cli中并行for循环
- 7. 并行for循环的C++ OpenMP指令?
- 8. 并行MATLAB for循环来计算MLE
- 9. 代for循环中并行R中
- 10. 在python中并行化for循环
- 11. for循环的并行区域内
- 12. 非for循环的OpenMP并行化
- 13. openMP - for循环和私有的并行
- 14. 如何结束while循环并跳过for循环?
- 15. for循环for循环? - Javascript
- 16. 如何对for循环进行优化?
- 17. 如何在jquery中执行“For”循环?
- 18. 如何停止for循环运行?
- 19. 并发java on for循环
- 20. 并行For循环与简单for循环在C#中。速度测试
- 21. 在foreach循环运行的for循环
- 22. For循环循环
- 23. Golang:我如何停止从循环外执行for循环?
- 24. R - 如何并行化蒙特卡洛模拟的for循环?
- 25. 如何使用OpenMP通过C++ std :: list并行化for循环?
- 26. 如何在OpenMP中并行这个for循环?
- 27. 如何正确并行嵌套的for循环
- 28. 你如何在for循环
- 29. 如何延缓for循环
- 30. 如何两个for循环
你为什么不告诉我们的并行代码不起作用? – Eran
我已经加我的主,我的函数现在 – cavaler12345
你应该添加您的代码:)) –