OpenMP 並行提速

<strong><span style="font-size:24px;">//測試VS2010下開啓OpenPM並行提速</span></strong>

<span style="white-space:pre">	</span>LARGE_INTEGER tmp,time1,time2;
	long freq,costTime;
	QueryPerformanceFrequency(&tmp);
	freq = tmp.QuadPart;
	int k = 0;
	CString str;
	int kk[100];
	QueryPerformanceCounter(&time1);
	for (int i = 0;i<100;++i)
	{
		kk[k] = i;
		k++;
		Sleep(10);
	}
	QueryPerformanceCounter(&time2);
	costTime = (long)((time2.QuadPart - time1.QuadPart) * 1000 / freq);

如上代碼運行時間costTime = 999。


開啓OpenMP並行提速:

1、項目---屬性---配置屬性---C/C++---語言---OpenMP支持---是(如下圖)


2、循環前添加

<span style="color:#ff0000;">#pragma omp parallel for</span>

如下圖

	LARGE_INTEGER tmp,time1,time2;
	long freq,costTime;
	QueryPerformanceFrequency(&tmp);
	freq = tmp.QuadPart;
	int k = 0;
	CString str;
	int kk[100];
	QueryPerformanceCounter(&time1);
<pre name="code" class="cpp"><span style="white-space:pre">	</span><span style="color:#ff0000;">#pragma omp parallel for</span>
for (int i = 0;i<100;++i){kk[k] = i;k++;Sleep(10);}QueryPerformanceCounter(&time2);costTime = (long)((time2.QuadPart - time1.QuadPart) * 1000 / freq);


如上代碼運行時間costTime = 135左右。

我的機器是8核的,costTime 約等於 ceil(100/8)×10 = 130

測試可顯著提速,可看下運行完後kk數組中數據,可看出二者間的區別。

不開啓OpenMP 是按順序0-99;開啓後數據混亂,且每次運行都不一樣。





發佈了59 篇原創文章 · 獲贊 27 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章