diff --git a/.github/automation/build_aarch64.sh b/.github/automation/build_aarch64.sh index 3b3b532ca7a..80f05c65685 100755 --- a/.github/automation/build_aarch64.sh +++ b/.github/automation/build_aarch64.sh @@ -35,7 +35,6 @@ ONEDNN_BUILD_GRAPH=${ONEDNN_BUILD_GRAPH:-"ON"} if [[ "$ONEDNN_ACTION" == "configure" ]]; then set -x cmake \ - -G $CMAKE_GENERATOR \ -Bbuild -S. \ -DDNNL_AARCH64_USE_ACL=ON \ -DONEDNN_BUILD_GRAPH=$ONEDNN_BUILD_GRAPH \ diff --git a/.github/automation/build_acl.sh b/.github/automation/build_acl.sh index 466543a3c9d..444fa4d4f2c 100755 --- a/.github/automation/build_acl.sh +++ b/.github/automation/build_acl.sh @@ -42,7 +42,8 @@ if [[ "$ACL_ACTION" == "clone" ]]; then set +x elif [[ "$ACL_ACTION" == "configure" ]]; then set -x - cmake -S$ACL_ROOT_DIR -B$ACL_ROOT_DIR/build \ + cmake \ + -S$ACL_ROOT_DIR -B$ACL_ROOT_DIR/build \ -DARM_COMPUTE_OPENMP=$ACL_OPENMP \ -DARM_COMPUTE_CPPTHREADS=0 \ -DARM_COMPUTE_WERROR=0 \ diff --git a/.github/automation/common_aarch64.sh b/.github/automation/common_aarch64.sh index d8c2b50d3d6..4d6dbf00500 100644 --- a/.github/automation/common_aarch64.sh +++ b/.github/automation/common_aarch64.sh @@ -18,19 +18,12 @@ # ******************************************************************************* # Common variables for aarch64 ci. Exports: -# CC, CXX, OS, MP +# CC, CXX, OS set -o errexit -o pipefail -o noclobber export OS=$(uname) -# Num threads on system. -if [[ "$OS" == "Darwin" ]]; then - export MP="-j$(sysctl -n hw.ncpu)" -elif [[ "$OS" == "Linux" ]]; then - export MP="-j$(nproc)" -fi - if [[ "$BUILD_TOOLSET" == "gcc" ]]; then export CC=gcc-${GCC_VERSION} export CXX=g++-${GCC_VERSION} @@ -44,4 +37,3 @@ echo "OS: $OS" echo "Toolset: $BUILD_TOOLSET" echo "CC: $CC" echo "CXX: $CXX" -echo "MP: $MP" diff --git a/.github/automation/test_aarch64.sh b/.github/automation/test_aarch64.sh index 0d2cc1c46f4..90c1438135b 100755 --- a/.github/automation/test_aarch64.sh +++ b/.github/automation/test_aarch64.sh @@ -41,7 +41,6 @@ if [[ "$OS" == "Linux" ]]; then fi SKIPPED_TEST_FAILURES+="|test_benchdnn_modeC_binary_ci_cpu" SKIPPED_TEST_FAILURES+="|test_benchdnn_modeC_binary_different_dt_ci_cpu" - SKIPPED_TEST_FAILURES+="|test_benchdnn_modeC_binary_different_dt_ci_cpu" SKIPPED_GRAPH_TEST_FAILURES+="|test_benchdnn_modeC_graph_ci_cpu" SKIPPED_GRAPH_TEST_FAILURES+="|cpu-graph-gqa-cpp" @@ -51,20 +50,25 @@ if [[ "$OS" == "Linux" ]]; then SKIPPED_GRAPH_TEST_FAILURES+="|test_graph_unit_dnnl_large_partition_cpu" fi -SKIPPED_TEST_FAILURES+="|${SKIPPED_GRAPH_TEST_FAILURES}" +# Nightly failures +SKIPPED_NIGHTLY_TEST_FAILURES="test_benchdnn_modeC_bnorm_all_blocked_cpu" +SKIPPED_NIGHTLY_TEST_FAILURES+="|test_benchdnn_modeC_bnorm_regressions_cpu" +SKIPPED_NIGHTLY_TEST_FAILURES+="|test_benchdnn_modeC_conv_int8_cpu" +SKIPPED_NIGHTLY_TEST_FAILURES+="|test_benchdnn_modeC_graph_fusions_cpu" +SKIPPED_NIGHTLY_TEST_FAILURES+="|test_benchdnn_modeC_matmul_sparse_gpu_cpu" +SKIPPED_NIGHTLY_TEST_FAILURES+="|test_benchdnn_modeC_reorder_all_cpu" -if [[ "$OS" == "Darwin" ]]; then - # Since macos does not build with OMP, we can use multiple ctest threads. - CTEST_MP=$MP -elif [[ "$OS" == "Linux" ]]; then - if [[ "$ONEDNN_THREADING" == "OMP" ]]; then - # OMP is already multi-threaded. Let's not oversubscribe. - CTEST_MP=-j3 - elif [[ "$ONEDNN_THREADING" == "SEQ" ]]; then - CTEST_MP=$MP - fi +# * c7g failures. TODO: scope these to c7g only. Better yet, fix them. +SKIPPED_NIGHTLY_TEST_FAILURES+="|test_benchdnn_modeC_binary_all_cpu" +SKIPPED_NIGHTLY_TEST_FAILURES+="|test_benchdnn_modeC_graph_int8_cpu" + +SKIPPED_TEST_FAILURES+="|${SKIPPED_GRAPH_TEST_FAILURES}|${SKIPPED_NIGHTLY_TEST_FAILURES}" + +# Sequential (probably macOS) builds should use num proc parallelism. +if [[ "$ONEDNN_THREADING" == "SEQ" ]]; then + export CTEST_PARALLEL_LEVEL="" fi set -x -ctest $CTEST_MP --no-tests=error --output-on-failure -E "$SKIPPED_TEST_FAILURES" +ctest --no-tests=error --output-on-failure -E "$SKIPPED_TEST_FAILURES" set +x diff --git a/.github/workflows/ci-aarch64.yml b/.github/workflows/ci-aarch64.yml index 4d7f11f0ca2..481a2a15cc8 100644 --- a/.github/workflows/ci-aarch64.yml +++ b/.github/workflows/ci-aarch64.yml @@ -129,6 +129,7 @@ jobs: ACL_THREADING: ${{ matrix.config.threading }} BUILD_TOOLSET: ${{ matrix.config.toolset }} CMAKE_BUILD_TYPE: ${{ matrix.config.build }} + CMAKE_GENERATOR: Ninja GCC_VERSION: 13 - name: Build ACL @@ -170,6 +171,7 @@ jobs: env: BUILD_TOOLSET: ${{ matrix.config.toolset }} CMAKE_BUILD_TYPE: ${{ matrix.config.build }} + CTEST_PARALLEL_LEVEL: 6 DYLD_LIBRARY_PATH: ${{ github.workspace }}/ComputeLibrary/build ONEDNN_THREADING: ${{ matrix.config.threading }} # This job adds a check named "CI AArch64" that represents overall diff --git a/.github/workflows/nightly-aarch64.yml b/.github/workflows/nightly-aarch64.yml new file mode 100644 index 00000000000..5624b159b57 --- /dev/null +++ b/.github/workflows/nightly-aarch64.yml @@ -0,0 +1,132 @@ +# ******************************************************************************* +# Copyright 2024 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: "Nightly AArch64" + +on: + #* allow manual trigger of workflow when needed. Useful for a nightly. + workflow_dispatch: + schedule: + #* minute (0-59) hour (0-23) day (1-31) month (1-12) day of the week (0 - 6) + #* cron jobs run on the default (main) branch. + #* set to run at 5am UCT + - cron: "0 5 * * *" + +#* Stop stale workflows, though we should never hit this unless it hangs for a whole day. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +# Declare default permissions as read only. +permissions: read-all + +jobs: + build-and-test: + strategy: + matrix: + config: [ + { name: c6g, label: ah-ubuntu_22_04-c6g_8x-100, threading: OMP, toolset: gcc, build: Release, testset: NIGHTLY }, + { name: c7g, label: ah-ubuntu_22_04-c7g_8x-100, threading: OMP, toolset: gcc, build: Release, testset: NIGHTLY } + ] + + 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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + path: oneDNN + + - name: Get latest CMake and Ninja + uses: lukka/get-cmake@8567b9d9b63052b8430ef30042e13c3ba5288f16 # v3.31.3 + with: + cmakeVersion: 3.31.0 + ninjaVersion: 1.12.0 + + - if: ${{ matrix.config.threading == 'OMP' }} + name: Install openmp + run: | + sudo apt install -y libomp-dev + + - name: Install gcc + run: | + sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y + sudo apt update -y + sudo apt install -y g++-13 + + - name: Clone ACL + run: ${{ github.workspace }}/oneDNN/.github/automation/build_acl.sh + env: + ACL_ACTION: clone + ACL_ROOT_DIR: ${{ github.workspace }}/ComputeLibrary + ACL_VERSION: v24.11.1 + + - name: Configure ACL + run: ${{ github.workspace }}/oneDNN/.github/automation/build_acl.sh + env: + ACL_ACTION: configure + ACL_ROOT_DIR: ${{ github.workspace }}/ComputeLibrary + ACL_THREADING: ${{ matrix.config.threading }} + BUILD_TOOLSET: ${{ matrix.config.toolset }} + CMAKE_BUILD_TYPE: ${{ matrix.config.build }} + CMAKE_GENERATOR: Ninja + GCC_VERSION: 13 + + - name: Build ACL + run: ${{ github.workspace }}/oneDNN/.github/automation/build_acl.sh + env: + ACL_ACTION: build + + - name: Configure oneDNN + run: ${{ github.workspace }}/oneDNN/.github/automation/build_aarch64.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: 13 + ONEDNN_ACTION: configure + ONEDNN_TEST_SET: ${{ matrix.config.testset }} + ONEDNN_THREADING: ${{ matrix.config.threading }} + + - name: Build oneDNN + run: ${{ github.workspace }}/oneDNN/.github/automation/build_aarch64.sh + working-directory: ${{ github.workspace }}/oneDNN + env: + ONEDNN_ACTION: build + + - name: Run oneDNN tests + run: ${{ github.workspace }}/oneDNN/.github/automation/test_aarch64.sh + working-directory: ${{ github.workspace }}/oneDNN/build + env: + BUILD_TOOLSET: ${{ matrix.config.toolset }} + CMAKE_BUILD_TYPE: ${{ matrix.config.build }} + CTEST_PARALLEL_LEVEL: 8 + DYLD_LIBRARY_PATH: ${{ github.workspace }}/ComputeLibrary/build + ONEDNN_THREADING: ${{ matrix.config.threading }} + + #* This job adds a check named "Nightly AArch64" that represents overall + #* workflow status and can be used in branch rulesets + status: + needs: build-and-test + runs-on: ubuntu-latest + name: "Nightly AArch64" + steps: + - name: Print success + run: echo Success