两个c程序测试机器性能
来源:互联网 发布:sql 2005什么用 编辑:程序博客网 时间:2024/04/30 18:37
拿两个小程序来测试机器性能
- crash.c
#include <stdio.h>#include <stdlib.h>void f();int main(int argc,char* argv[]){ int input =0; int i; printf("Input an integer:"); scanf("%d", &input); printf("The integer you input is %d\n", input); for(i=0;i<input;i++) f(); return 0;}void f(){ int *a; a=(int*)malloc(10*sizeof(*a)); free(a); return;}
- matmul.c
#include "stdio.h"#include "stdlib.h"#include <math.h>#include <sys/time.h>#define USEMKL 0#if USEMKL#include "mkl.h"#endif#define N 10000#define mat(A, i, j) (*(A+i*N+j))voidgen_mat(double* A, double* B){ int i,j; for(i=0;i<N;i++) for(j=0;j<N;j++){ mat(A,i,j)=-1+2.0*rand()/(RAND_MAX+1.0); mat(B,i,j)=-1+2.0*rand()/(RAND_MAX+1.0); } return;}voidcheck_result(double* A, double* B, double* C){ double res1, res2; int i,j,k;#if USEMKL struct timeval st, et;#endif res1=0; for(i=0;i<N;i++) for(j=0;j<N;j++){ res1=res1+fabs(mat(C,i,j)); mat(C,i,j)=0.; }#if USEMKL gettimeofday(&st,NULL); cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, N, N, N, 1.0, A, N, B, N, 0.0, C, N); gettimeofday(&et,NULL); printf("MKL: time: %0.6lf sec\n", et.tv_sec+et.tv_usec*1e-6-st.tv_sec-st.tv_usec*1e-6);#else for(i=0;i<N;i++) for(j=0;j<N;j++) for(k=0;k<N;k++) { mat(C,i,j)=mat(C,i,j)+mat(A,i,k)*mat(B,k,j); }#endif res2=0; for(i=0;i<N;i++) for(j=0;j<N;j++){ res2=res2+fabs(mat(C,i,j)); } res1-=res2; if(fabs(res1/res2) < 1e-10) printf("MatMul. passed!\n"); else printf("MatMul. faild %e/%e=%e\n", res1, res2, res1/res2);}/* Need to be Opt. */voidmatmul(double *A, double *B, double *C){ int i, j, k; for(i=0;i<N;i++) for(j=0;j<N;j++){ mat(C,i,j)=0.; } for(k=0;k<N;k++) for(j=0;j<N;j++) for(i=0;i<N;i++) { mat(C,i,j)=mat(C,i,j)+mat(A,i,k)*mat(B,k,j); } return;}int main(int argc, char* argv[]){ double *A,*B,*C; struct timeval st, et; A = (double*) calloc( N, N * sizeof(double)); B = (double*) calloc( N, N * sizeof(double)); C = (double*) calloc( N, N * sizeof(double)); gen_mat(A,B); printf("Gen matrix finished!\n"); gettimeofday(&st,NULL); matmul(A,B,C); gettimeofday(&et,NULL);/* if( et.tv_usec < st.tv_usec ) { et.tv_sec = et.tv_sec - st.tv_sec - 1; et.tv_usec = et.tv_usec + (1000000 - st.tv_usec); } else { et.tv_sec -= st.tv_sec; et.tv_usec -= st.tv_usec; }*/ printf("matrix mult. time: %0.6lf sec\n", et.tv_sec+et.tv_usec*1e-6-st.tv_sec-st.tv_usec*1e-6); check_result(A,B,C); free(A); free(B); free(C); return 0;}
前一个体验在内存中开辟空间所需的时间,后一个做一个大规模矩阵的乘法,看看所需要的时间。
0 0
- 两个c程序测试机器性能
- 两个linux性能测试程序LMbench和SysBench
- 两个测试程序
- 通用型C/C++程序性能测试Benchmark的简单实现
- Java程序性能测试
- Java程序性能测试
- Flex 程序性能测试
- Performance 测试程序性能
- Flex程序性能测试
- Java程序性能测试
- Linux 性能测试程序
- 程序性能测试
- c程序性能优化
- C 程序性能优化
- 360测试机器的硬件性能得分
- Linux - 两个Linux文件系统性能测试工具
- 性能测试—两个月总结
- 测试我们的程序性能
- C/CPP点滴积累--C、CPP函数定义的小差别
- 去掉ecshop中随机显示的 power by ecshop
- android studio查看logcat日志
- java学习日记——Object类II
- Redis集群方案及实现Sentienl
- 两个c程序测试机器性能
- python测试微信中谁把你删除了
- poj1102数字打印,七段数字码
- TCPdump抓包命令详解
- eclipse 安装struts2 插件
- Git基础
- 635A.Orchestra
- mysql5.5 开启慢查询日志
- 【解题报告】Codeforces Round #344 (Div. 2)