六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 96|回复: 0

Sun 开源技术高级研讨班(青岛)收获分享(一)

[复制链接]

升级  96%

12

主题

12

主题

12

主题

童生

Rank: 1

积分
48
 楼主| 发表于 2013-1-16 16:46:14 | 显示全部楼层 |阅读模式
上个月有幸参加了 Sun 开源技术高级研讨班(青岛)的活动,两天下来收获不小,稍微整理了一点资料,在这里同大家分享下。

第一天讲 Dtrace 和 OpenMP。

Sun 果然是一家技术超前的公司,通过 Solaris 上的 Dtrace,我们可以非常精确的跟踪用户进程,将系统当前状态掌握的了如指掌。
Solaris 中有几万个探针,有点类似于debug断点的概念,它们分布于不同位置;做开发时,我们可借助其找出性能瓶颈,进行优化。

下午的 OpenMP 让我更深入了解了多线程编程。
分享一个动手实验吧:
将下面的程序循环分解并打印出目前正在执行的线程 10分钟

环境要求:
1.Solaris10 或者 Opensolaris 环境
2.已经安装好SUN Studio express 11/08 以上版本
3.如果使用IPS系统需要安装的包: netbeans,netbeans-cpp,netbeans-full,netbeans-ide,netbeans-desktop,sunwlibc,sunwcpp,sunstudioexpress

#include <stdio.h>int main(){int i;for(i=0;i<10;i++)printf("hello,world\n");return 0;} 
步骤:
1)首先我们确定要把这个循环分解到几个线程,县城数目过多而单个线程的任务过少反而会降低程序执行的效率,在这里我们把这个循环分解成两个。(上限不要超过CPU的总CORE数)
2)加入指示性语句 #pragma omp parallel for 语句,并指示线程数 num_threads(2)
#include <stdio.h>int main(){int i;#pragma omp parallel for num_threads(2)for(i=0;i<10;i++)printf("hello,world\n");return 0;} 3)使用OpenMP的API omp_get_thread_num() 打印目前正在运行的线程号,记住包含omp.h头文件
#include <stdio.h>#include <omp.h>int main(){int i;#pragma omp parallel for num_threads(2)for(i=0;i<10;i++){printf("hello,world,ID:%d\n",omp_get_thread_num());sleep(1);//增加观察性}return 0;} 4)编译#cc -xopenmp -fast lab2o.d
 5)运行,观察结果
 
一点点敲完真累,改天把别的实验也扫描一下贴上来。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表