OpenMP入门(2)条件编译和查看线程数的函数
2015-03-07 23:15
148 查看
一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional compile)[1]。
OpenMP中的条件编译语句:
这两行中间的源程序只会在并行编译时才会被编译
下面我们学习两个跟线程数目相关的常用函数:
omp_get_num_threads() 获得线程总数
omp_get_thread_num() 获得当前线程序号
更多函数请参考
https://msdn.microsoft.com/en-us/library/k1h4zbed.aspx
下面让我们看一个例子以便更好地理解上面的知识:
test.c :
编译,运行及结果:
编译成普通c程序:
编译成并行程序:
各线程计算速度相近,所以顺序并不是按照序号排列的。
[1]http://baike.baidu.com/view/1995627.htm
OpenMP中的条件编译语句:
#ifdef _OPENMP #endif
这两行中间的源程序只会在并行编译时才会被编译
下面我们学习两个跟线程数目相关的常用函数:
omp_get_num_threads() 获得线程总数
omp_get_thread_num() 获得当前线程序号
更多函数请参考
https://msdn.microsoft.com/en-us/library/k1h4zbed.aspx
下面让我们看一个例子以便更好地理解上面的知识:
test.c :
#ifdef _OPENMP #include <omp.h> ##endif int main(){ #pragma omp parallel { #ifdef _OPENMP printf("I am thread %d / %d \n", omp_get_thread_num(),omp_get_num_threads()); #else printf("I am sequentiel \n"); #endif } }
编译,运行及结果:
编译成普通c程序:
$gcc test.c -o test $./test I am sequentiel
编译成并行程序:
$gcc -fopenmp test.c -o test_openmp $export OMP_NUM_THREADS=4 $./test_openmp I am thread 0 / 4 I am thread 3 / 4 I am thread 1 / 4 I am thread 2 / 4
各线程计算速度相近,所以顺序并不是按照序号排列的。
[1]http://baike.baidu.com/view/1995627.htm
相关文章推荐
- 查看.a库文件是否把函数编译进去了
- nios ii 13 主程序的函数可以用Open Declaration 查看,但是编译的时候却说 undefined reference to 。。。这是为什么?
- 内存管理、野指针、读写字符的函数、预编译处理、宏定义及条件编译的知识总结
- c/c++ 内存操作函数 宏_条件编译
- C++中的基础相关知识之内联函数inline,extern,条件编译
- IOS小知识点6之条件编译、Log系统、重命名、CocoaLumberjack、NSLogger、函数调用堆栈
- 带线程函数编译条件
- win764+VS2010+OpenCV2.4.9编译查看opencv函数
- 宏函数条件编译 映射
- C语言学习入门 (六) 预处理指令:宏、条件编译、文件包含
- 【Xcode学C-6】宏定义#define、条件编译#if、文件包含、内部外部函数以及typedef的用法
- C语言学习入门 (六) 预处理指令:宏、条件编译、文件包含
- 参数的传递方式、变量的作用域、变量的生存期、内部函数和外部函数、编译预处理命令、条件编译
- Windows下查看library(即.lib文件)导出函数或32、64位编译等信息的方法
- C语言学习入门 (六) 预处理指令:宏、条件编译、文件包含
- 宏定义,条件编译以及函数指针
- 编译PHP5.6.5后,查看默认支持的函数
- C语言学习入门 (一) 编译、链接、关键字、数据类型、printf函数
- 6.C++ 宏定义、文件包含、条件编译、内部函数和外部函数
- ASP基础入门第四篇(脚本变量、函数、过程和条件语句)