Skip to content
Open
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
4 changes: 2 additions & 2 deletions .github/automation/aarch64/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ if [[ "$ONEDNN_ACTION" == "configure" ]]; then
cmake \
"${GENERATOR_ARGS[@]}" \
-Bbuild -S. \
-DDNNL_USE_ACL=ON \
-DDNNL_AARCH64_USE_ACL=ON \
-DONEDNN_BUILD_GRAPH=OFF \
-DDNNL_CPU_RUNTIME=OMP \
-DDNNL_WERROR=ON \
Expand All @@ -61,7 +61,7 @@ if [[ "$ONEDNN_ACTION" == "configure" ]]; then
cmake \
"${GENERATOR_ARGS[@]}" \
-Bbuild -S. \
-DDNNL_USE_ACL=ON \
-DDNNL_AARCH64_USE_ACL=ON \
-DONEDNN_BUILD_GRAPH=$ONEDNN_BUILD_GRAPH \
-DDNNL_CPU_RUNTIME=$ONEDNN_THREADING \
-DDNNL_WERROR=ON \
Expand Down
129 changes: 129 additions & 0 deletions .github/workflows/aarch64-acl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
# *******************************************************************************
# Copyright 2025 Arm Limited and affiliates.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# *******************************************************************************

name: "Build ACL cache"

#* To avoid duplicate jobs running when both push and PR is satisfied, we use this:
#* https://github.com/orgs/community/discussions/26940#discussioncomment-5686753
on:
workflow_call:
inputs:
acl_hash:
required: false
type: string

workflow_dispatch:

# Declare default permissions as read only.
permissions: read-all

jobs:
# Cache is built sequentially to avoid cache-hit race conditions
build-cache:
strategy:
max-parallel: 1
matrix:
config: [
{ name: MacOS, label: macos-14, threading: SEQ, toolset: clang, build: RelWithAssert },
{ name: cb100, label: ubuntu-24.04-arm, threading: OMP, toolset: gcc, build: RelWithAssert },
{ name: cb100, label: ubuntu-24.04-arm, threading: OMP, toolset: gcc, build: Release }
]

name: ${{ matrix.config.name }}, ${{ matrix.config.toolset }}, ${{ matrix.config.threading }}, ${{ matrix.config.build }}
runs-on: ${{ matrix.config.label }}
steps:
- name: Checkout oneDNN
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
path: oneDNN

- name: Read version file
id: get-versions
run: |
content=$(cat "${{ github.workspace }}/oneDNN/.github/automation/aarch64/ci.json")
content="${content//[$'\t\r\n$ ']}"
echo "output=$content" >> "$GITHUB_OUTPUT"

- name: Clone ACL
run: ${{ github.workspace }}/oneDNN/.github/automation/aarch64/build_acl.sh
env:
ACL_ACTION: clone
ACL_ROOT_DIR: ${{ github.workspace }}/ComputeLibrary
ACL_VERSION: ${{ inputs.acl_hash || fromJson(steps.get-versions.outputs.output).dependencies.acl }}

- name: Get ACL commit hash for cache key
id: get_acl_commit_hash
run: (cd "${{ github.workspace }}/ComputeLibrary" && echo "ACLCommitHash=$(git rev-parse --short HEAD)") >> "$GITHUB_OUTPUT"

- name: Get system name
id: get_system_name
run: (echo "SystemName=$(uname)") >> "$GITHUB_OUTPUT"

- name: Restore cached ACL
id: cache-acl-restore
uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
key: ${{ steps.get_system_name.outputs.SystemName }}-acl-${{ matrix.config.toolset }}-${{ matrix.config.build }}-${{ steps.get_acl_commit_hash.outputs.ACLCommitHash }}
path: ${{ github.workspace }}/ComputeLibrary/build
lookup-only: true

- name: Install Scons (MacOS)
if: ${{ matrix.config.name == 'MacOS' && (steps.cache-acl-restore.outputs.cache-hit != 'true') }}
run: brew install scons

- name: Install scons (Linux)
if: ${{ matrix.config.name != 'MacOS' && (steps.cache-acl-restore.outputs.cache-hit != 'true') }}
run: |
sudo apt update -y
sudo apt install -y scons

