使用Termux在Android设备上编译运行SpecCPU2006

news/2024/5/3 23:17:47

Spec CPU 2006 的使用说明(曲线救国版)

因本部分实验用到的Spec CPU2006依赖于多个编译工具包,因此对源码的编译要在配置好环境的Linux设备上运行,根据实验发现,现有的环境(包括adb和termux)都不能很好地支持代码编译,经过多种尝试,最后通过在termux中安装ubuntu系统实现了环境配置、编译运行等测试。
当然最理想的还是交叉编译,后面再补一篇,这篇不是哦。

1.ubuntu环境配置

1.1 Termux简介

Termux 是一款安卓平台下模拟 Linux 环境的 app。可以直接使用,无需 root或额外设置。支持 apt 进行软件包管理。

1.2 Termux安装

首先,下载termux(Release v0.118.0 · termux/termux-app (github.com)),安装到手机

adb install .\termux-app_v0.118.0+github-debug_arm64-v8a.apk

1.3 Termux配置

  • 换源: termux-change-repo,参考tsinghua源;
  • 更新: pkg updatepkg upgrade
  • 配置vim: pkg install vim,然后输入export EDITOR=vim把默认编辑器修改为vim;
  • 配置sudo: pkg install tsu
  • 配置ssh【非必须,方便电脑端控制】:ifconfig 查看本机ip,whoami 查看主机名。输入pkg install openssh安装SSH软件,安装好之后输入passwd添加密码(需要输入两次),然后安装nmappkg install nmap。最后分别输入sshdnmap+ip地址 来开启服务。

在电脑端可以使用finalshell或者xshell等其他终端工具,新建ssh连接
在这里插入图片描述
在这里插入图片描述
注意,每次重启Termux客户端的时候,都需要输入sshd命令来开启ssh服务。

1.4 Termux安装Ubuntu

  1. 安装wget: apt-get install wget -y
  2. 安装proot: apt-get install proot -y
  3. 安装git: apt-get install git -y
  4. 转到HOME: cd ~
  5. 下载脚本: git clone https://github.com/MFDGaming/ubuntu-in-termux.git
  6. 打开目录: cd ubuntu-in-termux
  7. 增加执行权限: chmod +x ubuntu.sh
  8. 运行脚本: ./ubuntu.sh -y
  9. 打开Ubuntu系统:./startubuntu.sh

2.SpecCPU2006在安卓手机的编译运行

2.1SpecCPU2006简介

SPEC CPU2006是SPEC组织推出的CPU子系统评估软件,重点测试系统的处理器、内存子系统和编译器。
SPEC CPU2006包括了CINT2006和CFP2006两个子项目,前者用于测量和对比整数性能、包含12个不同的基准测试,而后者则用于测量和对比浮点性能、包含17个不同的基准测试。

SPEC CPU2006测试中,测试系统的处理器、内存子系统和使用到的编译器(SPEC CPU2006提供的是源代码,并且允许测试用户进行一定的编译优化)都会影响最终的测试性能,而I/O(磁盘)、网络、操作系统和图形子系统对于SPEC CPU2006的影响非常的小。

2.2 SpecCPU2006下载

speccpu2006-v1.0.1百度网盘下载地址:
链接: https://pan.baidu.com/s/1R-RCA3ZKSnpbyXgqEl7bSw?pwd=a3h8
提取码: a3h8

2.3 SpecCPU2006测试原理

Spec2006测试模式分为rate测试speed测试两项,其中rate测试主要衡量系统的多并发运算处理性能即平常我们所说的多线,speed测试主要衡量系统的单任务处理性能即平常我们所说的单线。

CINT2006包括C编译程序、量子计算机仿真、下象棋程序等,CFP2006包括有限元模型结构化网格法、分子动力学质点法、流体动力学稀疏线性代数法等。为了简化测试结果,SPEC决定使用单一的数字来归纳所有12种整数基准程序。
具体方法是将被测计算机的执行时间标准化,即将被测计算机的执行时间除一个参考处理器的执行时间,结果称为SPECratio。SPECratio值越大,表示性能越快(因为SPECratio是执行时间的倒数)。CINT2006或CFP2006的综合测试结果是取SPECratio的几何平均值。

各个测试组件基本上都由C和Fortran语言编写,有7个测试项目使用了C++语言,而Fortran语言均用来编写浮点部分。

