SMP_S_FUNC_DUAL_CORE source functions.sh;
cmd="stress-ng --matrix 4 -t 10s --perf --matrix-size 16 --metrics-brief";
run_and_capture_values "taskset -c 0 $cmd" 's/.+matrix[[:space:]]+([[:digit:]]+)[[:space:]]+.*/\1/p' single_core;
run_and_capture_values "taskset -c 0-1 $cmd" 's/.+matrix[[:space:]]+([[:digit:]]+)[[:space:]]+.*/\1/p' dual_core;
check_array_values dual_core[@] single_core[@] "-gt" 0.9
 
 
run_and_capture_values() {
    local __arrayvalues=$3
    eval $__arrayvalues="($($1 2>&1 | sed -rn $2))"
}
 
run_and_capture_values "taskset -c 0 $cmd" 's/.+matrix[[:space:]]+([[:digit:]]+)[[:space:]]+.*/\1/p' single_core;
 
local __arrayvalues=single_core
eval
$single_core="($(taskset -c 0 stress-ng --matrix 4 -t 10s --perf
--matrix-size 16 --metrics-brief 2>&1 | sed -rn
's/.+matrix[[:space:]]+([[:digit:]]+)[[:space:]]+.*/\1/p'))"
 
 
taskset -c 0 stress-ng --matrix 4 -t 10s --perf --matrix-size 16 --metrics-brief 2>&1 输出:
 
stress-ng: info:  [251] dispatching hogs: 4 matrix
stress-ng: info:  [251] cache allocate: using built-in defaults as unable to determine cache details
stress-ng: info:  [251] cache allocate: default cache size: 2048K
stress-ng: info:  [251] successful run completed in 10.32s
stress-ng: info:  [251] stressor       bogo ops real time  usr time  sys time   bogo ops/s    bogo ops/s
stress-ng: info:  [251]                                       (secs)    (secs)        (secs)      (real time)    (usr+sys time)
stress-ng: info:  [251] matrix            80157     10.04      9.93          0.21           7979.93            7905.03
stress-ng: info: [251] matrix:
stress-ng: info:  [251]                  692737288 CPU Cycles                    67.13 M/sec
stress-ng: info:  [251]                  483721828 Instructions                  46.87 M/sec (0.698 instr. per cycle)
stress-ng: info:  [251]                  167637816 Cache References              16.24 M/sec
stress-ng: info:  [251]                     361004 Cache Misses                  34.98 K/sec ( 0.22%)
stress-ng: info:  [251]                   53225292 Branch Instructions            5.16 M/sec
stress-ng: info:  [251]                    1580816 Branch Misses                  0.15 M/sec ( 2.97%)
stress-ng: info:  [251]                  346474064 Bus Cycles                   33.57 M/sec
stress-ng: info:  [251]                         16 Page Faults Minor              1.55 /sec
stress-ng: info:  [251]                          0 Page Faults Major              0.00 /sec
stress-ng: info:  [251]                        992 Context Switches              96.12 /sec
stress-ng: info:  [251]                          0 CPU Migrations                 0.00 /sec
stress-ng: info:  [251]                          0 Alignment Faults               0.00 /sec
 
sed -rn 's/.+matrix[[:space:]]+([[:digit:]]+)[[:space:]]+.*/\1/p'))"
 
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
s 替换指定字符 p 表示打印行
.+  .匹配一个非换行符的任意字符  +重复一个或一个以上前一个字符 ab+ a后面至少跟着一个b
matrix[[:space:]]+  matrix后面至少跟着一个空格
([[:digit:]]+)[[:space:]]+    ([[:digit:]]+)后面至少跟着一个空格
.* 代表零个或多个任意字符
()匹配子串,保存匹配的字符
([[:digit:]]+)表示数字 重复一个或一个以上前一个字符(数字)
\1 子串匹配标记
 
实例:
echo idyll  1984  cheung |sed -rn 's/.*+[[:space:]]+([[:digit:]]+)[[:space:]]+([[:alpha:]]+)/\1\2/p'
输出1984cheung
 
sed -rn 's/.+matrix[[:space:]]+([[:digit:]]+)[[:space:]]+.*/\1/p'
80157
 
 
 
sed命令
命令 说明
d 删除,删除选择的行
D 删除模板块的第一行
s 替换指定字符
h 拷贝模板块的内容到内存中的缓冲区
H 追加模板块的内容到内存中的缓冲区
g 获得内存缓冲区的内容,并替代当前模板块中文本
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面
l 列表不能打印字符的清单
n 读取下一个输入行,用下一个命令处理新的行而不是第一个命令
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码
p 打印模板块的行
P 打印模板块的第一行
q 退出sed
b label 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾
r file 从file中读行
t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
w file 写并追加模板块到file末尾
W file 写并追加模板块的第一行到file末尾
! 表示后面的命令对所有没有被选定的行发生作用
= 打印当前行号
#
把注释扩展到第一个换行符以前
 
