共 1,395 篇文章
共 6,621 篇文章及评论
- Association for Computing Machinery TechNews (ACM)
- Go Parallel! (Dr. Dobbs)
- HPCwire (Tabor Communications, Inc.)
- insideHPC (John West)
- Joe Duffy's Weblog (Microsoft)
- Microsoft Parallel Programming Development Center (Microsoft Germany)
- MultiCoreInfo.com
- scalability.org (Scalable Informatics)
- Software Dev Blog (Intel Germany)
- Soft Talk Blog (Intel United Kingdom)
- The Moth (Microsoft)
Archives
帖子来自 Xiaoping Duan (Intel) 
试用 Intel® Array Building Blocks (Intel® ArBB)中的例子程序
作者: Xiaoping Duan (Intel) (2 篇文章) 日期: 十一月 4, 2010 在 4:26 下午
评论 (1)
Intel ArBB是Intel最新推出的并行编程技术,它可以帮助程序开发者摆脱对底层并行机制和硬件架构的依赖,能够支持当前最新以及未来的硬件架构所提供的向量化,并行化功能。使用ArBB的程序不仅可以在现有的平台上能够充分利用CPU的向量化指令和多核并行特性,而且在将来使用新架构的CPU上可无需作任何改动就能自动利用新架构带来的好处。 在Intel ArBB的安装包中自带了一些例子程序,用于展示如何使用ArBB进行编程以及ArBB在性能提升方面的效果。下面让我们一起来动手试着编译,运行这些例子程序。 通常情况下,Intel ArBB的例子程序被安装在“C:\Program Files\Intel\arbb\Beta1\samples”目录下面(注:64位系统上是”Program Files(x86)”)。所有的例子程序都被集中到一个微软Visual Studio的solution文件中。solution文件名中不同的数字对应于不同版本的Visual Studio。打开相应版本的solution文件后可以看到其中包含了十来个project,而这些project又根据应用类型分成了几个文件夹。 在编译整个solution之前先要做一些配置,主要是把Intel ArBB的头文件和库文件目录添加到相应的搜索路径中去,否则在编译的过程中会报出无法找到头文件或库文件的错误。添加是通过菜单选项”Tools -> ...
分类: Blog Challenge, 其他, 并行计算
Cilk 程序中 strand 到工作线程的映射
作者: Xiaoping Duan (Intel) (2 篇文章) 日期: 六月 25, 2010 在 11:55 上午
评论 (1)
和其它并行编程方法一样,在程序运行过程中Cilk的运行时系统会将用户程序中的strand映射到操作系统线程上。但是,为了保证程序的串行语义Cilk的运行时系统会采取一些与众不同的策略。我们以下面的图为例来看一看到底有不同之处。 图中圆圈表示并行控制结构,也就是程序中的cilk_spawn或cilk_sync;标有数字的线条表示strand,对应的是程序中不包含任何并行控制结构的串行部分。这里假定strand(3)是通过位于A节点的cilk_spawn衍生出来的子任务,节点B表示cilk_sync。 执行这个Cilk程序的操作系统线程我们称之为工作线程。当有多个工作线程可用时,这个程序有两种可能的执行方式: 整个程序由单一工作线程执行,或 调度程序选择在不同的工作线程上执行strand(2)和(3)。 为了保证串行语义,衍生出来的函数总是和进入衍生节点的那个strand在同一个工作线程上执行。于是,在这个例子中,strand(1)和strand(3)总是在同一个工作线程上执行。 这和大多数人的直觉正好相反,因为通常我们都会认为衍生出来的子任务会被新的线程执行,原有的线程会执行strand(2)。 如果此时有其它工作线程可用,那么strand(2)(延续部分)可以在另外的工作线程上执行。接下来,在节点B的cilk_sync之后,程序执行可以由进入同步接点的任一工作线程继续。 这也和我们的直觉有所不同,因为通常我们都会认到这里新的线程会中止,后面的程序的会由最开始的线程(即执行strand(1)的线程)执行。 结论:从这个例子我们可以看到为了保证程序原有的串行语义,Cilk的运行时系统采取了一种和大多数人直觉不同的策略把strand映射到多个工作线程之上。所以我们在编程时要避免使用依赖于当前线程的数据访问手段,例如使用线程本地存储。这是因为在cilk_sync之后程序可选择由任一工作线程继续执行,而这个选择是不确定的。