2.4 文件结构

在这里插入图片描述

2.5 SpecCPU2006安装

首先在termux 主目录下创建一个文件夹share 用来存放Spec文件。
mkdir share
在这里插入图片描述

将前面下载下来的压缩包解压(或者先传到手机再解压)传到termux的share中,这里使用的是adb push在电脑上解压好的文件夹,路径可以通过pwd查看。
解压: tar xvf speccpu2006-v1.0.1-newest.tar -C ~ > /dev/null
push到手机命令: adb push .\speccpu2006\ /data/data/com.termux/files/home/share
在这里插入图片描述

根据实验情况发现,这里还必须通过adb给传送过去的文件增加写权限,通过adb shell进入文件系统,找到刚才的文件夹目录chmod -R 777 ./share/
在这里插入图片描述
打开Ubuntu终端,安装依赖包
在这里插入图片描述
更新:
apt-get update
apt-get upgrade
主要的编译工具:
apt-get install gcc g++ gfortran libbz2-dev

Ps: 如果提示缺少apt-get,可以使用命令apt-get install apt安装,缺少sudo可以用命令apt install sudo安装,安装vim是apt install vim。如果速度慢也可以换源,参考这篇博客。在使用的时候出现了sudo: unable to resolve host localhost: Name or service not known这个虽然不影响,但解决办法是把下面的配置覆盖到/etc/hosts文件中:
在这里插入图片描述
安装完成如下,就可以开始准备编译了
在这里插入图片描述
在Ubuntu的~目录下增加个软连接方便直接在~目录操作:
ln -s /data/data/com.termux/files/home/share/speccpu2006/ ~/spec
在这里插入图片描述

Ps: 在此处实现文件在Ubuntu系统内运行遇到很多困难,目前总结来看,通过在Ubuntu内软连接直接访问手机文件系统存在权限不足的问题。 通过./startubuntu.sh运行的时候,vim修改该文件增加command+=" -b /data/local/tmp"挂载文件系统目录,发现也有问题,这里做个记录。

修改代码中几处文件
vim spec/tools/src/buildtools,注释311行,在312行./Configure前加export PERLFLAGS=“-A libs=-lm -A libs=-ldl”
在这里插入图片描述
vim spec/tools/src/make-3.80/glob/glob.c在第209行“#if !defined __alloca && !defined GNU_LIBRARY”和230行“#endif”前添加“//”注释掉;第232、240行注释掉。
在这里插入图片描述
到此为止就配置好了,接下来运行安装脚本 ./install.sh ,需要输入 yes 。然后就是漫长的等待。
在这里插入图片描述
安装完成。
在这里插入图片描述

2.6 SpecCPU2006使用

!!! 每次使用前加载环境变量 !!!. ./shrc(点后面空格!)
使用runspec -V 可以检查是否安装成功
在这里插入图片描述
测试471.omnetpp:
runspec -c arm64.cfg -i ref -n 3 -r -u 8 471
【跑一组omnetpp需要大概1.6h】

不同平台的命令不太一样,这里仅列举ARM
runspec -c arm64.cfg -n 1 -r 1 all(单线程)
runspec -c arm64.cfg -n 1 -r N all(多线程)

=== 主要参数说明 ===

-n 指定测试轮数 (3轮测试的话测试完成后会自动算出Base Ratio的几何平均数(几何平均数与算数平均值不同,几何平均数是对各变量值的连乘积开项数次方根),3轮以下则不显示该分数,需要手动算分; 手动算几何平均数方法:可在EXCEL表格中执行函数 =GEOMEAN(G8:G24));

-r N,设置cpu核数,N和CPU核数一致,根据台式机或服务器的核数去指定多线程N的值;

all代表浮点和整型参数都测试

2.7 运行结果示例

测试结束后在result目录下,查看测试结果,测试结果一般以测试类型和测试次序进行区别,并且会按照整点和浮点进行划分。
如果是按照正式reportable的模式进行测试的话,会出一份网页版的正式测试结果,非正式结果可以去asc或txt文档查看,格式例如下文:
在这里插入图片描述
在这里插入图片描述

