Skip to content

Commit

Permalink
Merge pull request #385 from OrderN/release-1.4
Browse files Browse the repository at this point in the history
Release 1.4
  • Loading branch information
davidbowler authored Dec 18, 2024
2 parents f424a27 + 7102b55 commit 484ff6e
Show file tree
Hide file tree
Showing 575 changed files with 117,814 additions and 1,854 deletions.
36 changes: 29 additions & 7 deletions .github/workflows/makefile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: Makefile CI

on:
push:
branches: [ "develop" ]
branches: [ "develop", "f-exx-opt" ]
pull_request:
branches: [ "develop" ]
branches: [ "develop", "f-exx-opt" ]
# Manual dispatch for including all multiply kernels in matrix.
# We don't want this to run on every commit, but it's useful
# to be able to launch it manually
Expand Down Expand Up @@ -70,11 +70,9 @@ jobs:
multiply_kernel: ompDojk
- test_all_multiply_kernels: false
multiply_kernel: ompGemm
- test_all_multiply_kernels: false
multiply_kernel: ompGemm_m

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
fetch-depth: '0'

Expand All @@ -84,7 +82,7 @@ jobs:
sudo apt install openmpi-bin libopenmpi-dev libfftw3-dev libblas3 liblapack3 libscalapack-openmpi-dev libxc-dev
- name: Set up Python
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: '3.10'

Expand Down Expand Up @@ -119,7 +117,31 @@ jobs:
run: |
mpirun -np ${{matrix.np}} ../../bin/Conquest
cat Conquest_out
- name: Run test 004
working-directory: ${{github.workspace}}/testsuite/test_004_isol_C2H4_4proc_PBE0CRI
run: |
mpirun -np ${{matrix.np}} ../../bin/Conquest
cat Conquest_out
- name: Run test 005
working-directory: ${{github.workspace}}/testsuite/test_005_isol_C2H4_4proc_PBE0GTO
run: |
mpirun -np ${{matrix.np}} ../../bin/Conquest
cat Conquest_out
- name: Run test 006
working-directory: ${{github.workspace}}/testsuite/test_006_isol_C2H4_4proc_PBE0ERI
run: |
mpirun -np ${{matrix.np}} ../../bin/Conquest
cat Conquest_out
- name: Run test 007
working-directory: ${{github.workspace}}/testsuite/test_007_isol_CH_spinpol_1proc_PBE0CRI
run: |
mpirun -np ${{matrix.np}} ../../bin/Conquest
cat Conquest_out
- name: Check test results
working-directory: ${{github.workspace}}/testsuite
run: pytest test_check_output.py
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
bin/*
deps.obj.inc
*~
src/system/system.make
src/system/system.make

# Ignore folders within each benchmark but not files
benchmarks/*/**/
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,4 @@ DOI for the specific version you have used in any given study.

## Version number

CONQUEST is now at version 1.3 (tag:v1.3)
CONQUEST is now at version 1.4 (tag:v1.4)
8 changes: 8 additions & 0 deletions benchmarks/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
__pycache__
Conquest_o*
Conquest_w*
*.i00*
*.bib
*.dat
*.log
fort.*
220 changes: 220 additions & 0 deletions benchmarks/reframe/exx_runonly.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
# Import modules from reframe and excalibur-tests
import reframe as rfm
import reframe.utility.sanity as sn

class ConquestBaseBenchmark(rfm.RunOnlyRegressionTest):

# Run configuration
## Mandatory ReFrame setup
valid_systems = ['-gpu']
valid_prog_environs = ['default']

## Executable
executable_opts = ['']

## Scheduler options
time_limit = '30m'

conquest_base_dir = variable(str, value='foo')

@run_after('setup')
def setup_variables(self):
self.executable = f"{self.conquest_base_dir}/bin/Conquest"
self.num_tasks = self.num_tasks_param
self.num_cpus_per_task = self.num_cpus_per_task_param
self.env_vars['OMP_NUM_THREADS'] = f'{self.num_cpus_per_task}'
self.env_vars['OMP_STACKSIZE'] = '100M'

if self.current_partition.scheduler.registered_name == 'sge':
# `self.num_tasks` or `self.num_cpus_per_task` may be `None`, here
# we default to `1` if not set.
num_tasks = self.num_tasks or 1
num_cpus_per_task = self.num_cpus_per_task or 1
# Set the total number of CPUs to be requested for the SGE scheduler.
# Set to a full node size to reduce runtime variance.
self.extra_resources['mpi'] = {'num_slots': self.current_partition.processor.num_cpus} #num_tasks * num_cpus_per_task}

