Skip to content
Closed

test #65

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions .github/workflows/bootstrap.yml.disable
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions

name: Bootstrap
on:
pull_request:
branches:
- stable
paths-ignore:
- 'spec/**'
push:
branches:
- master
- stable
paths-ignore:
- 'spec/**'

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
main:
strategy:
fail-fast: false
matrix:
version: [
2.076.1, 2.077.1, 2.078.3, 2.079.1,
2.080.1, 2.081.2, 2.082.1, 2.083.1, 2.084.1, 2.085.1, 2.086.1, 2.087.1, 2.088.1, 2.089.1,
2.090.1, 2.091.1, 2.092.1, 2.093.1, 2.094.2, 2.095.1, 2.096.1, 2.097.2, 2.098.1, 2.099.1,
2.100.2, 2.101.2, 2.102.2, 2.103.1, 2.104.2, 2.105.3, 2.106.1, 2.107.1, 2.108.1, 2.109.1,
2.110.0, 2.111.0
]

name: Build with dmd-${{ matrix.version }}
runs-on: ubuntu-22.04
timeout-minutes: 10
env:
# for ci/run.sh:
OS_NAME: linux
MODEL: 64
HOST_DMD: dmd-${{ matrix.version }}
# N is set dynamically below
FULL_BUILD: true
defaults:
run:
shell: bash

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 50

- name: Set environment variable N (parallelism)
run: echo "N=$(nproc)" >> $GITHUB_ENV

- name: Install host compiler
run: ci/run.sh install_host_compiler

- name: Set up repos
run: |
set -uexo pipefail
ref='${{ github.ref }}'
if [[ "$ref" =~ ^refs/pull/ ]]; then
# PR: clone the Phobos head with the same name as this DMD PR's target branch
# e.g., Phobos stable when targeting DMD stable
REPO_BRANCH="$GITHUB_BASE_REF"
elif [[ "$ref" =~ ^refs/(heads|tags)/(.*)$ ]]; then
# no PR: try to clone the Phobos head with the same name as this DMD head, falling back to master
# e.g., Phobos stable for a push to DMD stable, or Phobos v2.105.2 for DMD tag v2.105.2
REPO_BRANCH="${BASH_REMATCH[2]}"
else
echo "Error: unexpected GitHub ref '$ref'" >&2
exit 1
fi
ci/run.sh setup_repos "$REPO_BRANCH"

- name: Build dmd
run: ENABLE_RELEASE=0 ENABLE_DEBUG=0 ci/run.sh build 0

- name: Rebuild dmd
run: ENABLE_RELEASE=0 ENABLE_DEBUG=0 ci/run.sh rebuild
File renamed without changes.
18 changes: 6 additions & 12 deletions .github/workflows/perf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ permissions:

jobs:
perf:
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
timeout-minutes: 60
env:
OS_NAME: linux
Expand Down Expand Up @@ -80,22 +80,16 @@ jobs:
( cd "$dir/../phobos" && make -j$N MODEL=$MODEL )
}

# Rebuild dmd against the shared profile so that base and head got identical PGO guidance.
build_with_profile() {
local dir="$RUNNER_TEMP/$1/dmd"
( cd "$dir" && generated/build HOST_DMD=$DMD MODEL=$MODEL \
ENABLE_RELEASE=1 ENABLE_LTO=1 \
DFLAGS="-fprofile-instr-use=$profile -wi" -j$N --force )
}

setup_ref "${{ steps.refs.outputs.base }}" base
setup_ref "${{ steps.refs.outputs.head }}" head

# Train PGO once, then reuse the profile for both refs.
# Train PGO on base. dmd-pgo's last step already rebuilds base with the
# merged profile, so only head needs a rebuild against it.
( cd "$RUNNER_TEMP/base/dmd" && generated/build HOST_DMD=$DMD MODEL=$MODEL dmd-pgo -j$N --force )
cp "$RUNNER_TEMP/base/dmd/$built/dmd_profdata/merged.data" "$profile"
build_with_profile base
build_with_profile head
( cd "$RUNNER_TEMP/head/dmd" && generated/build HOST_DMD=$DMD MODEL=$MODEL \
ENABLE_RELEASE=1 ENABLE_LTO=1 \
DFLAGS="-fprofile-instr-use=$profile -wi" -j$N --force )
deactivate

- name: Measure
Expand Down
File renamed without changes.
6 changes: 5 additions & 1 deletion tools/perfrunner/source/app.d
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ module app;

import std.file : mkdirRecurse, tempDir, write;
import std.getopt : getopt;
import std.parallelism : task;
import std.path : buildPath, dirName;
import std.stdio : stderr, writeln;

Expand Down Expand Up @@ -59,8 +60,11 @@ int main(string[] args)
// Resolved once so both refs compile vibe.d with the same flags.
auto vibedFlags = describeFlags(vibedDir, baseDmd);

auto base = measure(baseDmd, workload, basePhobos, vibedRoot, vibedFlags, tmp, "base");
// The two sides share nothing, so measure them in parallel.
auto baseTask = task!measure(baseDmd, workload, basePhobos, vibedRoot, vibedFlags, tmp, "base");
baseTask.executeInNewThread();
auto head = measure(headDmd, workload, headPhobos, vibedRoot, vibedFlags, tmp, "head");
auto base = baseTask.yieldForce;

MetricResult[] metrics;
foreach (def; initials)
Expand Down
Loading