開源的PMPI庫實現及示例代碼

開源的PMPI庫實現及示例代碼

PMPI (Profiling MPI) 是MPI標準中定義的接口,允許開發者通過攔截MPI調用進行性能測量和調試。以下是幾個常用的開源PMPI庫實現:

1. MPICH的PMPI接口

MPICH本身提供了PMPI接口,可以直接使用。

2. OpenMPI的PMPI接口

OpenMPI也支持PMPI接口。

3. 第三方PMPI工具

(1) TAU (Tuning and Analysis Utilities)

TAU是一個性能分析工具集,支持PMPI接口。

(2) Score-P

Score-P是一個性能測量基礎設施,支持MPI分析。

(3) Extrae

Extrae是一個動態跟蹤工具,支持MPI分析。

(4) mpiP

mpiP是一個輕量級的MPI性能分析工具。

示例代碼

下面是一個簡單的PMPI包裝器示例,用于測量MPI_Send和MPI_Recv的調用次數和時間:

#include <mpi.h>
#include <stdio.h>
#include <time.h>// 聲明PMPI函數原型
extern int PMPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm);
extern int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status);// 全局計數器
static int send_count = 0;
static int recv_count = 0;
static double send_time = 0.0;
static double recv_time = 0.0;// 包裝MPI_Send
int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) {double start_time = MPI_Wtime();int ret = PMPI_Send(buf, count, datatype, dest, tag, comm);double end_time = MPI_Wtime();send_count++;send_time += (end_time - start_time);return ret;
}// 包裝MPI_Recv
int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) {double start_time = MPI_Wtime();int ret = PMPI_Recv(buf, count, datatype, source, tag, comm, status);double end_time = MPI_Wtime();recv_count++;recv_time += (end_time - start_time);return ret;
}// 打印統計信息的函數
void print_mpi_stats() {int rank;MPI_Comm_rank(MPI_COMM_WORLD, &rank);printf("[Rank %d] MPI_Send called %d times, total time: %f seconds\n", rank, send_count, send_time);printf("[Rank %d] MPI_Recv called %d times, total time: %f seconds\n", rank, recv_count, recv_time);
}// 示例MPI程序
int main(int argc, char** argv) {MPI_Init(&argc, &argv);int rank, size;MPI_Comm_rank(MPI_COMM_WORLD, &rank);MPI_Comm_size(MPI_COMM_WORLD, &size);int data = rank;int recv_data;if (rank == 0) {for (int i = 1; i < size; i++) {MPI_Send(&data, 1, MPI_INT, i, 0, MPI_COMM_WORLD);MPI_Recv(&recv_data, 1, MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);}} else {MPI_Recv(&recv_data, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);MPI_Send(&data, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);}print_mpi_stats();MPI_Finalize();return 0;
}

編譯和使用

  1. 將上述代碼保存為 mpi_profile.c
  2. 編譯:mpicc mpi_profile.c -o mpi_profile
  3. 運行:mpirun -np 4 ./mpi_profile

更完整的PMPI工具使用示例

以mpiP為例:

  1. 首先安裝mpiP:git clone https://github.com/LLNL/mpiP && cd mpiP && ./configure && make
  2. 編譯你的MPI程序時鏈接mpiP庫:
    mpicc -g -O0 your_program.c -o your_program -L/path/to/mpiP/lib -lmpiP -lbfd -liberty -lm -lunwind
    
  3. 運行程序:
    LD_PRELOAD=/path/to/mpiP/lib/libmpiP.so mpirun -np 4 ./your_program
    
  4. 程序運行后會生成 mpiP_*.txt 文件,包含MPI調用統計信息。

這些工具可以幫助你分析MPI程序的性能瓶頸、通信模式等問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/78806.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/78806.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/78806.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity 基于navMesh的怪物追蹤慣性系統

