里仁多核程序設計實驗報告大學畢設論文_第1頁
里仁多核程序設計實驗報告大學畢設論文_第2頁
里仁多核程序設計實驗報告大學畢設論文_第3頁
里仁多核程序設計實驗報告大學畢設論文_第4頁
里仁多核程序設計實驗報告大學畢設論文_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、多核程序設計實驗報告Multi-core Programmi ng Experime nt Report學生所在學院:里仁學院學生所在班級:學生姓名: 學生學號: 指導教師:教務處2014年4月實驗一 Windows多線程編程模塊一:基礎練習一. 實驗目的與要求二. 實驗環(huán)境及軟件三. 實驗內(nèi)容r c pv C Io Ju Ju 4U u Hu u u四. 實驗代碼 0id test(i nt n)for (int i = 0; i 10000; i+) int main() double dResult; long lBefore = clock();omp parallel forfor

2、(int i = 0; i 10000; i+) test(i);dResult = (double)(clock() - lBefore); printf(nTotal Time: %f ms.n, dResult); system(pause);return 0;i五. 結果分析fotAl Tine: 78060000 斡吝.青按任意犍繼續(xù)-運行時間是串行的一半。明顯降低了時間的消耗。實驗二 各種同步機制的性能比較一. 實驗目的與要求二. 實驗環(huán)境及軟件三. 實驗內(nèi)容 以矩陣乘進行并行串行比較四. 實驗代碼和結果 實驗代碼:/ juzhencheng.cpp : 定義控制臺應用程序的入口點

3、。 #include stdafx.h#include #include #include #define NN 2000 int ANNNN, BNNNN; long long CNNNN;void solve(int n, int num_thread)int i, j, t, k, paralleltime, serialtime; clock_t startTime, endTime; long long sum;omp_set_num_threads(num_thread);/ 對矩陣 A 和矩陣 B 進行初始化 for (i = 0; in; i+)t = i + 1;for (j

4、 = 0; jn; j+)Aij = t+;Bij = 1;/ 矩陣乘法并行算法 startTime = clock();sum = 0;#pragma omp parallel shared(A,B,C) private(i,j,k)#pragma omp for schedule(dynamic)for (i = 0; in; i+)for (j = 0; jn; j+)Cij = 0;for (k = 0; kn; k+)Cij += Aik * Bkj;for (i = 0; in; i+)for (j = 0; jn; j+) sum += Cij;endTime = clock()

5、; paralleltime = endTime - startTime;sum,printf( 矩 陣 C 所 有 元素和 為 sum=%lld 并 行計算 時 間 time=%dmsn, paralleltime);startTime = clock();sum = 0;for (i = 0; in; i+)for (j = 0; jn; j+)Cij = 0;for (k = 0; kn; k+)Cij += Aik * Bkj;for (i = 0; in; i+)for (j = 0; jn; j+)sum += Cij;endTime = clock();serialtime =

6、endTime - startTime;sum,printf( 矩 陣 C 所 有 元素和 為 sum=%lld 串 行計算 時 間 time=%dmsn, serialtime);printf( 相對加速比為: %d/%dn, serialtime, paralleltime);- 3 -int _tmain(int argc, _TCHAR* argv)int n, nu m_thread;printf(請輸入矩陣的節(jié)數(shù)(整數(shù) N=2000 ),再輸入并行的線程數(shù)。nn”);while (sca nf(%d%d, &n, &nu m_thread) != EOF)printf(你輸入的矩陣

7、節(jié)數(shù)為:%d并行線程數(shù)為:%dn, n, num_thread);solve (n, nu m_thread);return 0;實驗結果:i青輸人矩陣的節(jié)數(shù)(整數(shù)NSM豳)*再輸入并行的線程數(shù)。1cile蠟矩相0 FT1 -T- T 丸幵串4!B nn打M實驗三蒙特卡洛法并行求解Pi值一. 實驗目的與要求二. 實驗環(huán)境及軟件三. 實驗內(nèi)容四. 實驗代碼和結果代碼:/ Pi.cpp :定義控制臺應用程序的入口點。求圓周率PI#in clude stdafx.h#in clude #in clude #in clude #in clude using n amespace std;static

8、long num_steps=1000000000; 定義所分的塊數(shù)#define NUM THREADS 2 /定義所開啟的線程數(shù)int _tmain(int argc, _TCHAR* argv)int i;omp_set_num_threads(NUM_THREADS);/ 開啟線程double x,sum=0.0,pi;clock_t start_time,end_time;double step=1.0/(double)num_steps;/并行 start_time=clock();#pragma omp parallel sections reduction(+:sum) pri