Base Ratio为测试分值,该测试一般运行3遍取中值。整体结果为所有结果的几何平均值。
查看测试结果:
①测试结果会在测试时打印在终端输出当中,可在终端中看到结果分数;或在SPECCPU/result目录中查看测试结果文件。
②执行整数测试时,会在SPECCPU/result目录中生成以下五个文件:
“CINT2006.xxx.flags.html”
“CINT2006.xxx.pdf”
“CINT2006.xxx.rsf”
“CINT2006.xxx.txt”
“CPU2006.xxx.log”
③执行浮点测试时,会在SPECCPU/result目录中生成以下五个文件:
“CFP2006.xxx.flags.html”
“CFP2006.xxx.pdf”
“CFP2006.xxx.rsf”
“CFP2006.xxx.txt”
“CPU2006.xxx.log”
其中:
flags.html文件中间存放了本次测试中每个测试项使用的所有Flags信息;
pdf文件为最常用的结果文件,其中包含了结果的柱状图、Hardware信息、Software信息、结果的数据表、General Notes、Flags等多种信息;
rsf文件为SPEC CPU2006是原始结果文件,可通过该文件重新生成其他结果文件;
txt文件内容和pdf文件类似,区别是txt为纯文本结果文件。

附:SPECCPU2006测试命令

一、一些配置经验

1.先运行shrc来准备测试环境的准备,然后执行runspec命令来实际开始基准测试。
2. runsepc命令语法为:runspec [options] [list of benchmarks to run]
3.如果生成有效的报告,则需要跑int, fp, 或者 all(就包括int、fp);否则,你也可以随意选择一个自己想跑的benchmark。
4. 配置文件中(文件名中),rate和speed的区别:rate是系统的能达到的总体能力的衡量;speed是系统完成一个任务的速度的衡量。 默认值就是使用rate这种度量方式。
5.测试时间很长,设备存储空间要充足,不可中断。

二、常用测试命令组合

1.runspec -c test.cfg -i test -I all
基于最小测试数据集快速执行所有的测试,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。
2.runspec -c test.cfg -i ref -n 3 -I all
基于最大测试数据集全面执行所有的测试,用于测试单核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。
3.runspec -c test.cfg -i ref -n 3 -r -u 4 -I all
基于最大测试数据集全面执行所有的测试,用于测试4核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。
4.runspec -c test.cfg -i ref -n 3 -r -u 8 -I all
基于最大测试数据集全面执行所有的测试,用于测试8核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。
5.runspec -c test.cfg -i ref -n 3 -r -u 8 -I int
基于最大测试数据集执行12个定点的测试,用于测试8核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。
6.runspec -c test.cfg -i ref -n 3 -r -u 8 -I 164
基于最大测试数据集只执行164单个测试,用于测试8核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。

三、参数说明

runspec: 表示执行SPEC CPU2000基准程序开始进行测试;
-c:读取测试配置文件;
test.cfg: 配置文件中可以包含上述命令的所有信息,但是runspec命令的优先级高。此文件在spec的解压目录下,位于SPEC CPU2006安装目录的config目录下;
-i:输入测试数据集的大小,测试规模有test、ref、train,ref代表最大测试数据集,test代表最小测试数据集跑的时间最短,如果测试编译器正确性的时候可以用test规模,但是想测试性能时候用ref;
-n:运行的次数,如果想得到加权统计的结果,也就是常说的cpu的spec分数,需要设置n大于等于3;
-I:测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例,如果不加该参数,程序运行过程出现错误时,SPEC CPU2000将停止测试;
-r:测试rate,rate数据指多核CPU情况下运行多个相同进程的分值,与-u联合使用。选择copy数量,一般来说copy数量等于CPU核的个数,参数为“-C num”(或–copies num)。注意:如果选择speed度量方式,其copy就是1,是不可以更改的。 其实“-r 4”就等于"–rate --copies 4";
-u:CPU的核数,用于多核CPU测试,与-r联合使用;

测试项目有以下几种选择:
all:默认,表示SPEC CPU2000将运行基准测试程序中的所有测试项目;
int:表示SPEC CPU2000将运行基准测试程序中的12个定点测试项目;
fp: 表示SPEC CPU2000将运行基准测试程序中的14个浮点测试项目;
164:表示SPEC CPU2000将运行基准测试程序中164.gzip这个程序;

-o formate等于“–output_format format”,指定生成输出报告、文件的格式。-o text,screen,pdf 输出格式,测试完成生成报告的格式,依次分别是txt,屏幕显示和pdf格式,保存目录在spec解压目录result中。

