MPI分形图像高精度绘制程序和PC端Mandelbrot-Julia分形集预览程序
2010-07-02 13:34
561 查看
集群端程序: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端预览程序。同时输出了参数文件,可以用集群端程序读取参数文件生成高精度图片。
下图是程序界面截图
要源代码的,可以留下邮箱
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端预览程序。同时输出了参数文件,可以用集群端程序读取参数文件生成高精度图片。
下图是程序界面截图
相关文章推荐
- C# Mandelbrot和Julia分形图像生成程序更新到2010-9-14版 支持多线程计算 多核处理器
- process 2 绘制Mandelbrot分形图片
- 【转】由滤波器系数绘制尺度函数和小波函数图像的Matlab程序
- android涂鸦程序(在图像上绘制)
- 如何用python编写一个绘制马赛克图像的自写程序mask = np.zeros
- 由滤波器系数绘制尺度函数和小波函数图像的Matlab程序
- android涂鸦程序(在图像上绘制)
- 【作业】简单分形树绘制程序
- USB Camera 采集图像预览测试程序(基于linux3.9.7 QT210)
- 在Authorware中实现动态函数图像绘制的程序实现过程
- 用OpenMP加速你的程序——以分形绘制为例
- 图形的绘制,如何使用自定义画笔(颜色,线宽,线形)。如何为程序中添加选项菜单和选项设置对话框,如何使用标准颜色对话框,如何使用字体对话框,在选项对话框中实现预览功能。实现选项对话框和窗口类中的数据交换。如何改变对话框和控件的背景色,如何改变控件的文本颜色,
- 在MFC程序中使用CImage类绘制半透明图像
- MPI实现矩阵乘法程序--实现MPI传递连续数组
- 关于VC绘制图像的直方图
- 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
- MATLAB - 练习程序,求灰度图像均值、最大、最小数值
- vs2008 MFC程序 读取显示图像、更改背景图像
- IDL 绘制图像分割结果--矢量多边形
- 用JAVA进行图像识别的小程序