日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【MPI编程】任意数节点的树形求和(高性能计算)

發布時間:2025/4/16 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【MPI编程】任意数节点的树形求和(高性能计算) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡述

之前寫過一個只能在2冪次數的節點環境下使用的樹形結構求和
【MPI編程】2冪節點的樹形求和(高性能計算)
稍微修改了一下對應代碼,就可以使用了。其實就是在邏輯上擴充一下為2的冪數。也就是說接受節點上的只要不越界就是任然要接受。如果越界了,就說明對應的在后面的節點是不存在的。那么就保留當前節點就好了。

運行效果

輸入為一個文件:
內容為:

19 1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 0 0 2

代碼

#include<stdio.h> #include<string.h> #include<mpi.h> #pragma warning(disable : 4996) #define MAX_STRING 100 using namespace std; #include <fstream> #include <iostream>int main(void) {int len;double scalar, local_sum = 0;int comm_sz;int my_rank;int divided_len;int last_divided;int begin_i;int oper_N = 2;MPI_Init(NULL, NULL);MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);// 假設 n % comm_sz = 0 整除// 只有一個線程的時候不操作if (comm_sz <= 1) {MPI_Finalize();return 0;}ifstream cin("D:\\C++\\VS\\repo\\MPI-DEMO\\MPI-DEMO\\input.txt");cin >> len; // 輸入數據長度divided_len = len / comm_sz;last_divided = len % comm_sz;if (my_rank < last_divided) {divided_len++;begin_i = my_rank * divided_len;}else {begin_i = (my_rank - last_divided) * divided_len + ((divided_len + 1)* last_divided);}// 局部和for (int i = 0; i < len; ++i) {cin >> scalar;if (i < begin_i || i >= begin_i + divided_len) continue;else {local_sum += scalar;}}// 假設comm_sz不一定是2的冪// 樹形求和while (oper_N <= comm_sz || (oper_N > comm_sz && oper_N / 2 < comm_sz)) {// recieve if (my_rank % oper_N == 0) {// 只需要控制有些收,有些不收即可if (my_rank + oper_N / 2 < comm_sz) {MPI_Recv(&scalar, 1, MPI_DOUBLE, my_rank + oper_N / 2, 0, MPI_COMM_WORLD, MPI_STATUSES_IGNORE);local_sum += scalar;}}// sendelse if (my_rank % oper_N == oper_N / 2) {MPI_Send(&local_sum, 1, MPI_DOUBLE, my_rank - oper_N / 2, 0, MPI_COMM_WORLD);}else { break; }oper_N *= 2;}if (my_rank == 0) {cout << local_sum << endl;}MPI_Finalize();return 0; }

總結

以上是生活随笔為你收集整理的【MPI编程】任意数节点的树形求和(高性能计算)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。