<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;開啓後數據混亂,且每次運行都不一樣。