热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

openmp超线程并行比串行慢_并行计算笔记(001)

并行计算笔记(001)-安装mpi,openmp动力需要用高性能计算求解微分方程,这也将是我这接下来三年的学习方向之一。目前以MPI为主,将来肯定会涉及

并行计算笔记(001)-安装mpi,openmp 动力
需要用高性能计算求解微分方程,这也将是我这接下来三年的学习方向之一。目前以MPI为主,将来肯定会涉及到异构计算。希望写这些笔记记录我的修炼历程。目前的学习目标及就是掌握将偏微分方程组的差分形式稠密化。 对将来的看法
主要的方向是并行计算的程序开发。希望能够做数学性更强的研究。并行计算最合适的看来还是神经网络和计算机图形学。因为如果要将计算潜力发挥出来,需要时间复杂度和空间复杂度是一个量级的。偏微分方程组的差分求解的问题在于,将偏微分方程组差分化之后,得到的是稀疏矩阵,无法完全发挥计算潜力。
所以将来可能会涉及一些计算机图形学和神经网络,主要还是应用,计算机体系结构会涉及的比较少。 为并行机编程[1]
1988年McGraw和Axelrod定义了为并行机开发应用软件的四条不同的途径。
1. 扩展现有编译器以便将串行程序转化为并行程序。
2. 扩展现有编程语言,增加新操作以允许用户表达并行性。
3. 在现有串行语言上增加一个并行语言层。
4. 定义全新的并行语言和编译系统。

现状:最流行的是在现有的串行语言上,通过增加用函数调用或编译指导语句来表示低层语句,使用MPI,OpenMP就是这方面的例子。低层并行编程可以产生具有高性能和好的移植性的并行程序。与高层并行编程语言相比,其不足之处在于编程和调试比较难。 windows下利用Mingw和msmpi编译运行mpi并行程序[2][3] 1. 安装Mingw和msmpi 1.1 mingw-w64
参考这个 https://blog.csdn.net/ZHAOJUNWEI08/article/details/86602120
下载一套mingw不用安装,直接解压到某个位置,把mingw下的bin目录加入环境变量。
输入gcc -v
得到gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project),说明安装好了。 1.2 msmpi
[msmpi](https://docs.microsoft.com/en-us/message-passing-interface/microsoft-mpi)是微软提供的mpi实现。下载好两个文件msmpisdk.msi and MSMpiSetup.exe都装好。
在cmd中输入set MSMPI,得到
MSMPI_BENCHMARKS=C:Program FilesMicrosoft MPIBenchmarks
MSMPI_BIN=C:Program FilesMicrosoft MPIBin
MSMPI_INC=C:Program Files (x86)Microsoft SDKsMPIInclude
MSMPI_LIB32=C:Program Files (x86)Microsoft SDKsMPILibx86
MSMPI_LIB64=C:Program Files (x86)Microsoft SDKsMPILibx64

64位系统得到这样的结果表示安装好了msmpi。
按照[MinGW coding under Windows (C, C++, OpenMP, MPI)](https://www.math.ucla.edu/~wotaoyin/windows_coding.html)
处理一下msmpi文件,其中$MSMPI_LIB64这些路径由set MSMPI查看。

> mkdir ~/msmpi # create a temporary folder under your home directory
> cd ~/msmpi # enter the folder
> cp "$MSMPI_LIB64/msmpi.lib" . # copy msmpi.lib to ~/msmpi/; the import library, which is a placeholder for dll
> cp "$WINDIR/system32/msmpi.dll" . # copy msmpi.dll to ~/msmpi/; the runtime library
> gendef msmpi.dll # generate msmpi.def. For 32-bit, use: gendef -a msmpi.dll, which specifies the stdcall format
> dlltool -d msmpi.def -D msmpi.dll -l libmsmpi.a # generate the (static) library file libmsmpi.a
> cp libmsmpi.a /mingw64/lib # copy this library file to where g++ looks for them;
# try "g++ --print-search-dirs"
> cp "$MSMPI_INC/mpi.h" . # copy the header file mpi.h to ~/msmpi/

在 ~/msmpi 文件夹中,打开 mpi.h文件 , 找到“typedef __int64 MPI_Aint”,在这条语句上面一行加上 “#include ” (without the quotes), 来定义 __int64.
> cp mpi.h /mingw64/include # copy the header file to the default include folder
c程序的编译命令和运行命令为:

>gcc -o mpi_hello_world.exe mpi_hello_world.c -l msmpi -L "C:Program Files (x86)Microsoft SDKsMPILibx64" -I "C:Program Files (x86)Microsoft SDKsMPIInclude"

运行程序命令为mpiexec -n 3 mpi_hello_world.exe,这里3是进程数
得到

Hello world from processor LAPTOP-8JDFVNA8, rank 2 out of 3 processors
Hello world from processor LAPTOP-8JDFVNA8, rank 0 out of 3 processors
Hello world from processor LAPTOP-8JDFVNA8, rank 1 out of 3 processors

1.3 openmp
编译使用openmp需要加上 -fopenmp
gcc -fopenmp omp_hello.c -o omp_hello

总结

win10环境下使用msmpi其实有点麻烦,linux使用openmpi其实非常简单。关于msmpi,下面是今天安装测试用到的所有文件。

https://github.com/chenlin0/Learning/tree/master/MPI

其实visual studio配置msmpi看起来更好用,不过因为以后主要还是使用linux,所以还是使用gcc

参考文献

[1] Parallel Programming in C with MPI and OpenMP, Michael J. Quinn, McGraw-Hill, 2003.

[2] https://blog.csdn.net/xenonhu/article/details/78196443

[3] https://www.math.ucla.edu/~wotaoyin/windows_coding.html



推荐阅读
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 解决针织难题:R语言编程技巧与常见错误分析 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 你的问题在于:1. 代码格式混乱,缺乏必要的缩进,导致可读性极低;2. 使用 `strlen()` 和 `malloc()` 函数时,必须包含相应的头文件;3. `write()` 函数的返回值处理不当,建议检查并处理其返回值以确保程序的健壮性。此外,建议在编写代码时遵循良好的编程规范,增加代码的可维护性和可读性。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Python SDK,即Python软件开发工具包,是为开发者提供的一系列工具和库,旨在简化使用Python进行应用程序开发的过程。它不仅包括了基本的编程接口,还涵盖了各种实用工具和示例代码,帮助开发者更高效地构建和测试软件。通过使用Python SDK,开发者可以轻松集成复杂的功能模块,提高开发效率和代码质量。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
author-avatar
奎奎201277
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有