intel compiler的表现

好久没弄这个东西,今天突然想试下,代码没写完,以后补。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 4 #include <math.h>
 5 #include <Windows.h>
 6
 7 #define M      1024
 8
 9 float matA[M][M];
10 float matB[M][M];
11 float matC[M][M];
12
13 void InitMatrix( float* matrixX )
14 {
15     register int i;
16     for ( i = 0; i < M * M; i ++ )
17     {
18         *matrixX ++ = ( float )( rand() % 2000 ) / 1000;
19     }
20 }
21
22 void MulMatrix( float* matrixA, float* matrixB, float* matrixC )
23 {
24     register int i, j, k;
25     register float* p, *q, f;
26     for ( j = 0; j < M; j ++ )
27     {
28         for ( i = 0; i < M; i ++ )
29         {
30             p = matrixA + j * M;
31             q = matrixB + i;
32             f = 0;
33             for ( k = 0; k < M; k ++ )
34             {
35                 f += *p * *q;
36                 p ++;
37                 q += M;
38             }
39
40             matrixC[j * M + i] = f;
41         }
42     }
43 }
44
45 int main()
46 {
47     DWORD t;
48     //register int i, j;
49
50     srand( ( unsigned int )time( NULL ) );
51
52     InitMatrix( ( float* )matA );
53     InitMatrix( ( float* )matB );
54
55     t = ::GetTickCount();
56     MulMatrix( ( float* )matA, ( float* )matA, ( float* )matC );
57     t = ::GetTickCount() - t;
58
59
60     /*for ( j = 0; j < M; j ++ )
61     {
62         for ( i = 0; i < M; i ++ )
63         {
64             printf( "%.2f ", matC[j][i] );
65         }
66         printf( "\n" );
67     }*/
68
69     printf( "TIME:%d\n", t );
70
71
72     return 0;
73 }

机器配置E3 1231V3              MEM:16G       VS2010SP1      ICC  2015XE   GTX660  将来把CUDA带来一起测下

1. CPU单线程 仅一个O2

4750ms     大体如此

多线程原来测过,这次代码没加上。 按物理核计算 4核  应该6秒左右  超线程估计会好些。应该能到5秒左右。

2. 单文件转为ICC编译  额外添加优化项/Qipo /Qparallel

2600ms左右

多线程依然没测,以后补

3. CUDA也没测

4.MKL没测。。 有点对不住这个CPU了。。呵呵,心血来潮,以后一定补上。

5. 比较搞笑的是,我在收工的时候突发奇想,要把MatrixC相关代码改为本地,试下有没有效果,这个还真有,平均少100ms

看来,高手们教的CACHE命中还是很有道理的。

上面代码是改后的,改之前为

void MulMatrix( float* matrixA, float* matrixB, float* matrixC )
{
    register int i, j, k, t;
    register float* p, *q;
    for ( j = 0; j < M; j ++ )
    {
        for ( i = 0; i < M; i ++ )
        {
            p = matrixA + j * M;
            q = matrixB + i;
            t = j * M + i;
            matrixC[t] = 0;
            for ( k = 0; k < M; k ++ )
            {
                matrixC[t] += *p * *q;
                p ++;
                q += M;
            }
        }
    }
}

6. 更搞笑的是,把q += M; 中的M改为100.。。。。竟然变为了原来的1/10

难道也是CACHE。。

时间: 2024-10-28 11:11:55

intel compiler的表现的相关文章

[boost] build boost with intel compiler 16.0.XXX

Introduction There are few information about how to compile boost with Intel compiler. This article is to describe a simple command steps to let you get a boost library with Intel compiler support. Steps step 1: start your Intel compiler cmd window s

Intel 编译器 静态安全检查 真心的很详细 转

Static Security Analysis with Intel? Parallel Inspector XE ___________________________________________________________________ Intel? Academic Community Disclaimer The information contained in this document is provided for informational purposes only

使用Intel编译器获得一致的浮点数值计算结果

大多数十进制的浮点数, 用二进制表示时不是完全一致的; 与此同时, 大多数与浮点数值相关的计算结果, 存在着固有的不确定性. 通常, 编写浮点计算应用软件希望达到如下的目标:  - 准确性:     意味着该产品产生的计算结果,应当"接近"于实际计算的结果; 评判的标准是误差值, 有时候也采用最后几位("units in the last place", ulp)  - 可复制性:    意味着该产品始终产生一致的结果, 无论运行的先后, 采用不同的编译选项, 使用

搭建高性能计算环境(三)、安装intel编译器和mpi

很多计算软件都是要从源代码编译的,并且运行也需要mpi的支持,本节我们来安装intel编译器和openmpi. 1. Intel编译器的安装 需要的软件包:parallel_studio_xe_2013_update2_intel64.tgz.License文件 1)首先将软件包上传的Linux系统,可以使用上节介绍的ssh工具. 2)进入上传的目录,解压缩 tar xvf parallel_studio_xe_2013_update2_intel64.tgz 3)进去解压出来的目录 cd pa

内核compiler.h的学习

直接上代码就可以了,所以的学习都在注释当中呢! #ifndef __LINUX_COMPILER_H #define __LINUX_COMPILER_H #ifndef __ASSEMBLY__ //如果宏定义了__CHECKER__ //详细学习一个Sparse #ifdef __CHECKER__ /** * 这个使用来修饰一个变量的,这个变量必须是非解除参考的,no * dereference的,即这个变量必须是有效的,而且变量所在的 * 地址空间必须是1,即用户程序所使用的. * 程序

How To Compile Qt with Visual Studio 2010

This post is a step-by-step guide on how to compile Qt 4.x.x with MSVC 2010. Although we use Qt 4.7.1 as an example (for historical reasons), you can also find suggestions on building newer versions of Qt by MSVC 2012 and even by Intel Compiler for b

Ceph性能优化总结(v0.94)

如需转载请标明作者,原文地址:http://xiaoquqi.github.io/blog/2015/06/28/ceph-performance-optimization-summary/ 最近一直在忙着搞Ceph存储的优化和测试,看了各种资料,但是好像没有一篇文章把其中的方法论交代清楚,所以呢想在这里进行一下总结,很多内容并不是我原创,只是做一个总结.如果其中有任何的问题,欢迎各位喷我,以便我提高. 优化方法论 做任何事情还是要有个方法论的,"授人以鱼不如授人以渔"的道理吧,方法通

TTB 基本

中文名 ,线程构建模块 外文名 Thread Building Blocks 缩    写 TBB 开    发 intel 目录 1线程构建模块 2黑体亮温 3斜交载重轮胎 4串联球轴承 1线程构建模块编辑 TBB,Thread Building Blocks,线程构建模块,是Intel公司开发的并行编程开发的工具. OSCON 上,Intel 宣布,Threading Building Blocks,Intel 众多软件开发工具中的一个,open source了.协议是 GPLv2. TBB

openMP的一点使用经验

最近在看多核编程.简单来说,由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走入了寻常百姓家,传统的单线程编程方式难以发挥多核CPU的强大功能,于是多核编程应运而生.按照我的理解,多核编程可以认为是对多线程编程做了一定程度的抽象,提供一些简单的API,使得用户不必花费太多精力来了解多线程的底层知识,从而提高编程效率.这两天关注的多核编程的工具包括openMP和TBB.按照目前网上的讨论,TBB风头要盖过openMP,比如openCV过去是使用openMP的,但从2.3版本开始抛弃ope