diff --git a/perfkitbenchmarker/linux_packages/blazemark.py b/perfkitbenchmarker/linux_packages/blazemark.py index 4a09572ee7..77c96d8fcb 100644 --- a/perfkitbenchmarker/linux_packages/blazemark.py +++ b/perfkitbenchmarker/linux_packages/blazemark.py @@ -30,8 +30,9 @@ CONFIG = 'config' THROUGHPUT_HEADER_REGEX = ( - r'(\w+[\w\- ]+\w+)\s*(\([0-9.]+% filled\))*\s*\[([\w/]+)\]:([0-9\s.]+)') -THROUGHPUT_RESULT_REGEX = r'([0-9]+)\s*([0-9.]+)' + r'(\w+[\w\- ]+\w+)\s*(\([0-9.]+% filled\))*\s*[\[\(]' + '([\w/]+)[\]\)]:([0-9\s.e\-+]+)') +THROUGHPUT_RESULT_REGEX = r'([0-9]+)\s*([0-9.e\-+]+)' FILLED_REGEX = r'([0-9.]+)% filled' LIBS = frozenset([ @@ -184,7 +185,12 @@ def RunTest(vm, test): out, _ = vm.RemoteCommand( 'cd %s; export BLAZE_NUM_THREADS=%s; ./%s -only-blaze' % ( os.path.join(BLAZEMARK_DIR, 'bin'), vm.num_cpus, test)) - return _ParseResult(out, test) + ret = [] + try: + ret = _ParseResult(out, test) + except regex_util.NoMatchError: + logging.exception('Parsing failed for %s.\n', test) + return ret def _Configure(vm): diff --git a/tests/data/blazemark-output2.txt b/tests/data/blazemark-output2.txt new file mode 100644 index 0000000000..6a0f92cc16 --- /dev/null +++ b/tests/data/blazemark-output2.txt @@ -0,0 +1,32 @@ + Dense Matrix Inversion: + Blaze (Seconds): + 3 3.03424e-08 + 4 5.56256e-08 + 5 1.25857e+07 + 6 2.84748e-07 + 10 8.45703e-06 + 50 0.000520367 + 100 0.00447695 + 500 0.504488 + 1000 3.98441 + 2000 31.9121 + N=3, steps=65533975 + Blaze = 1 (1.98846) + N=4, steps=35425014 + Blaze = 1 (1.97054) + N=5, steps=15941983 + Blaze = 1 (2.00642) + N=6, steps=7041132 + Blaze = 1 (2.00495) + N=10, steps=227871 + Blaze = 1 (1.92711) + N=50, steps=3771 + Blaze = 1 (1.9623) + N=100, steps=439 + Blaze = 1 (1.96538) + N=500, steps=3 + Blaze = 1 (1.51346) + N=1000, steps=1 + Blaze = 1 (3.98441) + N=2000, steps=1 + Blaze = 1 (31.9121) diff --git a/tests/linux_packages/blazemark_test.py b/tests/linux_packages/blazemark_test.py index c97d341fa6..133af785be 100644 --- a/tests/linux_packages/blazemark_test.py +++ b/tests/linux_packages/blazemark_test.py @@ -25,22 +25,37 @@ class BlazemarkTestCase(unittest.TestCase, test_util.SamplesTestMixin): maxDiff = None def setUp(self): - data_dir = os.path.join(os.path.dirname(__file__), '..', 'data') - result_path = os.path.join(data_dir, 'blazemark-output.txt') - with open(result_path) as result_file: - self.out = result_file.read() + self.data_dir = os.path.join(os.path.dirname(__file__), '..', 'data') def testParseResult(self): - results = blazemark._ParseResult(self.out, 'test') - self.assertEqual(14, len(results)) # 14 results - self.assertEqual('test_C-like_Throughput', results[0].metric) - self.assertEqual(1115.44, results[0].value) - self.assertEqual('MFlop/s', results[0].unit) - self.assertEqual({'N': 100}, results[0].metadata) - self.assertEqual('test_Eigen_Throughput', results[-1].metric) - self.assertEqual(209.899, results[-1].value) - self.assertEqual('MFlop/s', results[-1].unit) - self.assertEqual({'N': 10000000}, results[-1].metadata) + result_path = os.path.join(self.data_dir, 'blazemark-output.txt') + with open(result_path) as result_file: + out = result_file.read() + results = blazemark._ParseResult(out, 'test') + self.assertEqual(14, len(results)) # 14 results + self.assertEqual('test_C-like_Throughput', results[0].metric) + self.assertEqual(1115.44, results[0].value) + self.assertEqual('MFlop/s', results[0].unit) + self.assertEqual({'N': 100}, results[0].metadata) + self.assertEqual('test_Eigen_Throughput', results[-1].metric) + self.assertEqual(209.899, results[-1].value) + self.assertEqual('MFlop/s', results[-1].unit) + self.assertEqual({'N': 10000000}, results[-1].metadata) + + def testParseExpResult(self): + result_path = os.path.join(self.data_dir, 'blazemark-output2.txt') + with open(result_path) as result_file: + out = result_file.read() + results = blazemark._ParseResult(out, 'test') + self.assertEqual(10, len(results)) # 10 results + self.assertEqual('test_Blaze_Throughput', results[0].metric) + self.assertEqual(float('3.03424e-08'), results[0].value) + self.assertEqual('Seconds', results[0].unit) + self.assertEqual({'N': 3}, results[0].metadata) + self.assertEqual('test_Blaze_Throughput', results[-1].metric) + self.assertEqual(31.9121, results[-1].value) + self.assertEqual('Seconds', results[-1].unit) + self.assertEqual({'N': 2000}, results[-1].metadata) if __name__ == '__main__':