zoukankan      html  css  js  c++  java
  • 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( "
    " );
    67     }*/
    68 
    69     printf( "TIME:%d
    ", 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。。

  • 相关阅读:
    CICD : 存代码部署(精简版)
    CICD:通过Shell 将打包后的代码部署到各环境
    linux:curl 取得HTTP返回的状态码
    闭包简单的了解
    javascript正则表达式了解
    搭建PHP开发环境(四)-PHP操作MySQL
    搭建PHP开发环境(三)-MySQL安装配置
    搭建PHP开发环境(二)-PHP安装
    搭建PHP开发环境(一)-Apache安装配置
    生成简单验证码文字
  • 原文地址:https://www.cnblogs.com/javado/p/5540860.html
Copyright © 2011-2022 走看看