| ############################################################################ | |
| # Copyright (C) SchedMD LLC. | |
| ############################################################################ | |
| import re | |
| import pytest | |
| import atf | |
| node_num = 4 | |
| # Setup | |
| @pytest.fixture(scope="module", autouse=True) | |
| def setup(): | |
| atf.require_nodes(node_num) | |
| atf.require_slurm_running() | |
| def test_threads(): | |
| """Verify a job executes with various launch thread fanouts with --threads option""" | |
| node_count = "1-64" | |
| threads = 0 | |
| output = atf.run_command_output( | |
| f"srun -N{node_count} -l --threads=1 printenv SLURMD_NODENAME" | |
| ) | |
| assert re.search(r"0: (\S+)", output) is not None, "Did not get hostname of task 0" | |
| task_num = int(atf.get_config_parameter("MaxTasksPerNode")) | |
| if task_num <= 32: | |
| threads = task_num | |
| else: | |
| threads = 32 | |
| task_num = threads * 2 | |
| output = atf.run_command( | |
| f"srun -N{node_count} -n{task_num} -O -l --threads={threads} printenv SLURMD_NODENAME" | |
| ) | |
| assert ( | |
| output["exit_code"] == 0 | |
| ), f"srun failed to run with {threads} threads and {task_num} tasks" | |
| assert ( | |
| re.search(r"0: (\S+)", output["stdout"]) is not None | |
| ), f"Did not get hostname of task 0 when running {threads} threads" |