diff --git a/.github/actions/prepare-gpu/action.yml b/.github/actions/prepare-gpu/action.yml index 050e4657..a7d4ff38 100644 --- a/.github/actions/prepare-gpu/action.yml +++ b/.github/actions/prepare-gpu/action.yml @@ -20,6 +20,8 @@ runs: - name: Init submodules to ensure stimuli is located run: | conda activate ${{ env.conda-env-name-no-time }}-$(date --date "${{ env.workflow-timestamp }}" +%Y%m%d)-${{ inputs.toolchain }} + cd ${{ env.REMOTE_WORK_DIR }} + echo $PWD ./scripts/init-submodules-no-riscv-tools.sh --force shell: bash -leo pipefail {0} diff --git a/.github/actions/prepare-rtl/action.yml b/.github/actions/prepare-rtl/action.yml index b4abde09..478f0241 100644 --- a/.github/actions/prepare-rtl/action.yml +++ b/.github/actions/prepare-rtl/action.yml @@ -36,6 +36,7 @@ runs: conda activate ${{ env.conda-env-name-no-time }}-$(date --date "${{ env.workflow-timestamp }}" +%Y%m%d)-${{ inputs.toolchain }} if [[ "${{ steps.rtl-build-id.outputs.cache-hit }}" != 'true' ]]; then echo "Cache miss on ${{ inputs.group-key }}-${{ github.sha }}" + echo "Cache miss happened in: $PWD" ./.github/scripts/${{ inputs.build-script }} ${{ inputs.group-key }} ${{ inputs.build-type }} else echo "Cache hit do not rebuild RTL for ${{ inputs.group-key }}" diff --git a/.github/scripts/defaults.sh b/.github/scripts/defaults.sh index a5f7f62e..88dca6c1 100755 --- a/.github/scripts/defaults.sh +++ b/.github/scripts/defaults.sh @@ -11,13 +11,13 @@ REMOTE_MAKE_NPROC=4 REMOTE_PREFIX=$CI_DIR/${GITHUB_REPOSITORY#*/}-${GITHUB_REF_NAME//\//-} REMOTE_WORK_DIR=$GITHUB_WORKSPACE REMOTE_CHIPYARD_DIR=$GITHUB_WORKSPACE -REMOTE_SIM_DIR=$REMOTE_CHIPYARD_DIR/sims/verilator +REMOTE_SIM_DIR=$REMOTE_CHIPYARD_DIR/sims/vcs REMOTE_FIRESIM_DIR=$REMOTE_CHIPYARD_DIR/sims/firesim/sim REMOTE_FPGA_DIR=$REMOTE_CHIPYARD_DIR/fpga # local variables (aka within the docker container) LOCAL_CHIPYARD_DIR=$GITHUB_WORKSPACE -LOCAL_SIM_DIR=$LOCAL_CHIPYARD_DIR/sims/verilator +LOCAL_SIM_DIR=$LOCAL_CHIPYARD_DIR/sims/vcs LOCAL_FIRESIM_DIR=$LOCAL_CHIPYARD_DIR/sims/firesim/sim # CI uses temp directories with very long names diff --git a/.github/workflows/chipyard-gpu-flow.yml b/.github/workflows/chipyard-gpu-flow.yml new file mode 100644 index 00000000..5a5a1398 --- /dev/null +++ b/.github/workflows/chipyard-gpu-flow.yml @@ -0,0 +1,119 @@ +name: chipyard-ci-full-flow-gpu + +# on: +# push: +# branches: +# - graphics + +defaults: + run: + shell: bash -leo pipefail {0} + +env: + REMOTE_WORK_DIR: ${{ secrets.BUILDDIR }}/cy-ci-shared/cy-${{ github.sha }} + JAVA_TMP_DIR: /tmp/cy-${{ github.sha }}-full + SSH_AUTH_SOCK: /tmp/ssh_agent_github.sock + MAKEFLAGS: "-j32" + +jobs: + cancel-prior-workflows: + name: cancel-prior-workflows + runs-on: ubuntu-latest + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.11.0 + with: + access_token: ${{ github.token }} + + # Set up a set of boolean conditions to control which branches of the CI + # workflow will execute This is based off the conditional job execution + # example here: https://github.com/dorny/paths-filter#examples + change-filters: + name: filter-jobs-on-changes + runs-on: ubuntu-latest + # Queried by downstream jobs to determine if they should run. + outputs: + needs-rtl: ${{ steps.filter.outputs.all_count != steps.filter.outputs.skip-rtl_count }} + + steps: + - uses: actions/checkout@v3 + - name: Git workaround + uses: ./.github/actions/git-workaround + - uses: dorny/paths-filter@v2 + id: filter + with: + filters: | + all: + - '**' + + # If any of the files changed match, do a doc build + docs: &docs-filter + - 'docs/**' + - '.readthedocs.yml' + + # If all files match to this filter, skip the main ci pipeline + skip-rtl: + - *docs-filter + - '**/*.md' + - '**/.gitignore' + - '.github/ISSUE_TEMPLATE/**' + + setup-repo: + name: setup-repo + needs: [change-filters, cancel-prior-workflows] + if: needs.change-filters.outputs.needs-rtl == 'true' + runs-on: self-hosted + steps: + - name: Delete old checkout + run: | + ls -alh . + rm -rf ${{ github.workspace }}/* || true + rm -rf ${{ github.workspace }}/.* || true + ls -alh . + # note: the agent spun up here will be made available throughout the + # workflow via env.SSH_AUTH_SOCK. + - name: Run ssh-agent + run: | + eval `ssh-agent -a $SSH_AUTH_SOCK -s` + echo "${{ secrets.PRIVATE_SSH_KEY }}" | ssh-add - + - uses: actions/checkout@v3 + - name: Setup repo copy + run: | + git clone $GITHUB_WORKSPACE ${{ env.REMOTE_WORK_DIR }} + - name: Setup repo + run: | + cd ${{ env.REMOTE_WORK_DIR }} + mkdir ${{ env.JAVA_TMP_DIR }} + ./build-setup.sh -f -v + + run-coalescer: + name: run-coalescer + needs: [setup-repo] + runs-on: self-hosted + steps: + - name: Build RTL + run: | + cd ${{ env.REMOTE_WORK_DIR }} + eval "$(conda shell.bash hook)" + source env.sh + cd sims/verilator + make verilog CONFIG=MemtraceCoreConfig + - name: Run RTL sim + run: | + cd ${{ env.REMOTE_WORK_DIR }} + eval "$(conda shell.bash hook)" + source env.sh + cd sims/verilator + make run-binary run_binary CONFIG=MemtraceCoreConfig BINARY=none EXTRA_SIM_FLAGS="+memtracefile=$LOCAL_CHIPYARD_DIR/generators/rocket-gpu/tracefiles/vecadd.core1.thread4.trace" + + + cleanup: + name: cleanup + needs: [run-coalescer] + runs-on: self-hosted + if: ${{ always() }} + steps: + - name: Delete repo copy and conda env + run: | + rm -rf ${{ env.REMOTE_WORK_DIR }} + rm -rf ${{ env.JAVA_TMP_DIR }} diff --git a/.github/workflows/chipyard-run-tests-gpu.yml b/.github/workflows/chipyard-run-tests-gpu.yml index 55970939..a5c3ea03 100644 --- a/.github/workflows/chipyard-run-tests-gpu.yml +++ b/.github/workflows/chipyard-run-tests-gpu.yml @@ -12,6 +12,7 @@ defaults: env: tools-cache-version: v17 CI_DIR: ${{ secrets.BUILDDIR }} + REMOTE_WORK_DIR: ${{ secrets.BUILDDIR }}/cy-ci-shared/cy-${{ github.sha }} JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit conda-env-name-no-time: cy-${{ github.run_id }} workflow-timestamp: ${{ github.event.pull_request.updated_at }} @@ -88,12 +89,29 @@ jobs: - name: Create conda env uses: ./.github/actions/create-conda-env + setup-repo: + name: setup-repo + needs: create-conda-env + if: needs.change-filters.outputs.needs-rtl == 'true' + runs-on: self-hosted + steps: + - name: Delete old checkout + run: | + ls -alh . + rm -rf ${{ github.workspace }}/* || true + rm -rf ${{ github.workspace }}/.* || true + ls -alh . + - uses: actions/checkout@v3 + - name: Setup repo copy + run: | + git clone $GITHUB_WORKSPACE ${{ env.REMOTE_WORK_DIR }} + # Sentinel job to simplify how we specify which that basic setup is complete # # When adding new prep jobs, please add them to `needs` below setup-complete: name: setup-complete - needs: [create-conda-env] + needs: setup-repo runs-on: self-hosted steps: - name: Set up complete diff --git a/sims/common-sim-flags.mk b/sims/common-sim-flags.mk index c2ae022c..2b56e989 100644 --- a/sims/common-sim-flags.mk +++ b/sims/common-sim-flags.mk @@ -46,4 +46,5 @@ SIM_PREPROC_DEFINES = \ +define+RANDOMIZE_MEM_INIT \ +define+RANDOMIZE_REG_INIT \ +define+RANDOMIZE_GARBAGE_ASSIGN \ - +define+RANDOMIZE_INVALID_ASSIGN + +define+RANDOMIZE_INVALID_ASSIGN \ + $(EXTRA_SIM_PREPROC_DEFINES)