Windows+VS2022安装METIS软件包

内容摘要:

本文详细介绍如何利用CMake GUI安装、下载METIS软件包,并应用到Windows系统下Visual Studio 2022配置环境,同时对安装时出现的部分问题给出相应的解决措施。

目录

一、关于METIS软件包

二、开发环境

三、下载METIS

四、安装CMake GUI

五、用CMake GUI编译

六、修改gk_arch.h文件

七、用VS生成解决方案


一、关于METIS软件包

METIS 是一个著名的图分割和网格分解库,主要用于处理图形分割、大型稀疏矩阵的重排序以及有限元方法中的网格分解。由卡内基梅隆大学的 George Karypis 和 Vipin Kumar 开发,METIS 提供了高效的算法以解决如下问题:

1.主要功能

  • 图分割(Graph Partitioning)

    • 将图分割为指定数量的子图,最小化边界顶点的数量(以减少通信成本),同时尽量平衡每个子图的节点数。
    • 适用于并行计算的负载均衡,特别是在分布式系统中。
  • 网格分解(Mesh Partitioning)

    • 将有限元分析中的网格划分为子网格,方便分布式计算。
    • 使用经典的多层次图分割技术。
  • 稀疏矩阵重排序(Sparse Matrix Ordering)

    • 对稀疏矩阵重新排序以减少其带宽或轮廓,优化矩阵的存储和操作效率。
    • 常用于求解大型稀疏线性系统。

2.核心技术

  • 多层次方法(Multilevel Methods)

    • 通过对图进行递归收缩构建简化图,然后在简化图上进行优化,再将结果扩展回原始图。
    • 提供了高度高效的计算方法,能在较短时间内处理大规模问题。
  • 启发式算法

    • 利用启发式技术寻找接近最优的分割方案。

3.优势

  • 高效性:能在大规模稀疏图和网格上快速运行。
  • 质量优越:生成的分割和排序质量在许多应用中接近最优。
  • 广泛应用:在科学计算、机器学习、网络分析等领域有广泛应用。

图来自于KarypisG ,KumarV .A Fast and High Quality Multilevel Scheme for Partitioning Irregular Graphs[J].SIAM Journal on Scientific Computing,2006,20(1):359-392.

二、开发环境

1.操作系统:Win10/Win11

2.开发工具:Visual Studio 2022

3.开发语言:C/C++

4.METIS版本:5.1.0

5.CMake版本:3.21.5

三、下载METIS

1.下载网址:

METIS 的官网地址:http://glaros.dtc.umn.edu/gkhome/metis/metis/overview

可以在官网上找到 METIS 的详细信息、使用文档、下载链接以及相关研究论文,但笔者尝试多种方法无法打开,欢迎给出解决措施。🌹🌹

官方 METIS GitHub 镜像:https://github.com/KarypisLab/METIS

起初笔者下载5.2.1版本的METIS,在 5.2.1 版本中,METIS的文件组织方式发生了一些变化,相比于 5.1.0 版本,某些文件和目录的结构可能有所调整,新版本METIS对于末尾参考教程中提到的方法不适用,这两个新旧版本主要有以下区别:

  • GKlib:在 METIS 5.2.1 中,原先与 METIS 5.1.0 一起提供的 GKlib 目录可能已经被合并或者调整到其他位置。GKlib 是 METIS 使用的一些核心数据结构和算法的库,可能在新版本中已被重构,或已并入 METIS 的其他部分。

  • gk_arch.h:这个头文件(在 5.1.0 中用于指定机器架构)在 5.2.1 中可能已经移动,或者通过其他方式进行了优化或重构。新的版本可能将这类配置与其他编译选项和平台适配功能结合起来,因此 gk_arch.h 文件可能不再直接作为单独的头文件存在。

所以建议直接在该网站中直接下载5.1.0版本:https://github.com/xijunke/METIS-1

2.下载后解压,metis-5.1.0文件夹中包含以下内容。

四、安装CMake GUI

安装CMake GUI 对METIS进行编译。

1.下载网址

官方网址:https://cmake.org/download/(想要下载最新版本的可以从官网下载,但不建议下载最最新版本,会出现一些错误。感兴趣可查看)

GitHub下载网址:https://github.com/Kitware/CMake/releases(该网址整理各个版本的cmake安装包,可自行选择下载,但要注意和VS版本兼容)

CMake 3.21 是正式支持 Visual Studio 2022 的第一个版本,为此笔者下载的压缩包为cmake-3.21.5-windows-x86_64.msi。

 2.关于安装包.zip和.msi有什么区别,以下给出解答。

  • .msi(Microsoft Installer):

    • .msi 文件是Windows平台上常见的安装包格式,属于一种自动化安装方式。
    • 使用.msi文件安装时,安装过程会自动化处理,用户只需通过安装向导一步步完成安装。安装过程中,安装路径和其他选项可以自定义。
    • .msi 文件通常适用于大多数用户,尤其是那些希望简单快捷地安装,并且希望CMake自动配置环境变量等设置的用户。
  • .zip 文件:

    • .zip 文件是CMake的压缩包,里面包含了CMake的所有文件,但并没有提供自动化的安装过程。
    • 用户需要手动解压文件,并且需要自己配置环境变量(例如将CMake的路径添加到系统的PATH环境变量中),以便能够在命令行中直接使用CMake。
    • .zip 文件适合那些需要手动控制安装过程的高级用户,或者那些希望避免修改系统设置、手动解压并运行CMake的用户。

总结:

  • 如果你希望简单快捷地安装并自动配置,选择 .msi 安装包。
  • 如果你想手动控制安装过程或者仅仅是想解压使用,选择 .zip 压缩包。

3.笔者选择用msi安装,一路默认NEXT即可,下载完成后如下图所示。