- if: ${{ contains(matrix.config.label,'ubuntu') && (matrix.config.threading == 'OMP') && (steps.cache-acl-restore.outputs.cache-hit != 'true') }}
name: Install openmp
run: |
sudo apt install -y libomp-dev

- if: ${{ contains(matrix.config.label,'ubuntu') && (matrix.config.toolset == 'gcc') && (steps.cache-acl-restore.outputs.cache-hit != 'true') }}
name: Install gcc
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt update -y
sudo apt install -y g++-${{ fromJson(steps.get-versions.outputs.output).dependencies.gcc }}

- if: ${{ contains(matrix.config.label,'ubuntu') && (matrix.config.toolset == 'clang') && (steps.cache-acl-restore.outputs.cache-hit != 'true') }}
name: Install clang
uses: KyleMayes/install-llvm-action@a7a1a882e2d06ebe05d5bb97c3e1f8c984ae96fc
with:
version: ${{ fromJson(steps.get-versions.outputs.output).dependencies.clang }}

- name: Build ACL
if: ${{ steps.cache-acl-restore.outputs.cache-hit != 'true' }}
run: ${{ github.workspace }}/oneDNN/.github/automation/aarch64/build_acl.sh
env:
ACL_ACTION: build
ACL_ROOT_DIR: ${{ github.workspace }}/ComputeLibrary
ACL_THREADING: ${{ matrix.config.threading }}
BUILD_TOOLSET: ${{ matrix.config.toolset }}
ACL_BUILD_TYPE: ${{ matrix.config.build }}
GCC_VERSION: ${{ fromJson(steps.get-versions.outputs.output).dependencies.gcc }}

- name: Save ACL in cache
id: cache-acl_build-save
if: ${{ steps.cache-acl-restore.outputs.cache-hit != 'true' }}
uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
key: ${{ steps.get_system_name.outputs.SystemName }}-acl-${{ matrix.config.toolset }}-${{ matrix.config.build }}-${{ steps.get_acl_commit_hash.outputs.ACLCommitHash }}
path: ${{ github.workspace }}/ComputeLibrary/build
240 changes: 240 additions & 0 deletions .github/workflows/ci-aarch64.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
# *******************************************************************************
# Copyright 2024-2025 Arm Limited and affiliates.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# *******************************************************************************

name: "CI AArch64"

#* To avoid duplicate jobs running when both push and PR is satisfied, we use this:
#* https://github.com/orgs/community/discussions/26940#discussioncomment-5686753
on:
push:
branches: [main, "rls-*"]
paths:
- ".github/automation/performance/**"
- ".github/automation/*"
- ".github/automation/aarch64/**"
- ".github/workflows/aarch64-acl.yml"
- ".github/workflows/ci-aarch64.yml"
- "cmake/**"
- "examples/**"
- "include/**"
- "src/common/**"
- "src/cpu/*"
- "src/cpu/aarch64/**"
- "tests/**"
- "CMakeLists.txt"
pull_request:
types: [opened, synchronize, reopened]
paths:
- ".github/automation/performance/**"
- ".github/automation/*"
- ".github/automation/aarch64/**"
- ".github/workflows/aarch64-acl.yml"
- ".github/workflows/ci-aarch64.yml"
- "cmake/**"
- "examples/**"
- "include/**"
- "src/common/**"
- "src/cpu/*"
- "src/cpu/aarch64/**"
- "tests/**"
- "CMakeLists.txt"
#* allow manual trigger of workflow when needed.
workflow_dispatch:

#* Stop stale workflows when pull requests are updated: https://stackoverflow.com/a/70972844
#* Does not apply to the main branch.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

# Declare default permissions as read only.
permissions: read-all

jobs:
build-acl-cache:
uses: ./.github/workflows/aarch64-acl.yml

build-and-test:
needs: build-acl-cache
strategy:
matrix:
config: [
{ name: MacOS, label: macos-14, threading: SEQ, toolset: clang, build: RelWithAssert, testset: SMOKE },
{ name: cb100, label: ubuntu-24.04-arm, threading: OMP, toolset: gcc, build: RelWithAssert, testset: SMOKE },
{ name: cb100, label: ubuntu-24.04-arm, threading: OMP, toolset: gcc, build: Release, testset: CI }
]

