intel compiler的表现
2024-10-04 09:03:37
好久没弄这个东西,今天突然想试下,代码没写完,以后补。
#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。。
最新文章
- PHP 观察者模式
- Workflow笔记2——状态机工作流
- window 安装grunt
- 直接使用docker而无须加sudo
- fastcgi(一)
- Codeforces Round #309 (Div. 2) A. Kyoya and Photobooks 字符串水题
- SQL 复杂查询
- Xamarin IOS – hello word
- Android 四大组件之service与Broadcast
- go语言defer使用
- java用户界面——加载图片 jpg GIF
- 重定向URL
- SQL Server学习之路(八):扩展SQL语句
- dubbo,eclipse,服务报错
- Golang丰富的I/O 二----cgo版Hello World
- Mysql5.6二进制包安装方法
- vue2.x 时间范围 date range timepicker。只在项目中使用elementUI的date-picker
- VS2015中使用报表控件(ReportViewer)的方法
- Spring Boot 构建电商基础秒杀项目 (一) 项目搭建
- unity开发笔记