diff --git a/ilp-measurement.ipynb b/ilp-measurement.ipynb index 8fd8468bcbc7d147697709dad50b17afe37ad397..ce6a712aecd4a8e24ad9635c43f88e9964d22b75 100644 --- a/ilp-measurement.ipynb +++ b/ilp-measurement.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -28,7 +28,7 @@ "from datetime import datetime\n", "from itertools import *\n", "from operator import itemgetter\n", - "import json, sys, traceback, os, functools" + "import json, sys, traceback, os, functools, traceback" ] }, { @@ -294,7 +294,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 61, "metadata": { "collapsed": false, "scrolled": false @@ -304,19 +304,19 @@ "name": "stdout", "output_type": "stream", "text": [ - "Loaded 1568 record(s) for update_normal_plt-r6rs (8x31 unique) ~= 6 run(s)\n", + "Loaded 1584 record(s) for update_normal_plt-r6rs (8x31 unique) ~= 6 run(s)\n", "Loaded 504 record(s) for update_flush_plt-r6rs (8x31 unique) ~= 2 run(s)\n", "Loaded 600 record(s) for update_noncached_plt-r6rs (8x31 unique) ~= 2 run(s)\n", - "Loaded 581 record(s) for sw_normal_plt-r6rs (7x31 unique) ~= 2 run(s)\n", + "Loaded 588 record(s) for sw_normal_plt-r6rs (7x31 unique) ~= 2 run(s)\n", "Loaded 245 record(s) for sw_flush_plt-r6rs (7x31 unique) ~= 1 run(s)\n", "Loaded 602 record(s) for sw_noncached_plt-r6rs (7x31 unique) ~= 2 run(s)\n", - "Loaded 577 record(s) for res_normal_plt-r6rs (7x31 unique) ~= 2 run(s)\n", + "Loaded 605 record(s) for res_normal_plt-r6rs (7x31 unique) ~= 2 run(s)\n", "Loaded 245 record(s) for res_flush_plt-r6rs (7x31 unique) ~= 1 run(s)\n", "Loaded 609 record(s) for res_noncached_plt-r6rs (7x31 unique) ~= 2 run(s)\n", "Loaded 242 record(s) for complex_normal_plt-r6rs (11x11 unique) ~= 2 run(s)\n", "Loaded 121 record(s) for complex_flush_plt-r6rs (11x11 unique) ~= 1 run(s)\n", "Loaded 121 record(s) for complex_noncached_plt-r6rs (11x11 unique) ~= 1 run(s)\n", - "Loaded 400 record(s) for mixed_normal_plt-r6rs (100x2 unique) ~= 2 run(s)\n", + "Loaded 803 record(s) for mixed_normal_plt-r6rs (100x2 unique) ~= 4 run(s)\n", "Loaded 359 record(s) for mixed_flush_plt-r6rs (100x2 unique) ~= 1 run(s)\n", "Loaded 200 record(s) for mixed_noncached_plt-r6rs (100x2 unique) ~= 1 run(s)\n", "Loaded 512 record(s) for update_normal_larceny (8x31 unique) ~= 2 run(s)\n", @@ -360,7 +360,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 17, "metadata": { "collapsed": false, "scrolled": true @@ -375,34 +375,39 @@ "Loaded no data for res_java\n", "Loaded no data for complex_java\n", "Loaded no data for mixed_java\n", - "Loaded 1912 record(s) for update_glpk (8x31 unique) ~= 7 run(s)\n", - "Loaded 235 record(s) for sw_glpk (7x31 unique) ~= 1 run(s)\n" - ] - }, - { - "ename": "IndexError", - "evalue": "tuple index out of range", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m<ipython-input-15-af2bf1536a93>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mjava_glpk_dats\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mread_sol_results\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'java'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msince\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdatetime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m2015\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m6\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m22\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mglpk_dats\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mread_sol_results\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'glpk'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mgurobi_dats\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mread_sol_results\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'gurobi'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m<ipython-input-11-3738473b7378>\u001b[0m in \u001b[0;36mread_sol_results\u001b[1;34m(solver, since)\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mread_sol_results\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msolver\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msince\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m return read_results('sol', solver, ('datetime64[us]', int, int, int, int, int, float, float), 7, since,\n\u001b[1;32m----> 5\u001b[1;33m splitted = split_change_only)\n\u001b[0m", - "\u001b[1;32m<ipython-input-10-b4f10b934785>\u001b[0m in \u001b[0;36mread_results\u001b[1;34m(prefix, name, dtype, data_column, since, splitted)\u001b[0m\n\u001b[0;32m 42\u001b[0m \u001b[0mnew_name\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'{0}_{1}'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mchange\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 43\u001b[0m \u001b[0mf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'profiling/splitted/{0}_{1}.csv'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprefix\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnew_name\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 44\u001b[1;33m \u001b[0mresult\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mchange\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mread_single_result\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnew_name\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdata_column\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msince\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 45\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 46\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;31m# splitted = no_split\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m<ipython-input-10-b4f10b934785>\u001b[0m in \u001b[0;36mread_single_result\u001b[1;34m(f, name, dtype, data_column, since)\u001b[0m\n\u001b[0;32m 22\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen_dat\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 23\u001b[0m print 'Loaded {0} record(s) for {1} ({2[0]}x{2[1]} unique) ~= {3} run(s)'.format(\n\u001b[1;32m---> 24\u001b[1;33m len_dat, name, dat2.shape, safe_div(len_dat,dat2.size))\n\u001b[0m\u001b[0;32m 25\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 26\u001b[0m \u001b[1;32mprint\u001b[0m \u001b[1;34m'Loaded no data for {}'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mIndexError\u001b[0m: tuple index out of range" + "Loaded 1928 record(s) for update_glpk (8x31 unique) ~= 7 run(s)\n", + "Loaded 241 record(s) for sw_glpk (7x31 unique) ~= 1 run(s)\n", + "Traceback (most recent call last):\n", + " File \"<ipython-input-17-a9613a72d048>\", line 3, in <module>\n", + " glpk_dats = read_sol_results('glpk')\n", + " File \"<ipython-input-11-3738473b7378>\", line 5, in read_sol_results\n", + " splitted = split_change_only)\n", + " File \"<ipython-input-10-b4f10b934785>\", line 44, in read_results\n", + " result[change] = read_single_result(f, new_name, dtype, data_column, since)\n", + " File \"<ipython-input-10-b4f10b934785>\", line 24, in read_single_result\n", + " len_dat, name, dat2.shape, safe_div(len_dat,dat2.size))\n", + "IndexError: tuple index out of range\n", + "\n", + "Loaded 216 record(s) for update_gurobi (8x27 unique) ~= 1 run(s)\n", + "Loaded no data for sw_gurobi\n", + "Loaded no data for res_gurobi\n", + "Loaded no data for complex_gurobi\n", + "Loaded no data for mixed_gurobi\n" ] } ], "source": [ "java_glpk_dats = read_sol_results('java', since = datetime(2015,6,22,0,0,0))\n", - "glpk_dats = read_sol_results('glpk')\n", + "try:\n", + " glpk_dats = read_sol_results('glpk')\n", + "except:\n", + " print(traceback.format_exc())\n", "gurobi_dats = read_sol_results('gurobi')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": { "collapsed": true }, @@ -415,7 +420,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": { "collapsed": false, "scrolled": false @@ -481,7 +486,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": { "collapsed": false }, @@ -541,7 +546,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": { "collapsed": false, "scrolled": true @@ -573,7 +578,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": { "collapsed": true }, @@ -627,7 +632,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": { "collapsed": true }, @@ -654,7 +659,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -701,12 +706,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": { "collapsed": false, - "scrolled": false + "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "java:\n", + " update,normal,flush,noncached\n", + " sw,normal,flush,noncached\n", + " res,normal,flush,noncached\n", + " mixed,normal,flush,noncached\n", + "\n", + "racket:\n", + " update,normal,flush,noncached\n", + " sw,normal,flush,noncached\n", + " res,normal,flush,noncached\n", + " mixed,normal,flush,noncached\n", + "\n", + "larceny:\n", + " update,normal,flush,noncached\n", + " sw,normal,flush,noncached\n", + " res,normal,flush,noncached\n", + " mixed,normal,flush,noncached\n" + ] + } + ], "source": [ "for (data, name) in ((java_dats, 'java'), (racket_dats, 'racket'), (larceny_dats, 'larceny')):\n", " sys.stdout.write('\\n{}:'.format(name))\n", @@ -747,14 +777,16 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [], "source": [ - "for (data, name) in ((java_glpk_dats, 'java'), (glpk_dats, 'scheme-glpk'), (gurobi_dats, 'glpk-gurobi')):\n", + "#for (data, name) in ((java_glpk_dats, 'java'), (glpk_dats, 'scheme-glpk'), (gurobi_dats, 'glpk-gurobi')):\n", + "## Skipped for now (Problems with reading solving times)\n", + "if False:\n", " sys.stdout.write('\\n{}:'.format(name))\n", "# change = 'mixed'\n", "# if True:\n", @@ -790,11 +822,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " update\n", + " res\n", + " sw" + ] + } + ], "source": [ "width = 0.6\n", "name = 'racket'\n", @@ -842,13 +885,15 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "for (data, name) in ((java_glpk_dats, 'java'), (glpk_dats, 'glpk'), (gurobi_dats, 'gurobi')):\n", + "#for (data, name) in ((java_glpk_dats, 'java'), (glpk_dats, 'glpk'), (gurobi_dats, 'gurobi')):\n", + "## Skipped for now (Problems with reading solving times)\n", + "if False:\n", " print name+':'\n", " #change = 'update'\n", " for change in kinds['changes']:\n", @@ -878,7 +923,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": { "collapsed": true }, @@ -914,12 +959,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": { "collapsed": false, "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loaded 106 (0 zero-values) attribute metric run(s) from profiling/att-percentages.csv\n" + ] + }, + { + "data": { + "text/plain": [ + "dtype([('dir', '<f8'), ('normalBaseline', '<f8'), ('flushedBaseline', '<f8'), ('noncachedBaseline', '<f8'), ('ratioNormalToFlushed', '<f8'), ('ratioNormalToNoncached', '<f8'), ('ratioFlushedToNoncached', '<f8'), ('speedupNormalToFlushed', '<f8'), ('speedupNormalToNoncached', '<f8'), ('speedupFlushedToNoncached', '<f8')])" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "att_dat = read_att_result()\n", "att_dat.dtype" @@ -935,7 +998,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": { "collapsed": false, "scrolled": false @@ -969,7 +1032,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": { "collapsed": false }, @@ -1003,7 +1066,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": { "collapsed": false, "scrolled": true @@ -1036,12 +1099,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": { "collapsed": false, "scrolled": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loaded 31 (0 zero-values) attribute metric run(s) from profiling/splitted/att-percentages_update.csv\n", + "Loaded 31 (0 zero-values) attribute metric run(s) from profiling/splitted/att-percentages_sw.csv\n", + "Loaded 31 (0 zero-values) attribute metric run(s) from profiling/splitted/att-percentages_res.csv\n", + "Loaded 2 (0 zero-values) attribute metric run(s) from profiling/splitted/att-percentages_mixed.csv\n" + ] + } + ], "source": [ "att_totals = {change: read_att_result(name = 'profiling/splitted/att-percentages_{}.csv'.format(change),\n", " adjust_number = False) for change in kinds['changes'] if change != 'complex'}" @@ -1049,7 +1123,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": { "collapsed": true }, @@ -1060,7 +1134,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": { "collapsed": false }, @@ -1111,11 +1185,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Drawing cache-miss rate\n", + "Drawing ratios\n", + "Drawing speed-ups\n" + ] + } + ], "source": [ "def baseline(x):\n", " return '{}Baseline'.format('flushed' if x == 'flush' else x)\n", @@ -1138,7 +1222,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "metadata": { "collapsed": true }, @@ -1172,7 +1256,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": { "collapsed": false }, @@ -1181,6 +1265,80 @@ "draw_att_graph('mixed', '001')\n", "draw_att_graph('mixed', '001', log = True)" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Graph for memory measurement" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def draw_mem_graph(kind, nr):\n", + " global dat_mem\n", + " f = 'profiling/{0}-{1}/memory.csv'.format(kind, nr)\n", + " print f\n", + " def cv_date(x):\n", + "# return datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.%f')\n", + " return (datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.%f') - datetime(1970,1,1)).total_seconds()\n", + " def cv_mem(x):\n", + " return int(x) / 1024\n", + " raw_data = []\n", + " with open(f) as fd:\n", + " next(fd)\n", + " for l in fd:\n", + " toks = l.split(',')\n", + " raw_data.append((cv_date(toks[0]), cv_mem(toks[1])))\n", + "\n", + "# dat = np.genfromtxt(f, delimiter=',', names=True, dtype = ('datetime64[us]', int),\n", + "# converters={'timestamp': cv_date, 'vmsize':cv_mem})\n", + "## print raw_data\n", + " dat_mem = np.array(raw_data, dtype = [('timestamp', int), ('vmsize', int)])\n", + "# dat_mem.dtype.names = 'timestamp', 'vmsize'\n", + " try:\n", + " plt.plot(dat_mem['vmsize'])\n", + " plt.ylabel('VmSize (MB)')\n", + " plt.xlabel('Time (Seconds)')\n", + "# plt.legend(loc='best')\n", + " fname_part = 'memory_{0}-{1}'.format(kind,nr)\n", + " plt.savefig('doc/{}.pdf'.format(fname_part))\n", + " !pdfcrop {'doc/{}.pdf'.format(fname_part)} {'doc/{}_cropped.pdf'.format(fname_part)} > /dev/null\n", + " plt.savefig('pngs/{}.png'.format(fname_part))\n", + " except Exception as e:\n", + " print 'Error while drawing memory graph for {0}: {1}'.format(kind, e)\n", + " traceback.print_exc(file=sys.stdout)\n", + " finally:\n", + " plt.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "profiling/mixed-001/memory.csv\n", + "profiling/mixed-002/memory.csv\n" + ] + } + ], + "source": [ + "draw_mem_graph('mixed', '001')\n", + "draw_mem_graph('mixed', '002')" + ] } ], "metadata": { diff --git a/ilp-measurement.scm b/ilp-measurement.scm index 47ecca66f385f6523d9556fa25fe6a3f6fa3e903..2813013a28923bf4d48e7336114978cfaa70a389 100644 --- a/ilp-measurement.scm +++ b/ilp-measurement.scm @@ -81,10 +81,6 @@ (cons* (dirname "update-" (car l)) update-test rest) all))) (list) raw-params)) - ; complex params - (map (lambda (l) (append (cons* (dirname "complex-" (car l)) complex-test (cdr l)) - (list (list (lambda _ #t) #f #f #f)))) - raw-short-params) ; mixed params (map (lambda (l) (append (cons* (dirname "mixed-" (car l)) mixed-test (cdr l)) (list (list (lambda _ #t) #f #f #f)))) diff --git a/ilp_measurement.py b/ilp_measurement.py index 8f02a7eea858297bb062cbfdfe006d720e71387a..de3a147190dd0a08564d6235228285e404e83ab1 100644 --- a/ilp_measurement.py +++ b/ilp_measurement.py @@ -139,8 +139,9 @@ def do_gen(call_impl, number, dirs, memory = False): print '\n' # conflate_results(skip_sol = True) -def dstat_log(directory): return 'profiling/{}/dstat.log'.format(directory) -def memory_log(directory): return 'profiling/{}/memory.csv'.format(directory) +def timestamp_filename(): return datetime.now().strftime('%Y-%m-%dT%H-%M-%S') +def dstat_log(directory): return 'profiling/{0}/dstat-{1}.log'.format(directory, timestamp_filename()) +def memory_log(directory): return 'profiling/{0}/memory-{1}.csv'.format(directory, timestamp_filename()) def dirname(d): return os.path.split(os.path.dirname(d))[-1] @@ -467,7 +468,7 @@ def check(): with open('dependencies.txt') as fd: if 'ilp-noncached\n' in fd: noncached_scm = True - print 'Evaluation is set to:\n'+'\n- '.join(( + print '\n- '.join(( 'Evaluation is set to:', red('non-cached') if properties.noncached.value else 'cached', red('flushed') if properties.flushed.value else 'unflushed', (green('Yes: ') if properties.timing.value else 'No ') + 'measurement of execution times',