MPI 實現並行直接插入排序

2021-08-27 04:28:05 字數 1363 閱讀 3722

話說 直插排序序列只需要十幾行 並行就大不一樣。。。

基本思路是

1/主線程控制資料讀取 分發和彙總

2/從執行緒中資料按執行緒號非降有序 每次有新資料 主線程廣播 從執行緒按照資料大小判斷是否在自己處理範圍內 如果在的話 在自己儲存的陣列中進行直接插入

3/最後 主線程按序收集顯示所有資料

#include "mpi.h"

#include #include #include #include #include #define end 0

#define init 1

#define data 2

#define root 0

int readvalue(char* file,int* values)

else

}}while(size!=0);

close(fd);

return count;

}void insert(int* arr,int pos,int temp)

arr[pos+1]=temp;

}void serial(int* arr,int size)

}int main(int argc,char *argv)

mpi_recv(&temp,1,mpi_int,self+1,data,mpi_comm_world,&status);

//broadcast each value and do insert in each process

for(int i=size-1;i//ends

printf("ends \n");

temp=end;

mpi_bcast(&temp,1,mpi_int,root,mpi_comm_world);

//recieve from each process in order

int pos=0;

int len=0;

for(int i=1;i}

for(int i=0;ifree(values);

} else

mpi_bcast(&temp,1,mpi_int,root,mpi_comm_world);

//mpi_barrier(mpi_comm_world);

} //ends

//sends the data in order to root process

mpi_ssend(&pos,1,mpi_int,root,data,mpi_comm_world);

for(int i=0;ifree(local);

} mpi_finalize();

return 0;

}

MPI 實現並行直接插入排序

話說 直插排序序列只需要十幾行 並行就大不一樣。基本思路是 1 主線程控制資料讀取 分發和彙總 2 從執行緒中資料按執行緒號非降有序 每次有新資料 主線程廣播 從執行緒按照資料大小判斷是否在自己處理範圍內 如果在的話 在自己儲存的陣列中進行直接插入 3 最後 主線程按序收集顯示所有資料 includ...

直接插入排序

直接插入排序是一種最簡單的排序方法,它的基本思想是依次將每個記錄插入到乙個有序中去。就是說,第i i 1 遍整理時,a1,a2,ai 1已經是排好序的子串行 取出第i個元素ai,在已排好序的子串行為ai找到乙個合適的位置,並將它插到該位置上。易知上述排序當i 1時實際上為空操作,故可直接從i 2開始...

直接插入排序

直接插入排序的演算法思想 直接插入排序 straight insertion sort 的基本操作是將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的 記錄數增 1 的有序表。根據該思想,編寫 如下 從已有序列的第0個記錄開始比較 public static void insertsort1 i...