Skip to content

Commit

Permalink
selective test (#10)
Browse files Browse the repository at this point in the history
* selective test

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update
  • Loading branch information
rscohn2 authored Jun 13, 2024
1 parent 91a9120 commit bdfa397
Show file tree
Hide file tree
Showing 2 changed files with 141 additions and 15 deletions.
117 changes: 117 additions & 0 deletions .github/scripts/domain-check.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
function matchesPattern(domain, filePaths) {
// filter files that end in .md
filePaths = filePaths.filter(filePath => !filePath.endsWith('.md'));
// These directories contain domain specific code
const dirs = '(tests/unit_tests|examples|src|include/oneapi/mkl)'
const domains = '(blas|lapack|rng|dft)'
// matches changes to the domain of interest or non domain-specific code
const re = new RegExp(`^(${dirs}/${domain}|(?!${dirs}/${domains}))`);
const match = filePaths.some(filePath => re.test(filePath));
return match;
}

async function prFiles(github, context) {
const pr = context.payload.pull_request;
if (!pr) {
return [];
}
const response = await github.rest.pulls.listFiles({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number
});
const prFiles = response.data.map(file => file.filename);
return prFiles;
}

module.exports = async ({github, context, domain}) => {
const files = await prFiles(github, context);
const match = matchesPattern(domain, files);
console.log("Domain: ", domain)
console.log("PR files: ", files);
console.log("Match: ", match);
return match;
}

test_patterns = [
{
domain: 'blas',
files: [
'tests/unit_tests/blas/test_blas.cpp',
],
expected: true
},
{
domain: 'rng',
files: [
'examples/rng/example_rng.cpp',
],
expected: true
},
{
domain: 'lapack',
files: [
'include/oneapi/mkl/lapack/lapack.hpp',
],
expected: true
},
{
domain: 'dft',
files: [
'src/dft/lapack.hpp',
],
expected: true
},
{
domain: 'dft',
files: [
'src/dft/lapack.md',
],
expected: false
},
{
domain: 'blas',
files: [
'tests/unit_tests/dft/test_blas.cpp',
],
expected: false
},
{
domain: 'rng',
files: [
'examples/blas/example_rng.cpp',
],
expected: false
},
{
domain: 'lapack',
files: [
'include/oneapi/mkl/rng/lapack.hpp',
],
expected: false
},
{
domain: 'dft',
files: [
'src/lapack/lapack.hpp',
],
expected: false
},
]

function testPattern(test) {
const result = matchesPattern(test.domain, test.files)
if (result !== test.expected) {
console.log('Fail:')
console.log(' domain:', test.domain)
console.log(' files:', test.files)
console.log(' expected:', test.expected)
console.log(' result:', result)
process.exit(1)
}
}

if (require.main === module) {
// invoke test for each test pattern
test_patterns.forEach(testPattern)
}
39 changes: 24 additions & 15 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,34 +21,40 @@ jobs:
matrix:
include:
- config: portBLAS
options: -DTARGET_DOMAINS=blas -DREF_BLAS_ROOT=${PWD}/lapack/install -DENABLE_PORTBLAS_BACKEND=ON -DENABLE_MKLCPU_BACKEND=OFF -DPORTBLAS_TUNING_TARGET=INTEL_CPU
tests: '.*'
domain: blas
build_options: -DREF_BLAS_ROOT=${PWD}/lapack/install -DENABLE_PORTBLAS_BACKEND=ON -DENABLE_MKLCPU_BACKEND=OFF -DPORTBLAS_TUNING_TARGET=INTEL_CPU
- config: portFFT
options: -DENABLE_PORTFFT_BACKEND=ON -DENABLE_MKLCPU_BACKEND=OFF -DTARGET_DOMAINS=dft -DCMAKE_CXX_FLAGS="-fsycl -fsycl-targets=spir64"
tests: 'DFT/CT/.*ComputeTests_in_place_COMPLEX.COMPLEX_SINGLE_in_place_buffer.sizes_8_batches_1*'
domain: dft
build_options: -DENABLE_PORTFFT_BACKEND=ON -DENABLE_MKLCPU_BACKEND=OFF -DCMAKE_CXX_FLAGS="-fsycl -fsycl-targets=spir64"
test_options: -R 'DFT/CT/.*ComputeTests_in_place_COMPLEX.COMPLEX_SINGLE_in_place_buffer.sizes_8_batches_1*'
- config: MKL BLAS
options: -DTARGET_DOMAINS=blas -DREF_BLAS_ROOT=${PWD}/lapack/install
tests: '.*'
domain: blas
build_options: -DREF_BLAS_ROOT=${PWD}/lapack/install
- config: MKL DFT
options: -DTARGET_DOMAINS=dft
tests: '.*'
domain: dft
- config: MKL LAPACK
options: -DTARGET_DOMAINS=lapack -DREF_LAPACK_ROOT=${PWD}/lapack/install
tests: '.*'
domain: lapack
build_options: -DREF_LAPACK_ROOT=${PWD}/lapack/install
- config: MKL RNG
options: -DTARGET_DOMAINS=rng
tests: '.*'
domain: rng
name: unit tests ${{ matrix.config }} CPU
steps:
- uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
- name: Check if the changes affect this domain
id: domain_check
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const domainCheck = require('.github/scripts/domain-check.js')
return domainCheck({github, context, domain: "${{ matrix.domain}}"})
- name: Restore netlib from cache
id: cache-lapack
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
with:
path: lapack/install
key: lapack-${{ env.LAPACK_VERSION }}
- name: Install netlib
if: steps.cache-lapack.outputs.cache-hit != 'true'
if: steps.domain_check.outputs.result == 'true' && steps.cache-lapack.outputs.cache-hit != 'true'
run: |
curl -sL https://github.com/Reference-LAPACK/lapack/archive/refs/tags/v${LAPACK_VERSION}.tar.gz | tar zx
SHARED_OPT="lapack-${LAPACK_VERSION} -DBUILD_SHARED_LIBS=on -DCBLAS=on -DLAPACKE=on -DCMAKE_INSTALL_PREFIX=${PWD}/lapack/install"
Expand All @@ -59,17 +65,20 @@ jobs:
cmake ${SHARED_OPT} -DBUILD_INDEX64=on -B lapack/build64
cmake --build lapack/build64 ${PARALLEL} --target install
- name: Install oneapi
if: steps.domain_check.outputs.result == 'true'
uses: rscohn2/setup-oneapi@2ad0cf6b74bc2426bdcee825cf88f9db719dd727 # v0.1.0
with:
components: |
icx@2024.1.0
mkl@2024.1.0
- name: Configure/Build for a domain
if: steps.domain_check.outputs.result == 'true'
run: |
source /opt/intel/oneapi/setvars.sh
cmake -DENABLE_MKLGPU_BACKEND=off -DCMAKE_VERBOSE_MAKEFILE=on ${{ matrix.options }} -B build
cmake -DTARGET_DOMAINS=${{ matrix.domain }} -DENABLE_MKLGPU_BACKEND=off -DCMAKE_VERBOSE_MAKEFILE=on ${{ matrix.build_options }} -B build
cmake --build build ${PARALLEL}
- name: Run tests
if: steps.domain_check.outputs.result == 'true'
run: |
source /opt/intel/oneapi/setvars.sh
ctest --test-dir build -R ${{ matrix.tests }}
ctest --test-dir build ${{ matrix.test_options }}

0 comments on commit bdfa397

Please sign in to comment.