共 1,394 篇文章
共 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
帖子来自 Feilong H. (Intel) 
英特尔编译器优化系列:深入IPO优化
作者: Feilong H. (Intel) (3 篇文章) 日期: 八月 16, 2010 在 3:27 下午
评论 (1)
在上一篇文章《英特尔编译器优化系列:初识IPO优化》中,我们认识了IPO以及IPO的使用步骤。下面让我们进一步深入了解IPO。 使用IPO优化大型应用程序 我们知道,IPO在“编译”时将源代码转换成中间语言文件,然后在“链接”时将所有的中间语言文件合并为一个中间语言文件,然后对其进行分析与优化,优化后生成一个的二进制文件,然后传递给链接器进行链接。因此我们会发现“编译”这一步的速度是非常快的,“链接”的速度要比没有使用IPO时慢得多。这里给“编译”和“链接”打上引号,是特指IPO优化步骤中的两个阶段,请参考《英特尔编译器优化系列:初识IPO优化》内的“IPO示意图”。 在使用IPO优化大型的应用程序的时候,在“链接”阶段进行IPO优化后生成的单个二进制文件可能会非常庞大,这可能会给系统虚拟内存造成很大的压力,导致频繁的内存换页,最终影响编译、链接的效率,甚至出现out of memory信息。实际上,编译器会根据应用程序的大小来决定要生成一个还是多个二进制文件。通常情况下,编译器的决定是能满足我们的需求的。但是如果你在编译大型应用程序的时候,发现有编译链接时间过长或out of memory,你可以尝试用下面方法之一来解决: 在-ipo(Linux和Mac OS X)或/Qipo(Windows)开关后跟一个大于0的整数,如-ipoN或/QipoN。这个N的作用是让编译器生成N个二进制文件。你可以根据具体情况,来调整合适的N。 使用-ipo-separate(Linux和Mac OS X)或/Qipo-separate(Windows)开关。编译器将生成与源文件个数相同的二进制文件。 inline行为的控制 通过指定函数的属性,可以控制编译器的inline行为。比如,__forceinline和always_inline让编译器必须将函数inline,而编译器肯定不会inline有noinline属性的函数。 __forceinline int ...
分类: Blog Challenge, 博客征文专栏, 并行计算, 软件开发工具
标签:Intel Compiler, IPO
英特尔编译器优化系列:初识IPO优化
作者: Feilong H. (Intel) (3 篇文章) 日期: 八月 13, 2010 在 11:06 上午
评论 (1)
认识IPO IPO优化(全称Interprocedural Optimization)在很长一段时间内都是英特尔编译器的几大特色优化手段之一。在我刚接触英特尔编译器的时候,编译器版本号还是7.0,由于IPO易于使用而且优化效果出色,IPO就已经被英特尔编译器用户广泛使用了。 首先,我们来看一看IPO主要包含哪些优化: Inlining:将函数体插入到函数调用点,以减少函数调用带来的开销。但是并不是一见到函数调用就要inline,因为inline也是有一定开销的,inline后生成的代码变大了,过大的代码可能导致i-cache miss的问题。所以英特尔编译器会分析源代码,根据具体情况来决定是否要做inlining。Inlining的变种是Partial inlining,例如下面伪代码 void foo() { some work ...
分类: Blog Challenge, 博客征文专栏, 并行计算, 软件开发工具
标签:Intel Compiler, IPO
Intel® Cilk Plus程序中使用锁需要注意的问题
作者: Feilong H. (Intel) (3 篇文章) 日期: 六月 27, 2010 在 12:24 上午
评论 (3)
在Intel® Cilk Plus程序中可以使用多种锁,包括操作系统提供的各种同步对象,例如Windows*的临界区和Linux*的互斥锁,还可以使用Intel® Threading Building Blocks库提供的tbb::mutex,还有编译器支持的具有原子性的基本函数(Intrinsics)。 在Intel® Cilk Plus程序中使用锁与在其他程序中使用锁没有太大的区别。唯一需要注意的是,在Intel® Cilk Plus程序中要避免锁跨越strand边界。也就是说,同辈的strand可以使用同一个锁,但是父strand和子strand共享一个锁存在潜在的问题,容易导致死锁。我们通过一段代码来看一下跨越strand边界的锁会引发的问题: int ...
