intel compiler的表现
好久没弄这个东西,今天突然想试下,代码没写完,以后补。
#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。。
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 ...
- [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 ...
- 使用Intel编译器获得一致的浮点数值计算结果
使用Intel编译器获得一致的浮点数值计算结果大多数十进制的浮点数, 用二进制表示时不是完全一致的; 与此同时, 大多数与浮点数值相关的计算结果, 存在着固有的不确定性.通常, 编写浮点计算应用软件希 ...
- 记intel杯比赛中各种bug与debug【其一】:安装intel caffe
因为intel杯创新软件比赛过程中,并没有任何记录.现在用一点时间把全过程重演一次用作记录. 学习 pytorch 一段时间后,intel比赛突然不让用 pytoch 了,于是打算转战intel ca ...
- [转帖]双剑合璧:CPU+GPU异构计算完全解析
引用自:http://tech.sina.com.cn/mobile/n/2011-06-20/18371792199.shtml 这篇文章写的深入浅出,把异构计算的思想和行业趋势描述的非常清楚,难得 ...
- mysql 5.7.17发布
Mysql 5.7.17发布了,主要修复: Changes in MySQL 5.7.17 (2016-12-12, General Availability) Compilation Notes M ...
- Ceph性能优化总结(v0.94)
优化方法论 做任何事情还是要有个方法论的,“授人以鱼不如授人以渔”的道理吧,方法通了,所有的问题就有了解决的途径.通过对公开资料的分析进行总结,对分布式存储系统的优化离不开以下几点: 1. 硬件层面 ...
- x265编译
x265 HEVC Encoder Mission Statement Online documentation Mailing list x265-devel@videolan.org HOWTO ...
- openMP的一点使用经验【非原创】
按照百科上说的,针对于openmp的编程,最简单的就是在开头加个#include<omp.h>,然后在后面的for上加一行#pragma omp parallel for即可,下面的是较为 ...
随机推荐
- G. 铁路修复计划 最小生成树
G. 铁路修复计划 二分答案,改变边的权值,找最小生成树即可. 类似的思想还可以用在单度限制最小生成树和最优比例生成树上. #include<iostream> #include<c ...
- TI BLE : GAP Bond Manager
// Setup the GAP Bond Manager { uint32 passkey = 0; // passkey "000000" uint8 pairMode = G ...
- EJB是什么?EJB的概念分析与理解(copy)
[说明:转载于http://blog.csdn.net/jojo52013145/article/details/5783677] 1. 我们不禁要问,什么是"服务集群"?什么是& ...
- 清北考前刷题day2早安
/* 做法一:按h sort一遍,对于一段区间[i,j],高度花费就是h[j]-h[i] 然后枚举区间,把区间内C排序,一个一个尽量选即可. n^3logn 标算:n^3 dp 高度排序,保证从前往后 ...
- Java中的APT的工作过程
Java中的APT的工作过程 APT即Annotatino Processing Tool, 他的作用是处理代码中的注解, 用来生成代码, 换句话说, 这是用代码生成代码的工具, 减少boilerpl ...
- 第三章 K近邻法(k-nearest neighbor)
书中存在的一些疑问 kd树的实现过程中,为何选择的切分坐标轴要不断变换?公式如:x(l)=j(modk)+1.有什么好处呢?优点在哪?还有的实现是通过选取方差最大的维度作为划分坐标轴,有何区别? 第一 ...
- mac更改本地mysql登陆密码
安装完mysql 之后,登陆以后,运行任何命令,提示 You must SET PASSWORD before executing this statement解决办法. step 1: SET PA ...
- 使用Redis存储Nginx+Tomcat负载均衡集群的Session
配置Tomcat的session共享可以有三种解决方案: 第一种是以负载均衡服务器本身提供的session共享策略,每种服务期的配置是不一样的并且nginx本身是没有的. 第二种是利用web容器本身的 ...
- 构造 Codeforces Round #275 (Div. 2) C. Diverse Permutation
题目传送门 /* 构造:首先先选好k个不同的值,从1到k,按要求把数字放好,其余的随便放.因为是绝对差值,从n开始一下一上, 这样保证不会超出边界并且以防其余的数相邻绝对值差>k */ /*** ...
- virtualwrapper使用
1.创建: mkvirtualenv 虚拟环境目录 2.查看虚拟环境 workon lsvirtualenv 3.进入虚拟环境 workon 虚拟环境目录 4.退出虚拟环境 deactivate 5. ...