轻松上手:Linux下metis与mt-metis的全面安装和使用教程

本文涉及的产品
文档翻译,文档翻译 1千页
文本翻译,文本翻译 100万字符
图片翻译,图片翻译 100张
简介: Linux下的metis与mt-metis的安装和使用本文的Linux包括VMare和windows下的WSL环境下安装metis串行和并行本文还讲述了电脑的线程以及和超线程的区别,如何寻找,如何判别,请看下文

Linux下的metis与mt-metis的安装和使用

  • 本文的Linux包括VMare和windows下的WSL环境下安装metis串行和并行
  • 本文还讲述了电脑的线程以及和超线程的区别,如何寻找,如何判别,请看下文

装备:

  1. Ubuntu18.6.4LTS
  2. gcc7.5.0
  3. cmake version 3.10.2

metis的安装

别相信网上的一键sudo apt-get install libmetis-dev,有很多问题!!!

  1. 下载链接->metis-5.1.0.tar.gz
  2. 解压成文件夹,名字假设为A
  3. 打开A/include/metis.h,根据自己电脑的位数(32or64)选择
// 64位
#define IDXTYPEWIDTH 64 
// 32位
#define IDXTYPEWIDTH 32
  1. 在A目录执行以下编译命令
make config
make
sudo make install
  1. 可能出现的问题:
  1. make[2]: Leaving directory '/home/xxx/metis/build/Linux-x86_64'
  1. 无伤大雅,没有问题
  1. 配置环境
  1. sudo vim /etc/ld.so.conf
  2. 末尾添加include /usr/local/bin保存
  3. 运行sudo ldconfig更新
  1. 测试环境
#include <cstddef> /* NULL */
#include <metis.h>
#include <iostream>
#include <vector>
int main(){
    idx_t nVertices = 6;//顶点个数
    idx_t nEdges    = 7;//边的条数
    idx_t nWeights  = 1;//权重
    idx_t nParts    = 2;//几类
    idx_t objval;
    std::vector<idx_t> part(nVertices, 0);
    // Indexes of starting points in adjacent array
    std::vector<idx_t> xadj = {0,2,5,7,9,12,14};
    // Adjacent vertices in consecutive index order
    std::vector<idx_t> adjncy = {1,3,0,4,2,1,5,0,4,3,1,5,4,2};
    // Weights of vertices
    // if all weights are equal then can be set to NULL
    std::vector<idx_t> vwgt(nVertices * nWeights, 0);
    int ret = METIS_PartGraphKway(&nVertices,& nWeights, xadj.data(), adjncy.data(),
                       NULL, NULL, NULL, &nParts, NULL,
                         NULL, NULL, &objval, part.data());
    std::cout << ret << std::endl;
    for(unsigned part_i = 0; part_i < part.size(); part_i++){
    std::cout << part_i << " " << part[part_i] << std::endl;
    }
    return 0;
}
  1. g++ -std=c++11 test.cpp -o test -lmetis
  2. 结果:
1
0 1
1 0
2 0
3 1
4 1
5 0

ps:分割是随机的,只要看你是不是分为0,1共2类

mt-metis的安装

mt-metis就是metis的多线程版本,能够进行并行计算
  1. 下载链接->mt-metis-0.7.2.tar.gz
  2. 解压成文件夹,名字假设为A
  3. 打开A/metis/include/metis.h,根据自己电脑的位数(32or64)选择
// 64位
#define IDXTYPEWIDTH 64 
// 32位
#define IDXTYPEWIDTH 32
  1. 回到A目录里,运行编译命令
./configure
make
sudo make install
  1. 可能的问题
  1. ./configure:command not found解决办法sh configure 然后添加执行权限 chmod u+x configure
  2. 如果是wsl安装,把第一个命令改成bash ./configure即可
  1. 使用方法
mtmetis test.graph 2 test.part -t -T n

解释:

  1. test.graph 是图表的文件,例如下面内容:第一行就是顶点和边的个数,顶点从1开始,下面就是每两个顶点连接成的边
10 10
10 2
1 3
2 4
3 5
4 6
5 7
6 8
7 9
8 10
9 1
  1. 2是分成的类别数量
  2. test.part是分割后生成的文件
  3. -t能显示mtmetis的运行时间
  4. -T n n代表线程数量,默认以全部线程数,不能超过最大的线程数

超线程与线程

接着上题,你可能会疑惑该如何查找自己的线程数量为多少?那什么又是超线程呢?
  • 以windows为例,打开任务管理器-》性能
  • 能够看到右下角有内核逻辑处理器,能发现逻辑处理器=内核*2,这里的逻辑处理器数量就是超线程数量,线程数量=内核数量
  • 超线程是intel提出的虚拟化处理器,在高性能计算中我们不能使用超线程,因此一定要知道自己最真实的线程数量有多少
  • 在vmare虚拟机的处理器配置中也用到了超线程,为了规避这种情况,可以设置1个处理器,内核数量为真实线程数量(因为每个人就是1个CPU处理器,x核,而intel使用超线程让内核*2)
  • 你可能还看到左侧线程有3000,4000。刚刚又说电脑只有n个总线程,远小于他!xd,可别忘了,线程切换的开销很小,电脑一会就切换了好多线程,所以你看到了有3,4k。


DyeDD
+关注
目录
打赏
0
0
0
0
4
分享
相关文章
|
7天前
|
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
61 32
|
10天前
|
【Linux】 Linux makefile 教程
本文详细介绍了 Linux 环境下 Makefile 的基本结构、语法和使用方法,并通过一个简单的 C++ 项目示例演示了 Makefile 的实际应用。Makefile 是一个强大而灵活的工具,通过合理配置,可以极大地简化项目的编译和管理过程,提高开发效率。希望本文能帮助您更好地理解和应用 Makefile,在实际项目中高效管理代码的编译和构建。
44 16
|
11天前
|
【Linux】 Linux makefile 教程
本文详细介绍了 Linux 环境下 Makefile 的基本结构、语法和使用方法,并通过一个简单的 C++ 项目示例演示了 Makefile 的实际应用。Makefile 是一个强大而灵活的工具,通过合理配置,可以极大地简化项目的编译和管理过程,提高开发效率。希望本文能帮助您更好地理解和应用 Makefile,在实际项目中高效管理代码的编译和构建。
41 20
|
13天前
|
Linux 安装 Qualcomm ® SnapdragonTM Profiler
通过本文的详细介绍,您应该已经成功在 Linux 系统上安装并配置了 Qualcomm® Snapdragon™ Profiler,并能够连接 Android 设备进行性能分析。Snapdragon Profiler 提供了丰富的工具和功能,可以帮助开发者深入了解应用程序的性能瓶颈,从而进行优化。希望本文能对您有所帮助,让您在开发过程中更高效地使用 Snapdragon Profiler 进行性能分析和优化。
48 10
|
15天前
|
Linux安装svn并启动
Linux安装svn并启动
52 10
Linux磁盘挂接教程
Linux磁盘挂接教程
64 14
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
76 7
linux8安装oracle 11g遇到的问题记录
Oracle 11g在Linux 8上安装时会遇到link编译环节的问题。官方建议忽略安装中的链接错误,安装完成后应用DBPSU 11.2.0.4.240716补丁及一次性补丁33991024,再重新编译二进制文件,并配置监听器和数据库。但因11g已退出服务期,这些补丁需付费获取。网上信息显示22年1月的PSU补丁也可解决问题,找到该补丁后按常规方式打补丁即可。如有需求或疑问可咨询我。
75 20
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
232 7
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等