noreportable && reportable : 表示检测/不检测生成的二进制文件是否修改过。
–reportable 如果原来生成的二进制文件被修改了,则运行时会自动重新编译生成二进制文件,确保运行的程序是原始的程序。

测试模式:
-tune = base 基准测试;
-tune = peak 峰值测试;
-tune默认是base 可以选择base, peak, or all ,Report 首先是base,其次是peak。base和peak的区别在于:base是简单的标准的配置(一般跑个base就可以衡量性能了),peak是可以提供更多个性化的配置编译选项。(–tune 也简写为 -T,如"-T base"、 --tune all (包括base和peak))

–action参数是定义做什么测试动作,一般完整的是“–action=validate”,当然你也可以只做编译build、运行run、搭建环境setup等这样的步骤。
–action build 创建测试项目
–action onlyrun 只是运行,不进行确认测试结果是否正确
–action report 标准测试
–action clean 清理已经建立的测试项目


http://www.mrgr.cn/p/21045486

相关文章

模板匹配

1. 模板匹配步骤模板匹配是一种基于图像的技术,用于在图像中寻找与给定模板图像相似的部分。由于模板图像的尺寸小于待匹配图像的尺寸,同时又需要比较两幅图像的每一个像素的灰度值,因此常采用在待匹配图像中选择与模板相同的尺寸的滑动窗口,通过比较滑动窗口与模板的相似程…

相亲交友小程序,多端交付,支持二开,交友app小程序搭建陌生人交友私域聊天

随着社会生活节奏的加快,人们越来越依赖科技来解决生活中的各种问题,包括婚姻交友。近年来,相亲交友小程序成为了一种非常受欢迎的交友方式,它们可以让用户在轻松的氛围中,通过一些趣味性的互动方式,快速找…

2024信友队智灵班春季 Test1 总结