今天做項目適合 策劃想要實現一個在現有的怪物追蹤系統上實現怪物擁有慣性功能 以下是解決方案分享&#xff1a; 怪物基類代碼&#xff1a; ? using UnityEngine; using UnityEngine.AI;[RequireComponent(typeof(NavMeshAgent))] [RequireComponent(typeof(AudioSource))] …

PyTorch進階學習筆記[長期更新]

第一章 PyTorch簡介和安裝 PyTorch是一個很強大的深度學習庫&#xff0c;在學術中使用占比很大。 我這里是Mac系統的安裝&#xff0c;相比起教程中的win/linux安裝感覺還是簡單不少&#xff08;之前就已經安好啦&#xff09;&#xff0c;有需要指導的小伙伴可以評論。 第二章…

【區塊鏈安全 | 第三十八篇】合約審計之獲取私有數據(二)

文章目錄 前言漏洞代碼代碼審計攻擊步驟修復/開發建議審計思路前言 在【區塊鏈安全 | 第三十七篇】合約審計之獲取私有數據(一)中,介紹了私有數據、訪問私有數據實例、Solidity 中的數據存儲方式等知識,本文通過分析具體合約代碼進行案例分析。 漏洞代碼 // SPDX-Licens…

《微服務與事件驅動架構》讀書分享

《微服務與事件驅動架構》讀書分享 Building Event-Driver Microservices 英文原版由 OReilly Media, Inc. 出版&#xff0c;2020 作者&#xff1a;[加] 亞當 ? 貝勒馬爾 譯者&#xff1a;溫正東 作者簡介&#xff1a; 這本書由亞當貝勒馬爾&#xff08;Adam Bellemare…

小剛說C語言刷題——第22講 二維數組

昨天我們講了一維數組&#xff0c;今天我們來講二維數組。 1.定義 二維數組是指在數組名后跟兩個方括號的數組。 2.語法格式 數據類型 數組名[下標][下標] 例如&#xff1a;int a[5][9];//表示5行9列的數組 3.訪問二維數組元素 格式&#xff1a;數組名[行坐標][列坐標]…

Vue 大文件分片上傳組件實現解析

Vue 大文件分片上傳組件實現解析 一、功能概述 1.1本組件基于 Vue Element UI 實現&#xff0c;主要功能特點&#xff1a; 大文件分片上傳&#xff1a;支持 2MB 分片切割上傳實時進度顯示&#xff1a;可視化展示每個文件上傳進度智能格式校驗&#xff1a;支持文件類型、大小…

「邏輯推理」AtCoder AT_abc401_d D - Logical Filling

前言 這次的 D 題出得很好&#xff0c;不僅融合了數學邏輯推理的知識&#xff0c;還有很多細節值得反復思考。雖然通過人數遠高于 E&#xff0c;但是通過率甚至不到 60%&#xff0c;可見這些細節正是出題人的側重點。 題目大意 給定一個長度為 N N N 的字符串 S S S&#…

騰訊后臺開發 一面

