OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C、C++。OpenMP提供对并行算法的高层抽象描述,特别适合在多核CPU机器上的并行程序设计。进程是CPU资源分配的最小单位,线程是CPU调度的最小单位。线程是建立在进程的基础上的一次程序运行单位,进程是应用程序的执行实例。
一、测试
#include <iostream>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "time.h"
#include <sys/time.h>
#include "omp.h" //----------
void omp_test(void);
int main(void)
{
omp_test();
return 1;
}
void omp_test(void)
{
int sum = 0;
int a[10] = {1,2,3,4,5,6,7,8,9,10};
#pragma omp parallel for reduction(+:sum)
for (int i=0;i<10;i++)
sum = sum + a[i];
#pragma omp parallel
{
//std::cout << omp_get_thread_num();
printf("thread %d \n", omp_get_thread_num());
}
printf("%d \n", sum);
}
makefile
objects = test.o
CFLAGS = -O3 -mfpu=neon -mthumb -march=armv7-a -funsafe-math-optimizations -mfloat-abi=softfp
TOPDIR=.
CFLAGS += -I$(TOPDIR)/include
.PHONY:all
all:demo
demo: $(objects)
@echo ------------linking...
arm-himix200-linux-g++ $(CFLAGS) -o $@ $^ -lc -lgomp -lpthread -ldl
@echo ------------over !!!
# cp demo ./bin; mv *.o ./bin
.c.o:
@echo ------------gcc .c
arm-himix200-linux-gcc $(CFLAGS) -c $^
.cpp.o:
@echo ------------g++ .cpp
arm-himix200-linux-g++ $(CFLAGS) -c $^
clean:
rm -f demo *.o; pwd;
二、
参考博文: