Qt编写OpenMP程序:HelloWorld+双循环+循环测试

Qt编写OpenMP程序:HelloWorld

本程序是在Ubuntu Linux环境下编写成的。这里包括C++语言程序和C语言程序,两者在Qt项目设置参数上略有不同,需要注意。

OpenMp提供并行描述,可以充分使用计算机系统的CPU资源。

step1.创建Qt的C++项目,项目文件如下:

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
#CONFIG -= qt

QMAKE_CXXFLAGS += -fopenmp

LIBS += -fopenmp

SOURCES += main.cpp

其中,需要将行“CONFIG -= qt”注释。同时添加以下两行(如上):
QMAKE_CXXFLAGS += -fopenmp
 LIBS += -fopenmp

step2.编写C++源程序如下:

#include <iostream>

using namespace std;

int main()
{
    #pragma omp parallel for
    for (char i = 'a'; i <= 'z'; i++)
        cout << "Hello World! " << i << endl;

    return 0;
}

程序中,for语句之前添加以下语句,将for循环并行化处理:
#pragma omp parallel for

step3.运行程序

运行结果如下(可以看出,由于循环是并发运行,所以输出顺序与一般程序不同):

 Hello World! a
 Hello World! b
 Hello World! c
 Hello World! d
 Hello World! e
 Hello World! f
 Hello World! g
 Hello World! o
 Hello World! p
 Hello World! q
 Hello World! r
 Hello World! s
 Hello World! t
 Hello World! u
 Hello World! v
 Hello World! w
 Hello World! x
 Hello World! y
 Hello World! z
 Hello World! h
 Hello World! i
 Hello World! j
 Hello World! k
 Hello World! l
 Hello World! m
 Hello World! n

运行结果的截屏如下:

Qt编写OpenMP程序:HelloWorld+双循环+循环测试

Qt项目与C语言源程序:

1.Qt项目文件

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
#CONFIG -= qt

QMAKE_CFLAGS += -fopenmp

LIBS += -fopenmp

SOURCES += main.c

需要注意的是,这里使用的参数是QMAKE_CFLAGS(C++项目是QMAKE_CXXFLAGS)。

2.C语言程序

#include <stdio.h>

int main(void)
{
    char i;

    #pragma omp parallel for
    for (i='a'; i<='z'; i++)
        printf("Hello World! %c\n", i);

    return 0;
}

Qt编写OpenMP程序--双循环

本程序是在Ubuntu  Linux环境下编写成的。OpenMp提供并行描述,可以充分使用计算机系统的CPU资源。

Qt项目与C语言源程序:

1.Qt项目文件

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
#CONFIG -= qt

QMAKE_CFLAGS += -fopenmp

LIBS += -fopenmp

SOURCES += \
    main.c

2.C语言程序

#include <stdio.h>
#include <omp.h>

int main(void)
{
    int i;

    #pragma omp parallel for num_threads(4)
    for(i=0; i<4; i++) {
        int j;
        for(j=0; j<4; j++)
            printf("(%d,%d) Thread num == %d\n", i, j, omp_get_thread_num());
    }

    return 0;
}

3.运行结果

Qt编写OpenMP程序:HelloWorld+双循环+循环测试

可以看出,运行时输出顺序与一般输出顺序是不一样的,说明是并发运行的。同时输出了线程号。

Qt编写OpenMP程序--循环测试

本程序是在Ubuntu  Linux环境下编写成的。OpenMp提供并行描述,可以充分使用计算机系统的CPU资源。

Qt项目与C++语言源程序:

1.Qt项目文件

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
#CONFIG -= qt

QMAKE_CXXFLAGS += -fopenmp

LIBS += -fopenmp

SOURCES += \
    main.cpp

2.C++语言程序

#include <omp.h>
#include <stdio.h>

void test (int n) {
    for(int i = 0; i < 1000000; ++i) {
        //do nothing, just waste time
    }
    printf("%d ", n);
}

int main(void)
{

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

    return 0;
}

3.运行结果

Qt编写OpenMP程序:HelloWorld+双循环+循环测试

可以看出,运行时输出顺序与一般输出顺序是不一样的,说明是并发运行的。