@sanity_function
def validate_solution(self):
return sn.assert_found(r'Total run time was:.*', self.stdout)

@performance_function('s', perf_key='Runtime')
def extract_runtime_perf(self):
return sn.extractsingle(r'Total run time was:\s+(\S+)\s+seconds', self.stdout, 1, float)

@performance_function('s', perf_key='exx_setup_runtime')
def extract_exx_setup_runtime_perf(self):
return sn.extractsingle(r'Time spent in exx_setup\s+time:\s+=\s+(\S+)\ss', self.stdout, 1, float)

@performance_function('s', perf_key='exx_fetch_runtime')
def extract_exx_fetch_runtime_perf(self):
return sn.extractsingle(r'Time spent in exx_fetch\s+time:\s+=\s+(\S+)\ss', self.stdout, 1, float)

@performance_function('s', perf_key='exx_evalpao_runtime')
def extract_exx_evalpao_runtime_perf(self):
return sn.extractsingle(r'Time spent in exx_evalpao\s+time:\s+=\s+(\S+)\ss', self.stdout, 1, float)

@performance_function('s', perf_key='exx_allocat_runtime')
def extract_exx_allocat_runtime_perf(self):
return sn.extractsingle(r'Time spent in exx_allocat\s+time:\s+=\s+(\S+)\ss', self.stdout, 1, float)

@performance_function('s', perf_key='exx_dealloc_runtime')
def extract_exx_dealloc_runtime_perf(self):
return sn.extractsingle(r'Time spent in exx_dealloc\s+time:\s+=\s+(\S+)\ss', self.stdout, 1, float)

@performance_function('s', perf_key='exx_kernel_runtime')
def extract_exx_kernel_runtime_perf(self):
return sn.extractsingle(r'Time spent in exx_kernel\s+time:\s+=\s+(\S+)\ss', self.stdout, 1, float)

@performance_function('s', perf_key='exx_total_runtime')
def extract_exx_total_runtime_perf(self):
return sn.extractsingle(r'Time spent in exx_total\s+time:\s+=\s+(\S+)\ss', self.stdout, 1, float)

@performance_function('MB', perf_key='Memory')
def extract_memory_perf(self):
return sn.extractsingle(r'Max total mem use is\s+(\S+)\s+MB', self.stdout, 1, float)

@rfm.simple_test
class test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0_2(ConquestBaseBenchmark):

tags = {"test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.2"}
num_tasks_param = parameter([2,4])
num_cpus_per_task_param = parameter([1,2,4,8])

@run_before('run')
def get_input(self):
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.2/C_PBE_DZP_CQ.ion .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.2/Conquest_coord .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.2/Conquest_input .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.2/H_PBE_DZP_CQ.ion .")

@rfm.simple_test
class test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0_4(ConquestBaseBenchmark):

tags = {"test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.4"}
num_tasks_param = parameter([2,4])
num_cpus_per_task_param = parameter([1,2,4,8])

@run_before('run')
def get_input(self):
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.4/C_PBE_DZP_CQ.ion .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.4/Conquest_coord .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.4/Conquest_input .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.4/H_PBE_DZP_CQ.ion .")

@rfm.simple_test
class test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0_6(ConquestBaseBenchmark):

tags = {"test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.6"}
num_tasks_param = parameter([2,4])
num_cpus_per_task_param = parameter([1,2,4,8])

@run_before('run')
def get_input(self):
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.6/C_PBE_DZP_CQ.ion .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.6/Conquest_coord .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.6/Conquest_input .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullDZP_0.6/H_PBE_DZP_CQ.ion .")

@rfm.simple_test
class test_EXX_isol_C2H4_4proc_PBE0CRI_fullSZP_0_4_SCF(ConquestBaseBenchmark):

tags = {"test_EXX_isol_C2H4_4proc_PBE0CRI_fullSZP_0.4_SCF"}
num_tasks_param = parameter([2,4])
num_cpus_per_task_param = parameter([1,2,4,8])

