cilk之User Guide学习笔记(6)操作系统相关
来源:互联网 发布:新浪微博 mac 客户端 编辑:程序博客网 时间:2024/05/19 02:29
说明:
下载User Guide: http://software.intel.com/zh-cn/forums/showthread.php?t=77996&o=a&s=lr(Cilk_User_Guide.pdf)
主要是对该用户指南(中文版)的一些学习笔记和简化并更加自己的理解添加一些代码示例,可以参考原文档获取更多细节。
1. 在Cilk程序上使用其它工具
由于Cilk程序拥有和C/C++标准不同的堆栈布局和调用规则,那些应用于二进制代码的工具(包括类似valgrind的内存检查工具和代码覆盖工具)可能无法用于Cilk并行程序。很多时候通过只使用一个工作线程(通过把环境变量CILK_NWORKERS设置为1)来运行程序就可以了。如果这样不能奏效,你可以在Cilk程序的串行版本上使用这些工具。
2. 和操作系统线程的一般交互
在和操作系统线程一起工作时请记住下面几点:
工作线程就是操作系统线程
运行时系统会通过操作系统自身的相关机制来分配一个“工作线程”集合。
Cilk程序不会总是100%用掉所有可用的处理器。
这几点比较容易理解,工作线程最终是会映射到操作系统线程的。
Cilk strands并不是操作系统线程。同一Cilk strand在运行过程中不会在工作线程间迁移。但是在cilk_spawn,cilk_sync,或cilk_for语句后工作线程会发生变更,这是因为这些语句会中止一个或多个strand并创建一个或多个新的strand。而且,你无法控制某个特定strand由哪一个工作线程来执行。
上述内容会从多方面影响一个程序,最重要的是:
不要使用Windows线程本地存储或Linux Pthread线程专有数据,因为在工作密取OS线程可能会发生变更。作为替代,可以使用其它编程技巧,比如前面讨论的Cilk holder reducer。
不要跨越cilk_spawn,cilk_sync或cilk_for语句使用操作系统锁或互斥锁,因为只有加锁的线程能进行解锁操作。
总之,这两点其实在理解了cilk的执行模型就容易理解了,cilk的执行模型决定了它的这些限制,比如cilk中衍生的strand是运行在当前的worder上的,但是同步后的线程可能是原来的worker,也可能是新的worder,这就是“工作密取OS线程可能发生变更”的含义了。
3. MFC和cilk程序
这一点和上面"工作密取OS线程可能会发生变更"是一个内容,是在MFC中的一个实际例子而已。即:
Microsoft Foundation Class(MFC)库依赖于线程本地存储来完成由包装类到GDI对象句柄的映射。Cilk strand本身并不能保证一直运行在任何特定线程上,所以使用Cilk的并行程序无法安全地调用MFC函数。
当然,这并不是说不能在MFC中使用cilk,仍然是可以通过一定的策略使用cilk完成计算密集型任务的。核心就是将cilk计算代码和MFC中UI相关的代码隔离,防止由于OS线程变更导致MFC无法工作。简单理解,就是通过MFC创建一个用于计算的本地线程(主线程为UI线程),这样,在计算线程中利用cilk进行计算进行衍生同步等,无论如何,不会影响到主线程的变更。
- cilk之User Guide学习笔记(6)操作系统相关
- cilk之User Guide学习笔记(3)Cilk执行模型
- cilk之User Guide学习笔记(7)cilk运行系统API和cilk总结
- cilk之User Guide学习笔记(4)cilk_for的分析
- cilk之User Guide学习笔记(1)Cilk 语言特性说明
- cilk之User Guide学习笔记(2)Cilk关键字预定义宏环境变量
- cilk之User Guide学习笔记(5)数据竞争加锁和reducers
- JBoss AOP - User Guide 学习笔记
- Flume 学习笔记 一 : Flume User Guide
- crypto++ User Guide: filters.h学习笔记
- User Guide:eccrypto.h学习笔记(翻译)
- Android API Guide 之 User Interface笔记
- Android API Guide 之 User Interface笔记
- Graphlab user guide笔记
- numpy user guide 笔记
- ASM学习笔记--ASM 4 user guide 第一章翻译
- hadoop2.7.2学习笔记15-HDFS user guide
- Uuntn操作系统学习笔记之服务-web相关
- c#俄罗斯方块视频教程下载地址[陈广老师]
- 软件开发项目经理开门几件事情-会议技巧(一)
- zhcon-Ubuntu字符界面(终端tty1-6)中文乱码和分辨率的解决方案
- Html网页实现键盘Enter响应功能
- 关于java并行程序开发重点
- cilk之User Guide学习笔记(6)操作系统相关
- xcat rpower 命令
- Apache Camel框架之JMS路由
- java中集合总结
- 头文件中定义变量
- 关于PE在笔记本启动蓝屏原因及解决方法
- Message 消息处理详解
- eclipse添加git功能
- 开源框架PhoneGap入门:视频图文简介及代码示例