转载地址:https://blog.csdn.net/wlmnzf/article/details/83110433

安装步骤

# Ubuntu16.04
# 注意安装gFortran
. ./install.sh
. ./shrc

一般情况下经过以上步骤即可安装完毕,进行使用,注意需要执行shrc设置完环境变量以后才可正常执行后续的各种操作。

此外SPEC官方并不建议使用root权限,因为所有的测试集并不需要修改系统文件。
常用命令

runspec int --noreportable --n=1 --size=test

正式运行SPEC2006之前需要跑一下test尺寸,test尺寸比较小,因此跑起来耗时教短,可用于确保所有测试集都可正常编译运行。
    int:表明这是整数测试集,这个参数也可用fp,all代替,分表表示只使用浮点测试集和所有测试集。
    –noreportable 不生成报告 --reportable生成报告,若开启将会生成诸如html,pdf等格式的报告。
    –n=1:表示只跑一轮,每个测试集只会跑一遍。若要生成报告,则至少跑3轮
    –size=test:表示这次只跑少量集合,用于测试所有集合是否都已经编译执行正确

runspec int --reportable --size=ref -I

-I 表示跑benchmark的适合忽略错误,如果中途出错也不会停下来。
    如果没有指定rate和copies则为测试speed,speed只能测试单核性能。
    若想测试多核性能,则可通过 --rate=128进行指定,这里讲使用128个线程。
    rate和speed指标的区别请看
    Q15. What is the difference between a “rate” and a “speed” metric?

如何检测自己的电脑是多少核心的呢?

逻辑CPU核心数(包括超线程技术):

cat /proc/cpuinfo |grep "processor"|sort -u|wc -l

1

物理CPU个数:

grep "physical id" /proc/cpuinfo|sort -u|wc -l

1

或者

grep "physical id" /proc/cpuinfo|sort -u

1

每个物理CPU上的真实内核个数:

grep "cpu cores" /proc/cpuinfo|uniq

1

每个物理CPU上逻辑内核个数:

grep "siblings" /proc/cpuinfo|uniq

1

若每个核心上的逻辑内核比真实内核多,则说明开启了超线程技术
    来源Linux读取CPU信息

runspec 481 --noreportable --n=1

有时候为了修复编译错误,可以让他单独跑481这一项

runspec -c xxx.cfg

-c用于指定配置文件,如果没有指定,则默认使用根目录的config文件夹下的default.cfg作为配置文件

常见错误

gcc5.x如何跑SPEC2006

在无法通过的测试集的gcc编译选项上加 --std=gnu89

缺少库文件

在gcc的编译选项上加 -include /usr/include/memory.h include 后面的路径需要换成自己的,这里只是举个例子

447.dealII 遇到 error: ‘ptrdiff_t’ does not name a type

linux下需要引入 头文件,使用上述方法在config文件中找到447.dealII的配置在CXXPORTABILITY后面加上 -include cstddef -include cstdlib -include cstring
    进入的头文件若是系统库,则不需要具体路径

spec2006 fp test failed with 416.gamess and 481.wrf

416 miscompare 问题是gcc旧版本的bug,当开启O2优化的适合会出错
    升级新版本gcc或者用-O0进行编译或者换一个编译器
    483 end of file 问题,我是通过把配置文件中的wrf_data_header_size=8注释掉解决的

如果不幸需要自己编译工具链,可能会遇到更多奇怪的问题