找到bin文件夹下的图标,双击打开cmake的GUI界面,如下图所示。

五、用CMake GUI编译

1.打开CMake GUI,选择刚刚解压的METIS地址为源代码,输出路径为该地址下的build文件夹。

该build为新建空文件夹,可手动新建,但一定要保证是空文件夹。若无手动新建,后续编译程序会自动新建。

2.点击Configure按钮,选择本机安装的VS版本的生成器(一般为默认选项),点击Finish。 

3.编译结束后下面的输出框最后一行是Configure Done就可以了,继续点击Generate按钮,输出Generate Done,编译完成,如下图所示。

在build文件中可以看到METIS.sln。

 注:若点击Configure按钮后出现如下图所示报错“Error in configuration process, project files may be invalid”,给出以下解决方案。

 (1)确保所有路径(如 METIS 源码路径、Visual Studio 安装路径、CMake 安装路径等)都没有包含空格或特殊字符(这可能会导致某些工具链无法正常工作)。

 (2)确保使用的 CMake 版本与你的 Visual Studio 版本兼容。

 (3)有时候,CMake 的缓存文件可能会导致配置失败。你可以尝试清理 CMake 缓存并重新生成:删除 build 目录中的所有文件(或者只删除 CMakeCache.txt 文件),然后重新运行 CMake 配置命令或使用 CMake GUI 重新配置项目。

 (4)检查 Visual Studio 安装组件:在“开始”菜单搜索“Visual Studio Installer”,然后点击已安装的 Visual Studio 版本旁边的“修改”按钮。在“修改”界面中,查看是否选中了“C++ 生成工具”(C++ build tools)和相关的 Windows SDK。如果没有,勾选并重新安装。

以Visual Studio 2022为例,确保安装以下两部分。

 (5)以管理员身份运行 Visual Studio和CMake GUI,重新配置项目。

六、修改gk_arch.h文件

1.在解压的文件夹metis-5.1.0中打开文件夹GKlib,找到文件gk_arch.h,用记事本或者VS打开。

 2.将这一行代码define rint(x) ((int)((x)+0.5)) 注释掉,如下图所示,保存文件。

七、用VS生成解决方案

1. 在刚刚METIS新建的build文件夹下选择 METIS.sln 文件,用VS打开,如下图所示。

2.将此处的Debug改为Release,如下图所示。

3.在解决方案管理器中,右击ALL_BUILD,选择“生成”,生成解决方案完成。

欢迎交流🌹🌹


参考文章:

使用METIS软件包进行图划分 - 简书

Win10 VS安装METIS_vs metis-优快云博客

metis-5.1.0安装包和manual手册 2 What is new in version 5.0 4 2.1 Changes in the command-line programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1.1 Migration issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Changes in the API routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2.1 Migration issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3 Overview of METIS 6 3.1 Partitioning a graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.2 Alternate partitioning objectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.3 Support for multi-phase and multi-physics computations . . . . . . . . . . . . . . . . . . . . . . . . 8 3.4 Partitioning a mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.5 Partitioning for heterogeneous parallel computing architectures . . . . . . . . . . . . . . . . . . . . . 8 3.6 Computing a fill-reducing ordering of a sparse matrix . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.7 Converting a mesh into a graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4 METIS’ stand-alone programs 9 4.1 Input file formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.1.1 Graph file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.1.2 Mesh file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.3 Target partition weights file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.2 Output file formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2.1 Partition file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
### 使用 METIS 进行图或网格分区 #### 准备工作 在使用 METIS 工具之前,需先完成其安装。对于 Windows 用户,在安装完成后可在 `manual/` 目录下找到名为 `manual.pdf` 的文档[^2]。该手册提供了详细的命令行程序和 API 使用指南。 #### 图划分流程 为了执行图划分操作,可以利用 METIS 提供的主要函数之一——`METIS_PartGraphKway` 或者 `METIS_PartGraphRecursive` 来实现。前者适用于较大规模的分区需求,而后者则采用递归二分法来处理较小规模的情况[^3]。 - **输入参数准备** 输入图形数据通常以 CSR (Compressed Sparse Row) 格式表示,即通过数组 `xadj[]` 和 `adjncy[]` 描述邻接关系。具体来说, - 数组 `xadj[i]` 存储第 i 个顶点对应的边列表起始位置; - 而 `adjncy[]` 则依次记录各条边上相邻节点编号。 此外还需要指定其他一些配置选项,比如期望得到多少份子集 (`nparts`) 及权重向量等。 - **调用接口实例** ```c #include "metis.h" int main() { idx_t nvertices = ...; // 总结点数 idx_t nedges = ...; // 边的数量 idx_t *xadj = ...; idx_t *adjncy = ...; int nparts = 8; // 设定划分为8部分 /* 设置控制参数 */ idx_t options[METIS_NOPTIONS]; METIS_SetDefaultOptions(options); /* 执行k路划分 */ METIS_PartGraphKway(&nvertices, NULL, xadj, adjncy, NULL, NULL, &nparts, NULL, NULL, options, NULL); return 0; } ``` 上述代码展示了如何加载图结构并通过 `METIS_PartGraphKway()` 实现多路划分的过程。注意实际应用时还需根据具体情况调整变量定义及初始化逻辑。 #### 网格划分方式 除了针对抽象图模型的操作之外,当面对有限元分析等领域内的物理空间离散化问题时,则可选用专门设计给这类场景下的两种额外模式: - 基于单元连接性的对偶图(`METIS_PartMeshDual`) - 面向节点间关联性的节点图(`METIS_PartMeshNodal`) 这两种方法均接受标准 FEM/FVM mesh 文件作为输入源,并分别依据各自特点构建相应的内部表达形式以便后续运算。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值