4月模考 死亡回放 模考时间线 1:30 比赛开始,读 T1 宇宙爆炸 的题1:50 自己手模了几组样例,得出了一个错误结论,打出了第一版错误代码,然后上交( Wrong Answer 20 \color{red}\text{Wrong\ Answer\ 20} Wrong Answer …

FreeRTOS队列

FreeRTOS队列 在实际的应用中,常常会遇到一个任务或者中断服务需要和另外一个任务进行“沟通交流”,这个“沟通交流”的过程其实就是消息传递的过程。在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式,但是如果在使用操作系统的应用中用全局变量来传递消…

Postgres数据库中的死锁是如何产生的,如何避免和解决?

文章目录 死锁的产生原因如何避免死锁如何解决死锁示例代码查询死锁信息终止事务 在Postgres数据库中,死锁是一种特殊的情况,其中两个或多个事务相互等待对方释放资源,从而导致它们都无法继续执行。这种情况通常发生在多个事务尝试以不同的顺…

说说常见的排序算法有哪些?区别?

一、是什么 排序是程序开发中非常常见的操作,对一组任意的数据元素经过排序操作后,就可以把他们变成一组一定规则排序的有序序列 排序算法属于算法中的一种,而且是覆盖范围极小的一种,彻底掌握排序算法对程序开发是有很大的帮助的 对与排序算法的好坏衡量,主要是从时间复杂…

一个开源跨平台嵌入式USB设备协议:TinyUSB

概述 TinyUSB 是一个用于嵌入式系统的开源跨平台 USB 主机/设备堆栈,设计为内存安全,无需动态分配,线程安全,所有中断事件都被推迟,然后在非 ISR 任务函数中处理。查看在线文档以获取更多详细信息。 源码链接&#xff…

【VUE】Vue项目打包报告生成:让性能优化触手可及

Vue项目打包报告生成:让性能优化触手可及 Vue.js是一款流行的前端框架,开发者在使用Vue.js构建项目时,生产环境的性能优化尤为重要。为了帮助开发者分析和优化打包出来的资源,生成打包报告是一个不可或缺的步骤。本文将介绍几种在…

某游戏忍者全局过异常分析

虽然这篇文章可能会涉及到某些人的利益,但我还是写了 首先,我们先将手机与ce进行桥接(具体的教程b站有)然后我们先找到a内存的过异常(原理就是将当前怪物包改0,当前市面上广为流传的过异常都是这个原理)我们在ce中添加他的地址查看访问他的操作码(触发他)然后我们看到访…

linux8-ssh远程管理

1.网络配置使用nmtui命令或进入配置文件修改 配置为静态1 vim /etc/sysconfig/network-scripts/ifcfg-ens1602 TYPE=Ethernet3 PROXY_METHOD=none4 BROWSER_ONLY=no5 BOOTPROTO=none6 DEFROUTE=yes7 IPV4_FAILURE_FATAL=no8 IPV6INIT=yes9 IPV6_AUTOCONF=yes 10 IPV6_DEFROUTE=…

Hommie

Hommie靶机IP:192.168.56.115端口扫描 nmap -Pn -sV -sC 192.168.56.115PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 | ftp-syst: | STAT: | FTP server status: | Connected to ::ffff:192.168.56.101 | Logged in as ftp | TYPE: AS…

R语言入门:“Hellinger“转化和“normalize“转化(弦转化)的公式表示与R代码实现

1、写在前面 vegan包中的decostand()函数为群落生态学研究提供了一些流行的(和有效的)标准化方法。有关decostand()函数标准化的一些标准化方法可以看我的另一篇笔记:R语言入门:vegan包使用decostand()函数标准化方法 由于在网络上没有找到关于这两个转…

Devexpress GridControl下拉框实现联动

实现效果1.先在设计界面绑定数据列 1.点击设计器2.绑定数据列2. 绑定GridView的 FocusedRowChanged事件//定义两个下拉框 _RIcmbtype:不良分类 _RIcmbdefect:不良信息RepositoryItemComboBox _RIcmbtype = new RepositoryItemComboBox();RepositoryItemComboBox _RIcmbdefe…

ArtCoder——通过风格转换生成多元化艺术风格二维码

简介 ArtCoder能够从原始图像(内容)、目标图像(风格)以及想要嵌入的信息中,生成具有艺术风格的二维码。这一过程类似于通常的图像风格转换,但特别针对二维码的特点进行了优化和调整。 通过这种方法&#…

原型设计——墨语笔记APP

一、对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点。 墨刀、Axure、Mockplus等原型设计工具各有特色,下面我将从适用领域、优点和缺点三个方面对它们进行对比分析。 1.墨刀 适用领域:墨刀主要适用于快速原型设计和高保真度的交互设计,特别适合移动端…

linux7-iptables与firewall

1.iptables 1 规则链的默认策略拒绝动作只能是 DROP,而不能是 REJECT。 2 在日常运维工作中,经常会使用ping命令来检查对方主机是否在线,而向防火墙的INPUT 3 规则链中添加一条允许 ICMP 流量进入的策略规则就默认允许了这种 ping 命令检测行为。 4 [root@linuxprobe~]# ipt…

centos7安装mysql5.7笔记

1 配置yum仓库 1.1更新密钥 #更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 1.2 下载使用wget命令下载MySQL的repo文件 #下载使用wget命令下载MySQL的repo文件 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 2 使用…

[题解] [洛谷 P1174] 打砖块

[洛谷 P1174] 打砖块 题目描述 有 \(n\) 行 \(m\) 列的砖块和 \(k\) 发子弹,每个砖块都有一个得分,每次可以用一发子弹打碎某一列最下面的砖块并得到相应的得分。有的砖块在打碎后可以获得一发额外子弹的奖励。求该游戏的最大得分。输入格式 第一行有 \(3\)个正整数, \(n,m,…

南昌航空大学大一下学期java-题目集1~3总结性Blog——苏礼顺23201608

一、前言——总结三次题目集的知识点、题量、难度等情况 《面向对象程序设计》这一门课,是教授我们设计代码,掌握类、类间关系,以及面向对象的三大设计原则——封装、继承、多态等面向对象的基本概念和方法,并以面向对象的编程语言java语言设计程序。因此在这三次的题目集都…

前端切图练习,仿哔哩哔哩导航栏

效果 首先看看目标最后完成效果:思路 思路是分成左 右两个区域 左边: 分成三个重复的模块模块内分成上面(图片),下面(文字)右边 这种一个矩形就是一个li标签PS使用技巧 cmd+r 唤出左右游标卡尺 cmd+n 新建一个文件,最好先复制了,然后就可以建立一个和剪贴板一样的内容 代码 <…