| ############################################################################ |
| # Copyright (C) SchedMD LLC. |
| ############################################################################ |
| import atf |
| import pytest |
| import re |
| |
| 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" |