name: ${{ matrix.config.name }}, ${{ matrix.config.toolset }}, ${{ matrix.config.threading }}, ${{ matrix.config.build }}
runs-on: ${{ matrix.config.label }}
steps:
- name: Checkout oneDNN
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
path: oneDNN

- name: Read version file
id: get-versions
run: |
content=$(cat "${{ github.workspace }}/oneDNN/.github/automation/aarch64/ci.json")
content="${content//[$'\t\r\n$ ']}"
echo "output=$content" >> "$GITHUB_OUTPUT"

# Note: This will create a github actions cache
- name: Get latest CMake and Ninja
uses: lukka/get-cmake@56d043d188c3612951d8755da8f4b709ec951ad6 # v3.31.6
with:
cmakeVersion: 3.31.0
ninjaVersion: 1.12.0

- if: ${{ (contains(matrix.config.label,'ubuntu') && (matrix.config.threading == 'OMP')) }}
name: Install openmp
run: |
sudo apt install -y libomp-dev

- if: ${{ (contains(matrix.config.label,'ubuntu') && (matrix.config.toolset == 'gcc')) }}
name: Install gcc
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt update -y
sudo apt install -y g++-${{ fromJson(steps.get-versions.outputs.output).dependencies.gcc }}

- if: ${{ (contains(matrix.config.label,'ubuntu') && (matrix.config.toolset == 'clang')) }}
name: Install clang
uses: KyleMayes/install-llvm-action@a7a1a882e2d06ebe05d5bb97c3e1f8c984ae96fc
with:
version: ${{ fromJson(steps.get-versions.outputs.output).dependencies.clang }}

- name: setup python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: '3.10'

- name: Install dependencies
if: ${{ matrix.config.build == 'Release' }}
run: pip install scipy statistics gitpython

- name: Clone ACL
run: ${{ github.workspace }}/oneDNN/.github/automation/aarch64/build_acl.sh
env:
ACL_ACTION: clone
ACL_ROOT_DIR: ${{ github.workspace }}/ComputeLibrary
ACL_VERSION: ${{ fromJson(steps.get-versions.outputs.output).dependencies.acl }}

- name: Get ACL commit hash for cache key
id: get_acl_commit_hash
run: (cd "${{ github.workspace }}/ComputeLibrary" && echo "ACLCommitHash=$(git rev-parse --short HEAD)") >> "$GITHUB_OUTPUT"

- name: Get system name
id: get_system_name
run: (echo "SystemName=$(uname)") >> "$GITHUB_OUTPUT"

- name: Restore cached ACL
id: cache-acl-restore
uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
key: ${{ steps.get_system_name.outputs.SystemName }}-acl-${{ matrix.config.toolset }}-${{ matrix.config.build }}-${{ steps.get_acl_commit_hash.outputs.ACLCommitHash }}
path: ${{ github.workspace }}/ComputeLibrary/build
fail-on-cache-miss: true

- name: Configure oneDNN
run: ${{ github.workspace }}/oneDNN/.github/automation/aarch64/build.sh
working-directory: ${{ github.workspace }}/oneDNN
env:
ACL_ROOT_DIR: ${{ github.workspace }}/ComputeLibrary
BUILD_TOOLSET: ${{ matrix.config.toolset }}
CMAKE_BUILD_TYPE: ${{ matrix.config.build }}
CMAKE_GENERATOR: Ninja
GCC_VERSION: ${{ fromJson(steps.get-versions.outputs.output).dependencies.gcc }}
ONEDNN_ACTION: configure
ONEDNN_TEST_SET: ${{ matrix.config.testset }}
ONEDNN_THREADING: ${{ matrix.config.threading }}

- name: Build oneDNN
run: ${{ github.workspace }}/oneDNN/.github/automation/aarch64/build.sh
working-directory: ${{ github.workspace }}/oneDNN
env:
ONEDNN_ACTION: build