sed替换标记
 
命令 说明
g 表示行内全面替换
p 表示打印行
w 表示把行写入一个文件
x 表示互换模板块中的文本和缓冲区中的文本
y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
\1 子串匹配标记
& 已匹配字符串标记
sed元字符集
命令 说明
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[] 匹配一个指定范围内的字符,如/[sS]ed/匹配sed和Sed。
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
(..) 匹配子串,保存匹配的字符,如s/(love)able/\1rs,loveable被替换成lovers。
& 保存搜索字符用来替换其他字符,如s/love/&/,love这成love
< 匹配单词的开始,如:/<love/匹配包含以love开头的单词的行。
 > 匹配单词的结束,如/love>/匹配包含以love结尾的单词的行。
x{m} 重复字符x,m次,如:/0{5}/匹配包含5个0的行。
x{m,} 重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行。
x{m,n}
重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行。
 
check_array_values dual_core[@] single_core[@] "-gt" 0.9
 
check_array_values() {
    local multiplier=1
    if [ -n "$4" ]; then
        multiplier=$4
    fi
    local old=("${!1}")
    local new=("${!2}")
    for i in "${!old[@]}"; do
        echo "Checking assertion for index $i"
    echo "->calc: \"${old[$i]}*$multiplier $3 ${new[$i]}\""
        adjusted_value=$(echo "(${old[$i]} * $multiplier)/1" | bc)
        assert [ $adjusted_value $3 ${new[$i]} ]
    done
}
 
multiplier=0.9
local old=("${!1}")  =》local old=("${!dual_core[@]}")
local new=("${!2}") =》local new=("${!single_core[@]}")
 
比较一下:
#  ${数组名}并不会获得所有值,它只会获得到第一个元素的值。即${数组名}等价于${数组名[0]}
 
dual_core=(190 100)
 
check_array_values dual_core[@] single_core[@] "-gt" 0.9
 
local old=${1} =>old=dual_core[@]  #字符串
 
echo ${old[@]}  输出:dual_core[@]
    for i in "${!old[@]}"; do
        echo "${old[$i]}"
    done
输出:dual_core[@]
 
local old=${!1} =>old=${!dual_core[@]}  #带数组下标的遍历,当需要使用到数组的下标时,可以使用${!数组名[@]}
以上理解是错误的,这个!和遍历没有关系,这个是shell脚本中的间接变量引用。
##########################################################################

间接变量引用

如果第一个变量的值是第二个变量的名字,从第一个变量引用第二个变量的值就称为间接变量应用。
variable1的值是variable2,而variable2又是变量名, variable2的值为value,间接变量引用是指通过variable1获 得变量值value的行为
variable1=variable2
variable2=value
bash shell提供了两种格式实现间接变量引用
eval tempvar=$$variable1
tempvar=${!variable1}

    1. aaa=123
    2. bbb=aaa
    3. echo $bbb
    4. echo ${!bbb}
    5. 输出结果:

      aaa

      123

##############################################################################

echo ${old[@]}  输出:190 100 这是一个整体
    for i in "${!old[@]}"; do
        echo "${old[$i]}"
    done
输出:190 100
这一步比较奇怪,在函数里可以,但是在函数外,是 0 1感觉是序号。
 
local old=("${!1}") =>old=(${!dual_core[@]})=(190 100) #带数组下标的遍历 外面有()再次成为一个数组
  echo ${old[@]}  输出:190 100 这是数组
    for i in "${!old[@]}"; do
        echo "${old[$i]}"
    done
输出:
190
100
 
 
#!/bin/bash
#数组遍历 days=(one two three four)
#for循环遍历
for day in ${days[*]} #或${days[@]}
do
echo $day
done
echo "***************"
#for循环带下标遍历 ${!days[@]}==》(0 1 2 3)
for i in ${!days[@]}
do
echo ${days[$i]}
done
assert [ $adjusted_value $3 ${new[$i]} ] #比较大小
 
assert() {
  eval "${@}"
  if [ $? -ne 0 ]
  then
    echo "Assertion ${@} failed"
    i=0
    while caller $i
    do
      i=$((i+1))
    done
    exit 2
  fi
}
 
关于数组的操作,参考:https://www.cnblogs.com/sco1234/p/8906527.html
 
备用的test.sh
 
#!/bin/sh

dual_core=(190 100)

check_array_values() {
    #local old=${1}
    #local old=${!1}
    local old=("${!1}")
    echo ${old[@]}
    for i in "${!old[@]}"; do
        echo "${old[$i]}"
    done
}

check_array_values dual_core[@]