@run_before('run')
def get_input(self):
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullSZP_0.4_SCF/C_PBE_SZP_CQ.ion .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullSZP_0.4_SCF/Conquest_coord .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullSZP_0.4_SCF/Conquest_input .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullSZP_0.4_SCF/H_PBE_SZP_CQ.ion .")

@rfm.simple_test
class test_EXX_isol_C2H4_4proc_PBE0CRI_fullTZTP_0_6(ConquestBaseBenchmark):

tags = {"test_EXX_isol_C2H4_4proc_PBE0CRI_fullTZTP_0.6"}
num_tasks_param = parameter([2,4])
num_cpus_per_task_param = parameter([1,2,4,8])

@run_before('run')
def get_input(self):
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullTZTP_0.6/C_PBE_TZTP_CQ.ion .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullTZTP_0.6/Conquest_coord .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullTZTP_0.6/Conquest_input .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0CRI_fullTZTP_0.6/H_PBE_TZTP_CQ.ion .")

@rfm.simple_test
class test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_0_4_SCF(ConquestBaseBenchmark):

tags = {"test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_0.4_SCF"}
num_tasks_param = parameter([2,4])
num_cpus_per_task_param = parameter([1,2,4,8])

@run_before('run')
def get_input(self):
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_0.4_SCF/C_PBE_SZP_CQ.ion .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_0.4_SCF/Conquest_coord .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_0.4_SCF/Conquest_input .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_0.4_SCF/H_PBE_SZP_CQ.ion .")

@rfm.simple_test
class test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_GTO_SCF(ConquestBaseBenchmark):

tags = {"test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_GTO_SCF"}
num_tasks_param = parameter([2,4])
num_cpus_per_task_param = parameter([1,2,4,8])

@run_before('run')
def get_input(self):
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_GTO_SCF/C_PBE_SZP_CQ.ion .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_GTO_SCF/C.gto .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_GTO_SCF/Conquest_coord .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_GTO_SCF/Conquest_input .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_GTO_SCF/H_PBE_SZP_CQ.ion .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C2H4_4proc_PBE0ERI_fullSZP_GTO_SCF/H.gto .")

@rfm.simple_test
class test_EXX_isol_C6H6_4proc_PBE0CRI_fullDZP_0_6(ConquestBaseBenchmark):

tags = {"test_EXX_isol_C6H6_4proc_PBE0CRI_fullDZP_0.6"}
num_tasks_param = parameter([2,4])
num_cpus_per_task_param = parameter([1,2,4,8])

@run_before('run')
def get_input(self):
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C6H6_4proc_PBE0CRI_fullDZP_0.6/C_PBE_DZP_CQ.ion .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C6H6_4proc_PBE0CRI_fullDZP_0.6/Conquest_coord .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C6H6_4proc_PBE0CRI_fullDZP_0.6/Conquest_input .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C6H6_4proc_PBE0CRI_fullDZP_0.6/H_PBE_DZP_CQ.ion .")

@rfm.simple_test
class test_EXX_isol_C6H6_4proc_PBE0CRI_fullSZP_0_6(ConquestBaseBenchmark):

tags = {"test_EXX_isol_C6H6_4proc_PBE0CRI_fullSZP_0.6"}
num_tasks_param = parameter([2,4])
num_cpus_per_task_param = parameter([1,2,4,8])

@run_before('run')
def get_input(self):
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C6H6_4proc_PBE0CRI_fullSZP_0.6/C_PBE_SZP_CQ.ion .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C6H6_4proc_PBE0CRI_fullSZP_0.6/Conquest_coord .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C6H6_4proc_PBE0CRI_fullSZP_0.6/Conquest_input .")
self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/test_EXX_isol_C6H6_4proc_PBE0CRI_fullSZP_0.6/H_PBE_SZP_CQ.ion .")


# @rfm.simple_test
# class Water64(ConquestBaseBenchmark):

# tags = {"water64"}
# num_tasks_param = 8
# num_cpus_per_task = 4

# @run_before('run')
# def get_input(self):
# self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/water_64mols/Conquest_input .")
# self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/water_64mols/H2O_coord.in .")
# self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/water_64mols/H_SZ.ion .")
# self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/water_64mols/H_SZP.ion .")
# self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/water_64mols/O_SZ.ion .")
# self.prerun_cmds.append(f"cp {self.conquest_base_dir}/benchmarks/water_64mols/O_SZP.ion .")
Loading

0 comments on commit 484ff6e

Please sign in to comment.