- name: Run oneDNN tests
run: ${{ github.workspace }}/oneDNN/.github/automation/aarch64/test.sh ${{ github.workspace }}/test_results.xml
working-directory: ${{ github.workspace }}/oneDNN/build
env:
CTEST_PARALLEL_LEVEL: 6
DYLD_LIBRARY_PATH: ${{ github.workspace }}/ComputeLibrary/build
ONEDNN_THREADING: ${{ matrix.config.threading }}

## Performance test steps ##
- name: Checkout oneDNN base
if: ${{ github.event_name == 'pull_request' && matrix.config.build == 'Release' && matrix.config.name != 'cb100' && matrix.config.name != 'MacOS' }}
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
ref: ${{ github.base_ref }}
path: oneDNN_base

- name: Configure oneDNN base
if: ${{ github.event_name == 'pull_request' && matrix.config.build == 'Release' && matrix.config.name != 'cb100' && matrix.config.name != 'MacOS' }}
run: ${{ github.workspace }}/oneDNN/.github/automation/aarch64/build.sh
working-directory: ${{ github.workspace }}/oneDNN_base
env:
ACL_ROOT_DIR: ${{ github.workspace }}/ComputeLibrary
BUILD_TOOLSET: ${{ matrix.config.toolset }}
CMAKE_BUILD_TYPE: ${{ matrix.config.build }}
CMAKE_GENERATOR: Ninja
GCC_VERSION: ${{ fromJson(steps.get-versions.outputs.output).dependencies.gcc }}
ONEDNN_ACTION: configure
ONEDNN_TEST_SET: ${{ matrix.config.testset }}
ONEDNN_THREADING: ${{ matrix.config.threading }}

- name: Build oneDNN base
if: ${{ github.event_name == 'pull_request' && matrix.config.build == 'Release' && matrix.config.name != 'cb100' && matrix.config.name != 'MacOS' }}
run: ${{ github.workspace }}/oneDNN/.github/automation/aarch64/build.sh
working-directory: ${{ github.workspace }}/oneDNN_base
env:
ONEDNN_ACTION: build

- name: Run performance tests
shell: bash
if: ${{ github.event_name == 'pull_request' && matrix.config.build == 'Release' && matrix.config.name != 'cb100' && matrix.config.name != 'MacOS' }}
run: |
OMP_NUM_THREADS=4 bash ${{ github.workspace }}/oneDNN/.github/automation/performance/bench_pr_performance.sh ${{ github.workspace }}/oneDNN_base/build/tests/benchdnn/benchdnn ${{ github.workspace }}/oneDNN/build/tests/benchdnn/benchdnn base_4.txt new_4.txt
OMP_NUM_THREADS=16 bash ${{ github.workspace }}/oneDNN/.github/automation/performance/bench_pr_performance.sh ${{ github.workspace }}/oneDNN_base/build/tests/benchdnn/benchdnn ${{ github.workspace }}/oneDNN/build/tests/benchdnn/benchdnn base_16.txt new_16.txt
env:
DYLD_LIBRARY_PATH: ${{ github.workspace }}/ComputeLibrary/build

- name: Compare performance test results
if: ${{ github.event_name == 'pull_request' && matrix.config.build == 'Release' && matrix.config.name != 'cb100' && matrix.config.name != 'MacOS' }}
id: performance-test
continue-on-error: true
run: |
echo "4 threads:"
python ${{ github.workspace }}/oneDNN/.github/automation/performance/benchdnn_comparison.py base_4.txt new_4.txt
echo "16 threads:"
python ${{ github.workspace }}/oneDNN/.github/automation/performance/benchdnn_comparison.py base_16.txt new_16.txt

- name: Check performance test failure
if: ${{ steps.performance-test.outputs.pass != 'True' && github.event_name == 'pull_request' && matrix.config.build == 'Release' && matrix.config.name != 'cb100' && matrix.config.name != 'MacOS' }}
run: echo "::warning file=.github/workflows/ci-aarch64.yml,line=1,col=1::${{ steps.performance-test.outputs.message }}"

# This job adds a check named "CI AArch64" that represents overall
# workflow status and can be used in branch rulesets
status:
needs: build-and-test
runs-on: ubuntu-latest
name: "CI AArch64"
steps:
- name: Print success
run: echo Success
Loading
Loading