echo "*************"
new1=${!dual_core[@]}
echo ${new1[@]}
for i in ${!new1[@]}; do
    echo "${new1[$i]}"
done

new=("${!dual_core[@]}")
echo ${new[@]}
for i in ${!new[@]}; do
    echo "${new[$i]}"
done

ltp-ddt smp_basic的更多相关文章

  1. LTP随笔——本地调用ltp之ltp4j

    关于ltp本地调用的相关参考请见LTP的Git项目:https://github.com/HIT-SCIR 以下以/home/lion/Desktop路径为例下面教程中出现的具体路径以你实际配置的为准 ...

  2. ZH奶酪:自然语言处理工具LTP语言云调用方法

    前言 LTP语言云平台 不支持离线调用: 支持分词.词性标注.命名实体识别.依存句法分析.语义角色标注: 不支持自定义词表,但是你可以先用其他支持自定义分词的工具(例如中科院的NLPIR)把文本进行分 ...

  3. Eclipse DDT

    http://www.eclipse.org/downloads/ https://github.com/DDT-IDE/DDT/blob/latest/documentation/UserGuide ...

  4. ASP.NET中常用的几个李天平开源公共类LTP.Common,Maticsoft.DBUtility,LtpPageControl

    ASP.NET中常用的几个开源公共类: LTP.Common.dll: 通用函数类库     源码下载Maticsoft.DBUtility.dll 数据访问类库组件     源码下载LtpPageC ...

  5. 很好的一篇讲LTP在编解码中的作用的文章

    原文链接 LONG-TERM PREDICTION by: Adit Aviv       Kfir Grichman introduction: The speech signal has been ...

  6. ASP.NET中常用的几个李天平开源公共类LTP.Common,Maticsoft.DBUtility,LtpPageControl (转)

    ASP.NET中常用的几个开源公共类: LTP.Common.dll: 通用函数类库     源码下载Maticsoft.DBUtility.dll 数据访问类库组件     源码下载LtpPageC ...

  7. 编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码

    转自:编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码 JDK:java version “1.8.0_31”Java(TM) SE Runtime Environment ( ...

  8. LTP学习

    下载LTP源码和模型文件: https://github.com/linux-test-project/ltp 官方说明文档 http://ltp.readthedocs.org/zh_CN/late ...

  9. LTP 分词算法实践

    参考链接: https://github.com/HIT-SCIR/ltp/blob/master/doc/install.rst http://www.xfyun.cn/index.php/serv ...

  10. ltp工具使用配置

    ltp是一个比较全的自然语言处理工具,可以用它进行分词.词性标注.语法分析等任务. ---- 准备 下载 下载ltp和ltp4j,在cmake官网下载并安装相应版本的cmake,并且下载ant. 构建 ...

随机推荐

  1. HashMap的几种遍历方式(转载)

    今天讲解的主要是使用多种方式来实现遍历HashMap取出Key和value,首先在java中如果想让一个集合能够用for增强来实现迭代,那么此接口或类必须实现Iterable接口,那么Iterable ...

  2. python之路----操作系统的发展史

    阅读目录 手工操作 —— 穿孔卡片 批处理 —— 磁带存储和批处理系统 多道程序系统 分时系统 实时系统 通用操作系统 操作系统的进一步发展 操作系统的作用 手工操作 —— 穿孔卡片 1946年第一台 ...

  3. php stristr()函数 语法

    php stristr()函数 语法 作用:返回一个字符串在另一个字符串中开始位置到结束的字符串,不区分大小写.直线电机厂家怎么样? 语法:stristr(string,search,before_s ...

  4. BZOJ 2726: [SDOI2012]任务安排 斜率优化 + 凸壳二分 + 卡精

    Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...

  5. 20180824-Java Enumeration 接口

    Java Enumeration接口 Enumeration接口中定义了一些方法,通过这些方法可以枚举(一次获得一个)对象集合中的元素. 这种传统接口已被迭代器取代,虽然Enumeration 还未被 ...

  6. xxxxxxxxxxxxxxxxxxx

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  7. h5分线程Worker

    <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>Ti ...

  8. EZOJ #389点分治好题

    分析 一层一层把叶子去掉 看最多能去掉多少层即可 代码 #include<bits/stdc++.h> using namespace std; ],du[],fa[],n,m,ans; ...

  9. 当主机ip变了修改gitlab的ip地址

    gitlab服务器IP地址更换后需要修改以下两个配置中的IP地址: /var/opt/gitlab/gitlab-rails/etc/gitlab.yml /etc/gitlab/gitlab.rb ...

  10. PHP防采集方法代码

    <?php /** * FileName:test.php * Summary: 防采集 */ $HTTP_REFERER = $_SERVER["HTTP_REFERER" ...