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.

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