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

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 这篇文章描述了一个使用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



相关文章
|
8月前
|
流计算 Python
Python实现动态银河系:模拟旋转的银河动画
Python实现动态银河系:模拟旋转的银河动画
134 0
|
10月前
|
前端开发 API vr&ar
Android开发之OpenGL绘制三维图形的流程
即将连载的系列文章将探索Android上的OpenGL开发,这是一种用于创建3D图形和动画的技术。OpenGL是跨平台的图形库,Android已集成其API。文章以2D绘图为例,解释了OpenGL的3个核心元素:GLSurfaceView(对应View)、GLSurfaceView.Renderer(类似Canvas)和GL10(类似Paint)。通过将这些结合,Android能实现3D图形渲染。文章介绍了Renderer接口的三个方法,分别对应2D绘图的构造、测量布局和绘制过程。示例代码展示了如何在布局中添加GLSurfaceView并注册渲染器。
255 1
Android开发之OpenGL绘制三维图形的流程
|
10月前
|
算法
LabVIEW开发圆形分子识别的方法与例程
LabVIEW开发圆形分子识别的方法与例程
66 1
|
10月前
[Qt5] 鼠标中心为基准缩放图像(halcon实现)
[Qt5] 鼠标中心为基准缩放图像(halcon实现)
301 0
|
算法 异构计算
基于FPGA的图像sobel锐化实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像sobel锐化实现,包括tb测试文件和MATLAB辅助验证
|
编解码
LabVIEW自适应屏幕分辨率的两种方法
前阵子做的一个项目是在显示器分辨率为 2560*1600,缩放选项为 150% 的笔记本上开发的,但是当 vi 文件在另一台显示器分辨率为 1920*1080,缩放选项为 150% 的笔记本上时出现了显示不完全的问题,也就是说,换成了低分辨率的显示器后,并没有自适应屏幕,因此花费了一点儿时间解决了这个问题,在此记录一下。
515 2
|
算法 数据可视化 开发工具
Baumer相机BGAPI SDK Demo软件去连接JPEG-650M相机进行采图时,发现图像显示为一条灰色条状图像(C++),联合OpenCV进行图像转换显示
Baumer相机BGAPI SDK Demo软件去连接JPEG-650M相机进行采图时,发现图像显示为一条灰色条状图像(C++),联合OpenCV进行图像转换显示
119 0
|
传感器 编解码 监控
Baumer工业相机堡盟相机如何使用Binning像素合并功能( Binning像素合并功能的优点和行业应用)(C++)(C#)
Baumer工业相机堡盟相机如何使用Binning像素合并功能( Binning像素合并功能的优点和行业应用)(C++)(C#)
340 0
|
缓存 图形学
计算机图形学——实验一 VS+OpenGL绘图环境及基本图形绘制
VS+OpenGL绘图环境及基本图形绘制 1、 熟悉OpenGL的主要功能; 2、 掌握OpenGL的绘图流程和原理; 3、 掌握OpenGL核心函数的使用; 4、 熟悉OpenGL基本图形元素的绘制函数。 二. 实验内容 1、 如预备知识所述,创建一个OpenGL工程,修改第一个程序中的Display()函数,如下: 该程序是在窗口中画两条线,分别用黄色和红色绘制。如上所述,OpenGL是一个状态机,glBegin(UINT State)可以设定如下状态: GL_POINTS 画点 GL_LINES 画线
558 0
计算机图形学——实验一 VS+OpenGL绘图环境及基本图形绘制
|
缓存 算法 计算机视觉
项目实战:Qt+OpenCV大家来找茬(Qt抓图,穿透应用,识别左右图区别,框选区别,微调位置)
项目实战:Qt+OpenCV大家来找茬(Qt抓图,穿透应用,识别左右图区别,框选区别,微调位置)