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

  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 = ; i < M * M; i ++ )
  17. {
  18. *matrixX ++ = ( float )( rand() % ) / ;
  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 = ; j < M; j ++ )
  27. {
  28. for ( i = ; i < M; i ++ )
  29. {
  30. p = matrixA + j * M;
  31. q = matrixB + i;
  32. f = ;
  33. for ( k = ; 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. /*for ( j = 0; j < M; j ++ )
  60. {
  61. for ( i = 0; i < M; i ++ )
  62. {
  63. printf( "%.2f ", matC[j][i] );
  64. }
  65. printf( "\n" );
  66. }*/
  67.  
  68. printf( "TIME:%d\n", t );
  69.  
  70. return ;
  71. }

机器配置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命中还是很有道理的。

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

  1. void MulMatrix( float* matrixA, float* matrixB, float* matrixC )
  2. {
  3. register int i, j, k, t;
  4. register float* p, *q;
  5. for ( j = ; j < M; j ++ )
  6. {
  7. for ( i = ; i < M; i ++ )
  8. {
  9. p = matrixA + j * M;
  10. q = matrixB + i;
  11. t = j * M + i;
  12. matrixC[t] = ;
  13. for ( k = ; k < M; k ++ )
  14. {
  15. matrixC[t] += *p * *q;
  16. p ++;
  17. q += M;
  18. }
  19. }
  20. }
  21. }

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

难道也是CACHE。。

intel compiler的表现的更多相关文章

  1. [boost] build boost with intel compiler 16.0.XXX

    Introduction There are few information about how to compile boost with Intel compiler. This article ...

  2. [Boost] 1.57.0 with VS2013 + Intel compiler

    The compiled version can be found below. Do not foget to give me a star. :) http://pan.baidu.com/s/1 ...

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

    使用Intel编译器获得一致的浮点数值计算结果大多数十进制的浮点数, 用二进制表示时不是完全一致的; 与此同时, 大多数与浮点数值相关的计算结果, 存在着固有的不确定性.通常, 编写浮点计算应用软件希 ...

  4. 记intel杯比赛中各种bug与debug【其一】:安装intel caffe

    因为intel杯创新软件比赛过程中,并没有任何记录.现在用一点时间把全过程重演一次用作记录. 学习 pytorch 一段时间后,intel比赛突然不让用 pytoch 了,于是打算转战intel ca ...

  5. [转帖]双剑合璧:CPU+GPU异构计算完全解析

    引用自:http://tech.sina.com.cn/mobile/n/2011-06-20/18371792199.shtml 这篇文章写的深入浅出,把异构计算的思想和行业趋势描述的非常清楚,难得 ...

  6. mysql 5.7.17发布

    Mysql 5.7.17发布了,主要修复: Changes in MySQL 5.7.17 (2016-12-12, General Availability) Compilation Notes M ...

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

    优化方法论 做任何事情还是要有个方法论的,“授人以鱼不如授人以渔”的道理吧,方法通了,所有的问题就有了解决的途径.通过对公开资料的分析进行总结,对分布式存储系统的优化离不开以下几点: 1. 硬件层面 ...

  8. x265编译

    x265 HEVC Encoder Mission Statement Online documentation Mailing list x265-devel@videolan.org HOWTO  ...

  9. openMP的一点使用经验【非原创】

    按照百科上说的,针对于openmp的编程,最简单的就是在开头加个#include<omp.h>,然后在后面的for上加一行#pragma omp parallel for即可,下面的是较为 ...

随机推荐

  1. 51Nod 1967 路径定向 —— 欧拉回路

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1967 显然是欧拉回路问题,度数为奇数的点之间连边,跑欧拉回路就可以 ...

  2. bzoj2989

    坐标轴转化+cdq分治 我们发现那个绝对值不太好搞,于是我们把曼哈顿距离转为切比雪夫距离,x'=x-y,y'=x+y,这样两点之间距离就是max(|x1'-x2'|,|y1'-y2'|),这个距离要小 ...

  3. 【高德地图API】SDK v1.1.1 在代码中设置Map中心点Center级别不起作用

    有时候你在初始化地图时不是直接在xaml中设置Map的Center,而是在cs代码中设置Center或者设置SetZoomAndCenter改变中心点和缩放级别.你可能会发现,不起作用. 这边提出的解 ...

  4. Vigenère密码 2012年NOIP全国联赛提高组(字符串模拟)

    P1079 Vigenère 密码 题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简 ...

  5. 使用Gitalk实现静态页面评论的功能

    使用静态页面的理由 本人在Github上使用github.io部署了一个静态主页,地址是http://aopstudio.github.io,用于存放一些笔记文件.虽然静态页面功能少,自动化程度低,不 ...

  6. c++编程中处理char和wchar_t的好工具

    /* ttype.h sdragonx 2015-02-18 18:32:43 这个几个模版函数是为了处理ansi或unicode,使字符串值或者字符串函数能够在模版中使用 2018/7/26 23: ...

  7. kafka启动时出现FATAL Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer) java.io.IOException: Permission denied错误解决办法(图文详解)

    首先,说明,我kafk的server.properties是 kafka的server.properties配置文件参考示范(图文详解)(多种方式) 问题详情 然后,我启动时,出现如下 [hadoop ...

  8. 窗体基础WINFORM

    winform 1.窗体: 造窗体界面: 窗体设计界面: 窗体类名不能重复! 属性: acceptbutton:回车是默认点击按钮 cancelbutton:按esc按键式默认的按钮 backcolo ...

  9. 树莓派zero_w设置中文(已成功)

    树莓派默认是采用英文字库的,而且系统里没有预装中文字库,所以即使你在locale中改成中文,也不会显示中文,只会显示一堆方块.因此需要我们手动来安装中文字体. 好在有一个中文字体是免费开源使用的.ss ...

  10. js中时钟表盘

    1.js时钟表盘 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...