# OpenTPG **Repository Path**: zzj34/OpenTPG ## Basic Information - **Project Name**: OpenTPG - **Description**: No description available - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: race-icisc-2020 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 15 - **Created**: 2020-09-12 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 目录 [概述](#summary) - [竞赛](#summary-race) - [参与贡献](#summary-join) [安装说明](#install) - [基本要求](#install-required) - [构建](#install-build) - [部署](#install-deploy) - [部署注备工作](#install-deploy-ready) - [部署方式一:开发环境集成部署](#install-deploy-way01) - [部署方式二:独立环境部署](#install-deploy-way02) - [小测验](#install-test) [快速入门](#quickstart) # 概述 OpenTPG 项目的目标是构建开源的 TPG 工具集。当前还处于项目的非常早期阶段,当前,短期目标为满足 ICISC 竞赛出题诉求。欢迎有志于 TPG 领域的同学参与本项目。 通过参加本项目你将学会下面几项技能: 1. 您将掌握芯片领域非常关键的 TPG 流程的基本原理和 ATPG 相关关键算法的基本实现思路 2. Hadoop 是大数据技术的基础性工具,掌握 Hadoop 同时也将让您大数据技术纳入自己的基本技能集 3. 基础的 Linux 开发技能,C++语言开发技能,现代C++工程管理工具 CMake、git 等等 ## 竞赛 关于 ICISC 竞赛相关的信息,参见:[doc/race-icisc-2020.md](doc/race-icisc-2020.md) ## 参与贡献 我们非常欢迎,您通过下面的方式参与贡献: - 通过 [提交 issue](https://gitee.com/openeda/opentpg/issues/new) 给项目提意见或者建议 - 通过 [发起 Pull Request](https://gitee.com/openeda/opentpg/pull/new) 直接给项目贡献代码 - 参与 issue 或者 Pull Request 的评审或者评论 # 安装说明 ## 基本要求 ---------------------- * 外部依赖 | 需求项 | 版本 | 下载地址 | |--- |--- |--- | | Java | 1.8(8u251) | [OpenJDK发行版:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html](https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html) | | hadoop | 3.2.1 | [Acache发行版:https://hadoop.apache.org/releases.html](https://hadoop.apache.org/releases.html) | | redis | 6.0.5 | [Redis下载地址:https://redis.io/download](https://redis.io/download) | 目前我们没有做很深入的交叉配套验证,如无必要,建议直接使用对应版本号的第三方软件. 注意:如果您的操作系统是 **Ununtu**,那么可能会遇到下列问题: 1. 因为防火墙拦截了hadoop的端口导致访问失败,此时可以关闭防火墙或者针对性地放通 hadoop 所需要的端口; 2. Ununtu 的 sh 并不是 bash,您可能需要使用 bash 来启动脚本; * 支持的操作系统 目前团队人数和设备都有限,我们主要的验证环境是 Linux,但团队其他成员使用自身设备也做了一些不完整验证. 如果您想做完整功能测试,请尽量采用 Linux 系统进行测试. 如果您已经验证过某些功能可用,那么通过 issue 请告诉我们: | 环境 | 编译 | 打包 | 部署 | 本地TPG流程 | 基于Hadoop的TPG流程 | |--- |--- |--- |--- |--- |--- | | Linux+gcc | OK | OK | OK | OK | OK | * shell 环境 我们所有的脚本都需要在 bash 环境下执行. 您可以通过下面的命令检查当前的shell环境: ```bash echo $SHELL ``` 如果您当前的 shell 并不是 bash,那么直接输入下面的指令即可切换到 bash: ```bash bash ``` ## 构建 ---------------------- OpenTPG 项目提供了一键编译脚本,构建方式为 ```bash sh build.sh [compile] [debug|release] ``` - 如果是构建 debug 版本,最简单的方式为:`sh build.sh` - 如果是构建 release 版本,最简单的方式是:`sh build.sh release` ## 部署 ---------------------- OpenTPG 支持两种部署方式:"编译环境集成部署"和"独立环境部署"。相对而言,开发环境集成部署更加简便,比较适合在开发人员自测时采用。而独立环境部署,增加了额外的步骤和操作,但很适合开发环境和部署环境分离的场景。 #### 部署注备工作 您需要提前准备好所有需要的依赖包,这些包需要放在同一个目录下,参见前面的'外部依赖'小节。 #### 部署方式一:开发环境集成部署 "开发环境集成部署"是指开发环境和测试环境是同一套环境,这种方式主要是方便开发人员的开发调测,避免在安装部署上浪费太多时间. 如果您计划参与项目开发,推荐采用这种方式。 开发环境部署时,到项目的 deploy 目录下,执行下面的命令: ```bash sh install.sh ./ ``` 其中: - `` 是所有 `外部依赖` 的软件包的存放的目录 - 第二个参数指的是部署到当前目录下,当然这里也就是depoy所在的目录 执行完毕之后,还需要在安装目录下通过下面的指令加载配置: ```bash source setup.bash ``` 开发环境部署完毕后,后续修改了代码或者脚本,编译完毕之后,都是可以直接使用的,不需要重新执行部署操作。 #### 部署方式二:独立环境部署 独立环境部署时,需要单独生成一个安装包,然后利用该安装包在目标环境上安装。 * 打包 打包操作也可以直接由 build.sh 来做: ```bash sh build.sh package ``` 其中: - `` 为本团队的名称,命名规则需要满足正则表达式:`[A-Za-z][A-Za-z0-9]*`. - 生成的软件包的名字为 `opentpg---.tar.gz`,比如:`opentpg-MyTeam-Linux-200723081617.tar.gz` * 部署 首先,需要将前面打包步骤生成的二进制包通过 sftp、scp 等工具或者其他的任意你喜欢的方式拷贝到部署环境. 然后,依次执行下面的命令执行安装: ```bash tar xvfz .tar.gz cd sh install.sh ``` 其中: - `` 请替换成您生成的安装包的名字 - `` 是所有`外部依赖`的软件包的存放的目录 - `` 指具体安装到什么位置 ## 小测验 ---------------------- 进入安装目录,依次执行下面的指令以检验是否整个安装过程已经成功: ```bash source setup.bash sh rank.sh myteam ./samples/c17.bench ./ cat ./myteam@c17@hadoop/c17.pattern ``` 如果执行成功,可以看到输出的pattern列表: ```text pattern:0 11011 pattern:1 10110 pattern:2 00110 pattern:3 11011 pattern:4 00000 pattern:5 10010 pattern:6 01100 pattern:7 00011 ``` 这里 rank.sh 是我们的测试驱动脚本,用于自动帮助我们完成一轮测试全流程。 # 快速入门 当安装完毕之后,可以在安装目录下找到 rank.sh 脚本。 这个脚本可以帮助我们一键完成一轮测试。 rank.sh 脚本的命令行选项选项如下: ```bash rank.sh [] ``` 其中: - `` 团队的名称,该名称必须匹配正则表达式 `[A-Za-z][A-Za-z]` - `` 需要执行 TPG-Flow 的网表文件名(含路径),我们统一约定网表文件需要以 .bench 后缀命名 - `[]` 指名 TPG-Flow 所产生的文件应该输出到哪里. 这是个本地的目录. 如果不指定,默认为当前工作目录 如果 rank.sh 执行成功,脚本会返回 0,否则返回非 0。下面是一个简单的示例: ```bash sh rank.sh team1 ./samples/c17.bench ``` 执行完毕之后,可以在当前工作目录下看到 `team1@c17@hadoop` 的目录。 下面为该目录下的信息: ```text $ ls -l total 512 -rwxrwxr-x. 1 liugang liugang 498616 Jul 24 23:29 atalanta -rw-rw-r--. 1 liugang liugang 236 Jul 24 23:29 c17.bench -rw-rw-r--. 1 liugang liugang 2 Jul 24 23:29 c17.cost -rw-rw-r--. 1 liugang liugang 148 Jul 24 23:29 c17.fault -rw-rw-r--. 1 liugang liugang 128 Jul 24 23:29 c17.pattern -rw-rw-r--. 1 liugang liugang 272 Jul 24 23:29 c17.report drwxr-xr-x. 2 liugang liugang 4096 Jul 24 23:29 output ``` 其中: - `atalanta` 是 rank.sh 脚本帮助我们备份的目标程序 - `xxx.bench` 是 rank.sh 脚本帮助我们备份的网表(netlist)文件 - `xxx.cost` 是脚本统计的关键任务的执行耗时 - `xxx.fault` 是脚本根据网表文件自动生成的 faultlist 文件 - `xxx.pattern` 是脚本最终产生的 pattern 文件 - `xxx.report` 是最终的统计报告 - `output` 这是个目录,是 hadoop 的原始输出文件