Vaa3D並行程序測試-OPENMP-VS2010-加速程序

首先,我能確定的是該OPENMP測試程序通過Qt自帶的MINGW編譯器直接編譯有效,但是我沒有對VS編譯器進行測試,究竟有沒有提升,提升了多少我沒有進行測試,因爲普通的垃圾代碼會被VS優化。

首先是pro文件

QMAKE_CXXFLAGS+=/openmp
QMAKE_CFLAGS += /fopenmp

有的地方說只插入第一個行即可,但是保險起見,兩個都寫上。

測試C文件

值得注意的是需要加上#include <omp.h>
在需要多線程的for循環前,加上#pragma omp parallel for

#include <stdio.h>
#include <omp.h>
#include<QTime>
#include<QDebug>
#include<iostream>
using namespace std;

void test (int n) {
	//這種垃圾代碼會被VS編譯器優化,因此很難看出差距
    for(int i = 0; i < 100000+n; ++i)
    {


    }
    printf("n  %d ", n);
}


int main(void)
{

    std::cout << "parallel begin:\n";
    std::cout<< "omp_get_max_threads:" << omp_get_max_threads()<<endl;
    #pragma omp parallel for num_threads(8)
     for(int i = 0; i < 8; ++i)
    {
        std::cout << omp_get_thread_num();
    }

    std::cout << "\n parallel end.\n";

    QTime time;
    time.start();


   for(int i = 0; i < 200; ++i)
       test(i);
   printf("\n");
   int times1=time.elapsed();
   qDebug()<<times1<<"ms";



   #pragma omp parallel for
   for(int i = 0; i < 200; ++i)
       test(i);
   printf("\n");

   int times2=time.elapsed();
   qDebug()<<times2-times1<<"ms";

   return 0;
}

經Qt自帶的MINGW編譯器編譯後,第一段的運行時爲74ms,第二段的運行時間爲15ms,分成了8個線程,但是因爲多線程有調度損耗,因此實際耗時爲原來的1/5.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章