9、vate(x,i)#pragma omp sectionfor (i=omp_get_thread_num();inum_steps;i=i+NUM_THREADS) x=(i+0.5)*step; sum=sum+4.0/(1.0+x*x);#pragma omp sectionfor (i=omp_get_thread_num();inum_steps;i=i+NUM_THREADS) x=(i+0.5)*step; sum=sum+4.0/(1.0+x*x);pi=step*sum;end_time=clock();coutPi=piendl;cout 并行 time=end_time-

10、start_timeendl;/串行 sum=0.0;start_time=clock();for (i=0;inum_steps;i+)x=(i+0.5)*step; sum=sum+4.0/(1.0+x*x);pi=step*sum;en d_time=clock();coutPi=pie ndl;cout串行 time=end_time-start_timeendl;system(pause);return 0;F=3 - 1.理直右夕扌=匸彳亍七 irrif? =4S BS rx=3 _S91W摂任意圭建名雀結-結果:實驗四多核并行排序實驗一. 實驗目的與要求1、熟悉快速排序的串行算法

11、2、熟悉快速排序的并行算法3、實現(xiàn)快速排序的并行算法二. 實驗環(huán)境及軟件硬件環(huán)境:。OS:,軟件工具:VC三. 實驗內(nèi)容1、快速排序的基本思想2、快速排序算法的性能3、快速排序算法并行化四. 實驗代碼和結果實驗代碼:/ bin gxi ngpaixu.cpp :定義控制臺應用程序的入口點。#i nclude stdafx.h#include #include#include #include #include omp.husing namespace std;/int count=0;void swap(int &a, int &b)/int tmp;tmp = a;a = b;b = tmp

12、;void quicksort(int *A, int l, int u)int i, m, k;if (l = u) return;m = l;for (i = l + 1; i = u; i+)if (Ai Al)/*不管是選第一個元素作為pivot還是最后一個作為 pivot,假如我們想得到的是從小到大的序列,那么最壞的輸入情況就是從大到小的;如果我們想得到從大到小的序列, 那個最壞的輸入情況就是從小到大的序列 */swap(A+m, Ai);swap(Al, Am);quicksort(A, l, m - 1);quicksort(A, m + 1, u);void main(int

13、argc, char *argv)omp_set_num_threads(2);/ 設置線程數(shù)為 2,因為是雙核的 CPUint k = 0, i = 0;int m = 0, n = 0;double cost = 0;int len = 10000;- 7 -int short_len = len / 2;int B10000, C10000, D5000, E5000;/ 將 B 分為兩個小的數(shù)組,并行的對他們調用快速排序算法#pragma omp parallel default(none) shared(B,C,len) private(i)/- 這個 for 循環(huán)是并行的 int

14、j = 50000;#pragma omp forfor (i = 0; ilen; i+)Bi = j-;Ci = j-;/ 初始化 B,C 數(shù)組clock_t begin = clock();/ 計時開始點#pragma omp parallel default(none) shared(B,D,E,short_len) private(i)/- 這個 for 循環(huán)是 并行的#pragma omp forfor (i = 0; ishort_len; i+)/- 這個 for 循環(huán)是并行的 Di = Bi; 將B的前5000個數(shù)放入 D Ei = Bi + 5000;/ 將 B的后 500

15、0 個數(shù)放入 E #pragma omp parallel default(none) shared(E,D,short_len) /private(i) 快速排序的并行region#pragma omp parallel sections#pragma omp section quicksort(D, 0, short_len - 1);/ 對 D 排序#pragma omp sectionquicksort(E, 0, short_len - 1);/ 對 E 排序將D和E進行歸并排序放入B里面for (; klen; k+)/if (mshort_len & nshort_len)if

16、(Dn = Em)Bk = Dn;n+;elseBk = Em;m+;if (m = short_len | n = short_len)if (m = short_len)Bk = Em;elseBk = Dn - 1;k += 1; break;if (/*m=short_len &*/ nshort_len)int tem = short_len - n;for (int p = 0; ptem; p+)Bk = Dn;n+;k+;else if (/*n=short_len &*/ mshort_len)- 9 -int tem = short_le n - m;for (int q = 0; qtem; q+)Bk = Em;m+;k+;/ 歸并算法結束clock_t end = clock(); 計時結束點cost = (double)(e nd - begi n);cou

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論