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

 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <Windows.h> #define M 1024 float matA[M][M];
float matB[M][M];
float matC[M][M]; void InitMatrix( float* matrixX )
{
register int i;
for ( i = ; i < M * M; i ++ )
{
*matrixX ++ = ( float )( rand() % ) / ;
}
} void MulMatrix( float* matrixA, float* matrixB, float* matrixC )
{
register int i, j, k;
register float* p, *q, f;
for ( j = ; j < M; j ++ )
{
for ( i = ; i < M; i ++ )
{
p = matrixA + j * M;
q = matrixB + i;
f = ;
for ( k = ; k < M; k ++ )
{
f += *p * *q;
p ++;
q += M;
} matrixC[j * M + i] = f;
}
}
} int main()
{
DWORD t;
//register int i, j; srand( ( unsigned int )time( NULL ) ); InitMatrix( ( float* )matA );
InitMatrix( ( float* )matB ); t = ::GetTickCount();
MulMatrix( ( float* )matA, ( float* )matA, ( float* )matC );
t = ::GetTickCount() - t; /*for ( j = 0; j < M; j ++ )
{
for ( i = 0; i < M; i ++ )
{
printf( "%.2f ", matC[j][i] );
}
printf( "\n" );
}*/ printf( "TIME:%d\n", t ); return ;
}

机器配置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 = ; j < M; j ++ )
{
for ( i = ; i < M; i ++ )
{
p = matrixA + j * M;
q = matrixB + i;
t = j * M + i;
matrixC[t] = ;
for ( k = ; k < M; k ++ )
{
matrixC[t] += *p * *q;
p ++;
q += M;
}
}
}
}

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

难道也是CACHE。。

最新文章

  1. PHP 观察者模式
  2. Workflow笔记2——状态机工作流
  3. window 安装grunt
  4. 直接使用docker而无须加sudo
  5. fastcgi(一)
  6. Codeforces Round #309 (Div. 2) A. Kyoya and Photobooks 字符串水题
  7. SQL 复杂查询
  8. Xamarin IOS – hello word
  9. Android 四大组件之service与Broadcast
  10. go语言defer使用
  11. java用户界面——加载图片 jpg GIF
  12. 重定向URL
  13. SQL Server学习之路(八):扩展SQL语句
  14. dubbo,eclipse,服务报错
  15. Golang丰富的I/O 二----cgo版Hello World
  16. Mysql5.6二进制包安装方法
  17. vue2.x 时间范围 date range timepicker。只在项目中使用elementUI的date-picker
  18. VS2015中使用报表控件(ReportViewer)的方法
  19. Spring Boot 构建电商基础秒杀项目 (一) 项目搭建
  20. unity开发笔记

热门文章

  1. codevs1183 泥泞的道路(01分数规划)
  2. Extjs grid禁用头部点击三角下拉菜单
  3. 基于Hexo且在GitHub上搭建博客
  4. http升级https(转)
  5. JavaScript编程艺术-第10章-10.2-实用的动画
  6. Asp.NET 知识点总结(一)
  7. [算法] 常见排序算法总结(C语言版)
  8. FFT学习及简单应用(一点点详细)
  9. CSS 样式的优先级小结
  10. 网站开发综合技术 第一部分HTML 1.3.2表单