當前位置:
首頁 >
【OpenMP实现】任意线程数并行化快排结合Merge排序100w--10线程下只用0.06s
發布時間:2025/4/16
20
豆豆
生活随笔
收集整理的這篇文章主要介紹了
【OpenMP实现】任意线程数并行化快排结合Merge排序100w--10线程下只用0.06s
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡述
通過這個標題也大概能猜測出算法的思想。
- Merge操作是O(n)的(出自于MergeSort歸并排序)
- 根據線程數將數據劃分為thread_count塊(較為均勻點就好了)
- 每段上用qsort(快排)
- 之后再用一個merge將所有的快排結果合并起來
算法思想很簡單,但是效果卻不錯。
- 之前寫過一篇用雙進程寫快排然后實現100w的排序只用0.2s
這里測試過用兩個的情況,效果類似
PS D:\Code\C++\repo\openMP_test\x64\Debug> ./openMP_test.exe 2 reading finish sort finished Total time Serial: 0.223s代碼
- 只有一個線程的時候不進行~
- 調用之前寫好的生成數據的腳本來生成數據
- 然后用生成出來的exe來進行排序,后面的數值是線程數目
- 運行代碼其實并不消耗多少時間,主要的問題是在寫入文件的時候消耗了點時間,IO操作嘛畢竟
生成數據的腳本
import sys import numpy as npN = int(sys.argv[1]) a = np.random.randint(- int(np.sqrt(N)), int(np.sqrt(N)), N) c = sorted(a) with open("input.txt", 'w') as f:f.write(str(N) + '\n')f.write(' '.join(list(map(str, a)))+'\n') with open("ans.txt", 'w') as f:for i in range(N):f.write(str(c[i]) + ' ')檢查結果的代碼
with open('ans.txt', 'r')as f, open('output.txt', 'r') as r:a = f.readline()b = r.readline()print('right' if a == b else 'wrong')總結
以上是生活随笔為你收集整理的【OpenMP实现】任意线程数并行化快排结合Merge排序100w--10线程下只用0.06s的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MPI派生数据类型发送接收,降低发送时间
- 下一篇: R语言--查看数据类型+类型判断