一、手撕 合并升序鏈表 合并兩個排序的鏈表_牛客題霸_牛客網 順時針翻轉矩陣 順時針旋轉矩陣_牛客題霸_牛客網 二、八股 1、靜態變量和實例變量 public class House {public static String buildDate "2024-10-27"; // 靜態變量public String color; // 實…

Unity 動畫

Apply Root Motion 勾選的話就會使用動畫片段自帶的位移 Update Mode &#xff08;動畫重新計算骨骼位置轉向縮放的數值&#xff09;&#xff1a; Normal &#xff1a; 隨Update走&#xff0c;每次Update都計算Animate Physics &#xff1a;與 fixed Update() 同步&#xff0…

NDT和ICP構建點云地圖 |【點云建圖、Ubuntu、ROS】

### 本博客記錄學習NDT&#xff0c;ICP構建點云地圖的實驗過程&#xff0c;參考的以下兩篇博客&#xff1a; 無人駕駛汽車系統入門&#xff08;十三&#xff09;——正態分布變換&#xff08;NDT&#xff09;配準與無人車定位_settransformationepsilon-CSDN博客 PCL中點云配…

基于HTML + jQuery + Bootstrap 4實現(Web)地鐵票價信息生成系統

地鐵票價信息表生成系統 1. 需求分析 1.1 背景 地鐵已經成為大多數人出行的首選,北京地鐵有多條運營線路, 截至 2019 年 12 月,北京市軌道交通路網運營線路達 23 條、總里程 699.3 公里、車站 405 座。2019 年,北京地鐵年乘客量達到 45.3 億人次,日均客流為 1241.1 萬人次…

EtherNet/IP 轉 Modbus 協議網關

一、產品概述 1.1 產品用途 SG-EIP-MOD-210 網關可以實現將 Modbus 接口設備連接到 EtherNet/IP 網 絡中。用戶不需要了解具體的 Modbus 和 EtherNet/IP 協議即可實現將 Modbus 設 備掛載到 EtherNet/IP 接口的 PLC 上&#xff0c;并和 Modbus 設備進行數…

PostgreSQL:邏輯復制與物理復制

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

騰訊云COS與ZKmall 開源商城的存儲集成方案

ZKmall 開源商城與騰訊云對象存儲&#xff08;COS&#xff09;的集成&#xff0c;可通過云端資源托管、自動化數據同步、高性能存儲架構實現本地存儲負載降低與訪問效率提升。以下是基于搜索結果的集成路徑與核心優化點&#xff1a; 一、存儲架構升級&#xff1a;本地與云端協同…

HTML — 浮動

浮動 HTML浮動&#xff08;Float&#xff09;是一種CSS布局技術&#xff0c;通過float: left或float: right使元素脫離常規文檔流并向左/右對齊&#xff0c;常用于圖文混排或橫向排列內容。浮動元素會緊貼父容器或相鄰浮動元素的邊緣&#xff0c;但脫離文檔流后可能導致父容器高…

【軟件測試學習day1】軟件測試概念

前言 本篇學習&#xff0c;測試相關基礎概念、常見的開發模型測和測試模型&#xff0c;搞懂4個問題&#xff1a; 什么是需求什么是 bug什么是測試用例開發模型和測試模型 目錄 1. 什么是需求 1.1 為什么要有需求 1.2 測試人員眼里的需求 1.3 如何深入了解需求 2. 測試用例…

Flutter常用組件實踐

Flutter常用組件實踐 1、MaterialApp 和 Center(組件居中)2、Scaffold3、Container(容器)4、BoxDecoration(裝飾器)5、Column(縱向布局)及Icon(圖標)6、Column/Row(橫向/橫向布局)+CloseButton/BackButton/IconButton(簡單按鈕)7、Expanded和Flexible8、Stack和Po…

劉火良FreeRTOS內核實現與應用學習之7——任務延時列表

在《劉火良FreeRTOS內核實現與應用學習之6——多優先級》的基礎上&#xff1a;關鍵是添加了全局變量&#xff1a;xNextTaskUnblockTime &#xff0c;與延時列表&#xff08;xDelayedTaskList1、xDelayedTaskList2&#xff09;來高效率的實現延時。 以前需要在掃描就緒列表中所…

圖像預處理-插值方法

一.插值方法 當我們對圖像進行縮放或旋轉等操作時&#xff0c;需要在新的像素位置上計算出對應的像素值。 而插值算法的作用就是根據已知的像素值來推測未知位置的像素值。 1.1 最近鄰插值 CV2.INTER_NEAREST 其為 warpAffine() 函數的參數 flags 的其一&#xff0c;表示最近…

智能配電保護:公共建筑安全的新 “防火墻”

安科瑞劉鴻鵬 摘要 隨著城市建筑體量的不斷增長和電氣設備的廣泛使用&#xff0c;現代建筑大樓的用電安全問題日益突出。傳統配電方式面臨監測盲區多、響應滯后、火災隱患難發現等問題。為提升建筑電氣系統的安全性和智能化水平&#xff0c;智慧用電系統應運而生。本文結合安…