MPI分形图像高精度绘制程序和PC端Mandelbrot-Julia分形集预览程序

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
云原生网关 MSE Higress,422元/月
简介: 这篇文章描述了一个使用2010年技术的集群程序,该程序基于Linux + MPI + C++或Windows + .NET + C#,用于并行计算生成高分辨率BMP图像,特别是Mandelbrot和Julia集。在8台节点上,程序实现了7.31的稳定加速比,并在更大规模任务中有望提升。它支持MPI并行计算、任务日志、不同阶数的分形集生成、批处理、多线程以及优化的颜色处理等功能。创新点包括颜色表的正弦控制、动态调整运算精度、复杂颜色生成、优化的颜色更新和并发机制等。程序产生的图像样本显示了其多样性和质量。作者提供源代码,并提到设计思路可应用于类似图像生成任务。

改文章是本人在2010年写的,使用的技术比较古老。 轻喷。 搬运到这里


集群端程序:Linux + MPI + C++。 Windows + dotNET + C#。更详细情况可以参见我的相册


要源代码的,可以留下邮箱





MPI程序在集群上8台结点机输出4096×4096分辨率BMP图像时,达到了最大7.31的稳定加速比,达到预期目的。而且随着画布尺寸的增加,拆分块数的相应适当增加,相信加速比还有提高的余地。程序在8192×8192分辨率BMP恶事,65进程,8结点机情况下,一度达到了7.33的加速比,由于运行时间较长,只计算了一次,不列为稳定的数据。


程序功能设计上已经达到预期全部功能和指标:


基本功能:


①支持MPI并行计算;


②任务日志文件的输出;


③支持高阶(三阶、四阶、五阶)Mandelbrot集和Julia集的生成。


④自动批量无人值守处理任务。


⑤PC端程序支持多线程并行计算,能够充分发挥多核处理器的全部性能,默认最大支持128线程。


创新元素:


①  颜色表的颜色由正弦函数控制,变化柔和。


②  高精度浮点和低精度浮点运算根据需要自动切换。


③  颜色调配更加复杂,产生图像的颜色和形状更加多样化。


④  支持ini型参数文件的输出和读取,使得分形图像具有便携性(一个参数文件不到1KB)且不用担心图像精度问题。


⑤  优化了原算法的颜色生成函数,使得生成颜色所需时间是原来的十分之一。


⑥  优化了PC端程序的随机颜色功能,以前的随机只是改变一个100以内的自然数,现在外加4个颜色控制参数也一起随机生成,使得颜色变化更加丰富,而省去了手动调整。


⑦  优化了PC端“颜色更新”功能:形状控制参数不变时,收敛速度不用重复计算,省去了大部分计算时间,直接用旧的收敛速度生成新图片。可以节省50%到95%的计算时间。


⑧  为MPI程序增加背景线程。最初版本没有这个,后来版本有了背景线程,假设有八台结点机,第一台结点机只有八分之一的几率是“短板”,只要不是短板,就不会阻塞其他结点机。所以大多数情况下,背景线程提高了计算速度。


⑨  改进算法,传输收敛速度,而不是传输颜色。用16bit short型,节省一半的数据传输量。


⑩  支持任意画布尺寸(除非内存限制),消除了2n的画布宽度限制,因为计算时程序会自动填补画布到2n大小,输出图像时再去掉多余部分。


本文的MPI设计思想对其他领域中可以分块生成图像的任务有一定指导作用。



以下图片由PC端预览程序。同时输出了参数文件,可以用集群端程序读取参数文件生成高精度图片。


image.png


image.png


image.png


image.png


image.png


image.png


image.png


image.png


image.png


image.png


image.png


image.png


image.png


image.png


下面是程序的界面

image.png



相关文章
|
2月前
【STM32】基于HAL库的360度编码器、摇杆代码编写
【STM32】基于HAL库的360度编码器、摇杆代码编写
|
2月前
|
算法 计算机视觉 异构计算
基于FPGA的图像RGB转HSV实现,包含testbench和MATLAB辅助验证程序
基于FPGA的图像RGB转HSV实现,包含testbench和MATLAB辅助验证程序
|
2月前
|
算法 计算机视觉 异构计算
基于FPGA的图像差分运算及目标提取实现,包含testbench和MATLAB辅助验证程序
基于FPGA的图像差分运算及目标提取实现,包含testbench和MATLAB辅助验证程序
|
2月前
|
算法
LabVIEW在同一个面板下描绘模拟波形和数字波形
LabVIEW在同一个面板下描绘模拟波形和数字波形
23 0
|
5天前
|
算法 计算机视觉 异构计算
基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证
```markdown ## FPGA 仿真与 MATLAB 显示 - 图像处理的 FFT/IFFT FPGA 实现在 Vivado 2019.2 中仿真,结果通过 MATLAB 2022a 展示 - 核心代码片段:`Ddddddddddddddd` - 理论:FPGA 实现的一维 FFT/IFFT,加速数字信号处理,适用于高计算需求的图像应用,如压缩、滤波和识别 ```
|
28天前
|
计算机视觉
OpenCV图像像素逻辑操作
OpenCV图像像素逻辑操作
|
2月前
|
算法
LabVIEW开发圆形分子识别的方法与例程
LabVIEW开发圆形分子识别的方法与例程
22 1
|
2月前
|
存储 索引
LabVIEW中的波形图和波形图表有什么区别在LabVIEW中更改波形图表的历史长度
LabVIEW中的波形图和波形图表有什么区别在LabVIEW中更改波形图表的历史长度
22 2
|
2月前
|
编解码 算法 图形学
LabVIEW中调整图像大小
LabVIEW中调整图像大小
25 0
|
2月前
|
存储 算法 算法框架/工具
基于HSV色度空间的图像深度信息提取算法FPGA实现,包含testbench和MATLAB辅助验证程序
该文档介绍了在一个FPGA项目中使用HSV色彩模型提取图像深度信息的过程。通过将RGB图像转换为HSV,然后利用明度与深度的非线性映射估计深度。软件版本为Vivado 2019.2和MATLAB 2022a。算法在MATLAB中进行了对比测试,并在FPGA上实现了优化,包括流水线并行处理和查找表技术。提供的Verilog代码段展示了RGB到灰度的转换。实验结果和核心程序的图片未显示。