Skip to content

Commit ae6156e

Browse files
pmkccopybara-github
authored andcommitted
Fix issue where SIR17 could have incorrect fortran version.
If build_tools were installed before speccpu.py (e.g. by installing pip for preprovisioned_data), speccpu.py would override gfortran with --fortran_version (or OS default) instead of the intended --gcc_version. PiperOrigin-RevId: 936945296
1 parent cc2d10c commit ae6156e

3 files changed

Lines changed: 25 additions & 7 deletions

File tree

perfkitbenchmarker/linux_packages/fortran.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import logging
1717
from absl import flags
18+
from perfkitbenchmarker import errors
1819

1920
VERSION = flags.DEFINE_integer(
2021
'fortran_version', None, 'Version of gfortran to install'
@@ -33,7 +34,7 @@ def YumInstall(vm):
3334
_YumInstallVersion(vm, VERSION.value)
3435
else:
3536
vm.InstallPackages('gcc-gfortran libgfortran')
36-
_LogFortranVersion(vm)
37+
logging.info('Version of fortran: %s', GetFortranVersion(vm))
3738

3839

3940
def AptInstall(vm):
@@ -42,7 +43,7 @@ def AptInstall(vm):
4243
_AptInstallVersion(vm, VERSION.value)
4344
else:
4445
vm.InstallPackages('gfortran')
45-
_LogFortranVersion(vm)
46+
logging.info('Version of fortran: %s', GetFortranVersion(vm))
4647

4748

4849
def _YumInstallVersion(vm, version):
@@ -73,7 +74,18 @@ def _AptInstallVersion(vm, version):
7374
)
7475

7576

76-
def _LogFortranVersion(vm):
77-
"""Logs the version of gfortran."""
78-
txt, _ = vm.RemoteCommand('gfortran -dumpversion')
79-
logging.info('Version of fortran: %s', txt.strip())
77+
def GetFortranVersion(vm, required_version_prefix: str | None = None) -> str:
78+
"""Returns the full version of gfortran e.g. 11.5.0."""
79+
txt, _ = vm.RemoteCommand('gfortran -dumpfullversion')
80+
version = txt.strip()
81+
if not required_version_prefix and VERSION.value:
82+
required_version_prefix = str(VERSION.value)
83+
84+
if required_version_prefix and not version.startswith(
85+
required_version_prefix
86+
):
87+
raise errors.Benchmarks.PrepareException(
88+
f'gfortran version {version} does not match expected version'
89+
f' {required_version_prefix}'
90+
)
91+
return version

perfkitbenchmarker/linux_packages/speccpu.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from perfkitbenchmarker import sample
2727
from perfkitbenchmarker import stages
2828
from perfkitbenchmarker.linux_packages import build_tools
29+
from perfkitbenchmarker.linux_packages import fortran
2930

3031
BASE_MODE = 'base'
3132
PEAK_MODE = 'peak'
@@ -290,9 +291,10 @@ def InstallSPECCPU(vm, speccpu_vm_state):
290291
def Install(vm):
291292
"""Installs SPECCPU dependencies."""
292293
vm.Install('wget')
293-
vm.Install('fortran')
294294
# Install gcc, g++, fortran according to --gcc_version
295295
vm.Install('build_tools')
296+
# Verify fortran is installed correctly
297+
fortran.GetFortranVersion(vm, required_version_prefix=FLAGS.gcc_version)
296298

297299
# Install libxcrypt-compat is needed on RHEL 9 based OSes, but not available
298300
# on RHEL 8 based OSes.
@@ -505,6 +507,7 @@ def _ExtractScore(stdout, vm, keep_partial_results, runspec_metric):
505507
'spec17_fdo': FLAGS.spec17_fdo,
506508
'spec17_subset': FLAGS.spec17_subset,
507509
'gcc_version': build_tools.GetVersion(vm, 'gcc'),
510+
'gfortran_version': fortran.GetFortranVersion(vm),
508511
}
509512
if cpu_version:
510513
major, minor = cpu_version

tests/linux_packages/speccpu_test.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from perfkitbenchmarker import test_util
2525
# from perfkitbenchmarker.linux_benchmarks import speccpu2017_benchmark # noqa
2626
from perfkitbenchmarker.linux_packages import build_tools
27+
from perfkitbenchmarker.linux_packages import fortran
2728
from perfkitbenchmarker.linux_packages import speccpu
2829

2930
FLAGS = flags.FLAGS
@@ -59,6 +60,7 @@
5960
'spec17_threads': None,
6061
'spec17_subset': ['intrate'],
6162
'gcc_version': '7',
63+
'gfortran_version': '7',
6264
}
6365

6466
EXPECTED_RESULT_SPECINT = [
@@ -603,6 +605,7 @@ class Speccpu2006BenchmarkTestCase(
603605
def setUp(self):
604606
super().setUp()
605607
mock.patch.object(build_tools, 'GetVersion').start().return_value = '7'
608+
mock.patch.object(fortran, 'GetFortranVersion').start().return_value = '7'
606609
mock.patch.object(speccpu, '_GenerateMd5sum').start().return_value = 'abcd'
607610
self.addCleanup(mock.patch.stopall)
608611

0 commit comments

Comments
 (0)