spec006 使用

转载地址: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"

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值