Specmd5sum multiple definition of `getline’

Specmd5sum文件夹中的库文件跟系统库文件的函数冲突了,打开md5sum.c,注释掉#include "getline.h"

在perl中make时遇到 MAKE: *** NO RULE TO MAKE TARGET ‘<COMMAND-LINE>’

这是因为gcc在高版本中改变了输出,以至于这里没有及时过滤掉,其实只要将makefile(注意不是Makefile)中<command-line>
    的那一行全删掉即可。
    这里有个问题是,buildtools每次编译都会将之前生成的东西清空,然后重新生成makefile文件,因此手工删除makefile中的会失败。
    于是自己随便在网上找了一段代码用于删除makefile文件中的’<command-line>’

#include <stdio.h>
#include <stdlib.h>
#include <string.h>void Delete(char* filepath, char str[])
{char buf[4096];    //每读取一行,都将内容放到该数组中FILE* fp = fopen(filepath, "r");     //filepath里是原内容FILE* fpt = fopen("temp", "w");    //将filepath文件第n行内容删除后存入temp.txt中while(!feof(fp)){  fgets(buf,sizeof(buf), fp);  if (!strstr(buf,str)){      fprintf(fpt, "%s", buf);printf("%s\n",buf);}}fclose(fp);fclose(fpt);fpt = fopen("temp", "r");fp = fopen(filepath, "w");fgets(buf, sizeof(buf), fpt);    while(!feof(fpt)){fprintf(fp, "%s", buf);fgets(buf, sizeof(buf), fpt);}fclose(fp);fclose(fpt);}void main()
{Delete("x2p/makefile", "command");  Delete("makefile", "command");
}

将上述代码另存为delete.c,置于工具链中的perl-5.8.7根目录下
    并修改buildtools中的shell脚本,如下打加号的部分

DYLD_LIBRARY_PATH=`pwd`
    export LD_LIBRARY_PATH DYLD_LIBRARY_PATH
    ./Configure   -dOes -Ud_flock $PERLFLAGS -Ddosuid=undef -Dprefix=$INSTALLDIR -Dd_bincompat3=undef -A ldflags=-L${INSTALLDIR}/lib -A ccflags=-I${INSTALLDIR}/include -Ui_db -Ui_gdbm -Ui_ndbm -Ui_dbm -Uuse5005threads ; testordie "error configuring perl"
 
  +  gcc -o del delete.c
  +  ./del
  +  cd x2p
  +    $MYMAKE
  +  cd ../
  +  ./del

$MYMAKE; testordie "error building perl"
    ./perl installperl; testordie "error installing perl"

spec006 使用相关推荐

最新文章

  1. 云解析DNS产品优势与应用场景
  2. [JS-JQuery]基础
  3. ntop和Cacti
  4. access开发内销核算系统
  5. Swift--字符串和字符(一)
  6. HTFS.Software.v7.3-ISO 1DVD(传热模拟,最新完全解密版)
  7. 递归算法 流程图_什么是算法?如何学习算法?算法入门的学习路径
  8. InnoDB的Buffer Pool简介
  9. jQuery中click事件多次触发解决方案
  10. 大数据时代的回收生意经(淼一专访)
  11. integer判断是否为null_面试常考题JavaScript用七种方式教你判断一个变量是否为数组类型...
  12. QTreeView设置branch图标大小
  13. html如何调图片透明度,改变图片的透明度.html
  14. Openstack 经典面试问题和解答
  15. 微型计算机的硬件系统主要核心软件,计算机硬件系统最核心的是什么
  16. 拥抱变化,面向Java17,Java8-18全系列特性详解
  17. excel表格末尾添加一行_七夕表白,用Excel试试!抖音爆红,一晚点赞破百万
  18. 使用鲁大师检测硬盘健康状态
  19. 上方网首发:TestBird《2015年度手游测试白皮书》
  20. STM32通过I2C接口实现温湿度(AHT20)的采集与OLED显示及显示姓名学号

热门文章

  1. ctr 平滑_根据样本数进行点击率CTR的修正 - Wilson CTR
  2. 熬夜肝了这一份C++开发详细学习路线
  3. 如何借助企业微信运营管理用户?
  4. 我说,执着造就了成功
  5. dns服务器经赏要修复,十要诀帮你修复DNS域名解析服务故障
  6. HP M132snw 打印机如何在换路由器的时候更换整个局域网配置?
  7. 赚的钱不花掉就不算自己的钱?
  8. PyTorch中的torch.clamp()实现矩阵裁剪
  9. 2022年危险化学品经营单位主要负责人及危险化学品经营单位主要负责人模拟考试
  10. 数字人民币试点目前呈现“全面开花”态势