C程序使用openmp时没有起到作用
来源:互联网 发布:免费淘宝代码 编辑:程序博客网 时间:2024/06/01 07:58
首先看C文件text.c ,代码如下:
#include <omp.h>#include <stdio.h>#include <stdlib.h>int main(int argc,char* argv[]){ int i = 0; #pragma omp parallel <pre name="code" class="cpp"> printf("hello world\n");return 0;}其中下面的这条语句的作用就是启动多线程,对紧跟的大花括号内的代码段使用多线程并行多次执行!
#pragma omp parallel { //此处代码将会被多个线程执行 ....... }编译命令为:
gcc text.c -fopenmp运行结果应该是这样的:
<pre name="code" class="cpp"> hello world<pre name="code" class="cpp"><pre name="code" class="cpp"> hello world
<pre name="code" class="cpp"> hello world
<pre name="code" class="cpp"> hello world输出了4次,也就是 #pragma omp parallel 产生了4个线程都执行了打印语句,为什么产生了4个线程?这是因为我的电脑的处理器数就是4个,所以默认会产生与处理器个数相等的线程,所以如果你的电脑只有一个处理器,那就只能产生一个线程,所以这种情况下输出的结果与不加#pragma omp parallel 的效果是一样的,这就是应该就是使用openmp时没有起到作用的一个可能的原因。
那如何修改#pragma omp parallel 命令产生的线程数量呢?有两个方法,方法1:重新买一个多核的电脑,这个最简单!!!这种方法专供土豪使用!
还有另外一种方法,就是修改环境变量的值;如下:
export OMP_NUM_THREADS=6
重新编译,结果如下:<pre name="code" class="cpp">hello world<pre name="code" class="cpp"><pre name="code" class="cpp"> hello world
<pre name="code" class="cpp"> hello world
<pre name="code" class="cpp"> hello world<pre name="code" class="cpp"><pre name="code" class="cpp"> hello world<pre name="code" class="cpp"><pre name="code" class="cpp"> hello world<pre name="code" class="cpp"><pre name="code" class="cpp"><pre name="code" class="cpp"><pre name="code" class="cpp"><pre name="code" class="cpp"><pre name="code" class="cpp"><pre name="code" class="cpp"><pre name="code" class="cpp"> hello world
第三种方法:通过omp_get_num_threads(numbs)函数设置线程数量,函数参数numbs就是线程的个数,omp_get_thread_num()函数使用来获取当前线程的ID的,从0开始,示例代码如下:
#include <omp.h>#include <stdio.h>#include <stdlib.h>int main(int argc,char* argv[]){ int i = 0; omp_set_num_threads(4); #pragma omp parallel for for (i=0;i<10;i++) { sleep(1); printf("i=%d\n",omp_get_thread_num()); } printf("hello world\n"); return 0;}
重新编译运行结果如下:
i=0i=3i=1i=2i=0i=1i=2i=0i=1i=2hello world其中i的值是线程的编号,可以看到编号从0~3,总共出现了4个线程,所以 omp_set_num_threads(4)设置线程数量成功了!
0 0
- C程序使用openmp时没有起到作用
- OpenMP: 使用OpenMP优化程序
- OpenMP: 使用OpenMP优化程序
- 使用OpenMP优化程序
- 在socket通讯程序里,select 起到什么作用
- 接口起到的作用
- 接口起到的作用
- 使用OpenMP给程序加速
- PCANet中PCA算法为什么没有起到降维的作用?
- PCANet中PCA算法为什么没有起到降维的作用?
- OpenMP: OpenMP测试程序
- tbody是什么意思.起到什么作用
- 使用OpenMP给程序加速(一)
- 使用OpenMP给程序加速(二)
- Qt使用openmp并行化加速程序
- C [ OPENMP ]
- vs2010下编写dll使用.def文件无法起到相应作用的原因
- StringBuilder sb = new StringBuilder(); 请问这句话在程序中起到什么作用? 请问这句话的意思是什么?
- Android将图片转化为灰色的方法
- YAF 菜鸟的学习笔记
- 搞懂JAVA集合类--HashSet, LinkedHashSet, TreeSet(五)
- c#(1)
- 手动解析及数据链接地址
- C程序使用openmp时没有起到作用
- 数据类型之间的转换
- Eclipse中tomcat启动不了
- CentOS VI常用命令
- D3D11的纹理寻址模式
- SAR学习
- 远程方法调用(RML)
- node.js 后台解析数据
- python中的元类Metaclass