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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 这篇文章描述了一个使用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】如何快速批量下载一篇论文后的所有的参考文献?附赠Endnote分组论文管理
【科研指南8】如何快速批量下载一篇论文后的所有的参考文献?附赠Endnote分组论文管理
2144 0
|
8月前
|
机器学习/深度学习
《深度学习梯度消失问题:原因与解决之道》
梯度消失是深度学习训练中的常见问题,严重影响模型性能。其原因包括激活函数选择不当(如Sigmoid)、网络层次过深和权重初始化不合理。解决方法有:选择合适激活函数(如ReLU及其变种)、优化权重初始化(如Xavier、He初始化)、采用批量归一化、引入残差连接、使用LSTM等特殊结构、调整学习率及预训练加微调等策略。
488 8
Vue3 父组件调用子组件方法($refs 在setup()、<script setup> 中使用)
Vue3 父组件调用子组件方法($refs 在setup()、<script setup> 中使用)
1994 0
|
11月前
|
存储 API C语言
【C语言】实践:贪吃蛇小游戏(附源码)(一)
【C语言】实践:贪吃蛇小游戏(附源码)
|
11月前
|
C语言 定位技术 API
【C语言】实践:贪吃蛇小游戏(附源码)(二)
【C语言】实践:贪吃蛇小游戏(附源码)
【C语言】实践:贪吃蛇小游戏(附源码)(二)
|
存储 供应链 监控
Python 实战:打造智能进销存系统
Python 实战:打造智能进销存系统
578 0
|
11月前
|
机器学习/深度学习 存储 缓存
【CVDEBUG-1】- 页面文件太小,无法完成操作怎么办
在执行深度学习任务时,尤其是YOLO训练过程中,可能会遇到“页面文件太小,无法完成操作”的错误。这通常是由于Windows内存分配不足导致的。解决方法包括清理C盘空间和调整虚拟内存大小。具体步骤为:1) 清理桌面、系统文件夹、回收站及浏览器缓存;2) 调整虚拟内存设置。操作后重启电脑即可解决问题。
629 0
|
存储 运维 监控
数据安全性能:构建坚固防线,守护信息资产
在数字化时代,数据安全至关重要,影响企业运营稳定、客户信任及法规合规。本文强调数据安全性能的重要性,探讨面临的挑战(内部威胁、外部攻击等),提出关键防护措施(访问控制、数据加密、安全审计等),并介绍最佳实践(制定策略、采用新技术、应急响应等),助力企业构建坚固防线,守护信息资产。
519 0
|
域名解析 网络协议 安全
【域名解析DNS专栏】DNS递归查询与迭代查询的区别及影响
【5月更文挑战第24天】DNS的递归查询与迭代查询是域名解析的两种方式。递归查询由客户端发起,DNS服务器负责全程解析,速度快但可能增加服务器负载和安全风险。迭代查询则需客户端参与多次查询,虽慢但分散负载,提高安全性。理解两者差异有助于优化网站访问体验和安全性。
2049 0
【域名解析DNS专栏】DNS递归查询与迭代查询的区别及影响
|
安全 关系型数据库 API
Nuxt3 实战 (七):配置 Supabase 数据库
这篇文章介绍了如何为Nuxt项目集成Supabase数据库。文章首先阐述了选择Supabase作为Nuxt项目的数据库的理由,包括其良好的网络评价、与Nuxt的良好集成以及对用户认证和身份鉴权的支持。接着,文章详细介绍了Supabase的特点,如使用PostgreSQL作为数据库、提供完整的认证系统、支持实时数据同步和提供对象存储服务等。然后,文章指导读者如何在Nuxt项目中安装和配置Supabase,包括设置重定向策略和获取数据库访问密钥。最后,文章强调了在开发环境和生产环境中使用不同密钥的重要性。
582 0
Nuxt3 实战 (七):配置 Supabase 数据库