{"push_id":2451776844,"size":8,"distinct_size":8,"ref":"refs/heads/hardfloat-v3b","head":"e8072c59db5589aff3171bf1ae86fa6fc88c5a37","before":"02171ed743afcd0dbef2e9211044b048de7368bc","commits":[{"sha":"c847a009812105646eac41f225ce7e04b0800943","author":{"name":"Emilio G. Cota","email":"2ef58f7968325b2e7ec839e83a175e093b7d2b07@braap.org"},"message":"fpu: introduce hardfloat\n\nThe appended paves the way for leveraging the host FPU for a subset\nof guest FP operations. For most guest workloads (e.g. FP flags\naren't ever cleared, inexact occurs often and rounding is set to the\ndefault [to nearest]) this will yield sizable performance speedups.\n\nThe approach followed here avoids checking the FP exception flags register.\nSee the added comment for details.\n\nThis assumes that QEMU is running on an IEEE754-compliant FPU and\nthat the rounding is set to the default (to nearest). The\nimplementation-dependent specifics of the FPU should not matter; things\nlike tininess detection and snan representation are still dealt with in\nsoft-fp. However, this approach will break on most hosts if we compile\nQEMU with flags such as -ffast-math. We control the flags so this should\nbe easy to enforce though.\n\nThis patch just adds some boilerplate code; subsequent patches add\noperations, one per commit to ease bisection.\n\nSigned-off-by: Emilio G. Cota <cota@braap.org>","distinct":true,"url":"https://api.github.com/repos/cota/qemu/commits/c847a009812105646eac41f225ce7e04b0800943"},{"sha":"3b274c0e2c8aed9c992a51210696aabe34ce3d40","author":{"name":"Emilio G. Cota","email":"2ef58f7968325b2e7ec839e83a175e093b7d2b07@braap.org"},"message":"hardfloat: support float32/64 addition and subtraction\n\nPerformance results (single and double precision) for fp-bench:\n\n1. Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz\n- before:\nadd-single: 125.66 MFlops\nadd-double: 126.74 MFlops\nsub-single: 122.41 MFlops\nsub-double: 123.98 MFlops\n- after:\nadd-single: 428.63 MFlops\nadd-double: 287.21 MFlops\nsub-single: 415.63 MFlops\nsub-double: 280.56 MFlops\n\n2. ARM Aarch64 A57 @ 2.4GHz\n- before:\nadd-single: 44.74 MFlops\nadd-double: 49.17 MFlops\nsub-single: 44.55 MFlops\nsub-double: 49.06 MFlops\n- after:\nadd-single: 93.28 MFlops\nadd-double: 88.64 MFlops\nsub-single: 95.04 MFlops\nsub-double: 88.64 MFlops\n\n3. IBM POWER8E @ 2.1 GHz\n- before:\nadd-single: 68.65 MFlops\nadd-double: 70.85 MFlops\nsub-single: 74.53 MFlops\nsub-double: 70.18 MFlops\n- after:\nadd-single: 82.01 MFlops\nadd-double: 113.43 MFlops\nsub-single: 81.56 MFlops\nsub-double: 112.12 MFlops\n\nNote that the IBM and ARM machines benefit from having\nHARDFLOAT_2F{32,64}_USE_FP set to 0. Otherwise their performance\ncan suffer significantly:\n- IBM Power8:\nadd-single: [1] 55.21 vs [0]  82.04 MFlops\nadd-double: [1] 52.67 vs [0] 113.17 MFlops\n- Aarch64 A57:\nadd-single: [1] 82.34 vs [0] 95.37 MFlops\nadd-double: [1] 82.49 vs [0] 88.58 MFlops\n\nOn the Intel machine, having 2F64 set to 1 pays off, but it doesn't for 2F32:\n- Intel i7-6700K:\nadd-single: [1] 285.79 vs [0] 426.70 MFlops\nadd-double: [1] 276.18 vs [0] 262.84 MFlops\n\nSigned-off-by: Emilio G. Cota <cota@braap.org>","distinct":true,"url":"https://api.github.com/repos/cota/qemu/commits/3b274c0e2c8aed9c992a51210696aabe34ce3d40"},{"sha":"138533e9e6b1bdc0b9068026be0261a03aaebcbc","author":{"name":"Emilio G. Cota","email":"2ef58f7968325b2e7ec839e83a175e093b7d2b07@braap.org"},"message":"hardfloat: support float32/64 multiplication\n\nPerformance results for fp-bench:\n\n1. Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz:\n- before:\nmul-single: 120.30 MFlops\nmul-double: 118.93 MFlops\n- after:\nmul-single: 254.87 MFlops\nmul-double: 193.47 MFlops\n\n2. ARM Aarch64 A57 @ 2.4GHz\n- before:\nmul-single: 37.39 MFlops\nmul-double: 38.79 MFlops\n- after:\nmul-single: 80.78 MFlops\nmul-double: 75.99 MFlops\n\n3. IBM POWER8E @ 2.1 GHz\n- before:\nmul-single: 57.41 MFlops\nmul-double: 56.63 MFlops\n\n- after:\nmul-single: 54.02 MFlops\nmul-double: 66.50 MFlops\n\nSigned-off-by: Emilio G. Cota <cota@braap.org>","distinct":true,"url":"https://api.github.com/repos/cota/qemu/commits/138533e9e6b1bdc0b9068026be0261a03aaebcbc"},{"sha":"556d84ef4ff819cefedf59ba6f72b9882425fa43","author":{"name":"Emilio G. Cota","email":"2ef58f7968325b2e7ec839e83a175e093b7d2b07@braap.org"},"message":"hardfloat: support float32/64 division\n\nPerformance results for fp-bench run under aarch64-linux-user\non an Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz host:\n\n- before:\ndiv-single: 30.30 MFlops\ndiv-double: 29.59 MFlops\n\n- after:\ndiv-single: 94.07 MFlops\ndiv-double: 106.79 MFlops\n\n- w/ both using float32/64_is_normal etc.:\ndiv-single: 94.08 MFlops\ndiv-double: 99.09 MFlops\n\n- w/ both using fpclassify etc.:\ndiv-single: 88.82 MFlops\ndiv-double: 105.20 MFlops\n\nSigned-off-by: Emilio G. Cota <cota@braap.org>","distinct":true,"url":"https://api.github.com/repos/cota/qemu/commits/556d84ef4ff819cefedf59ba6f72b9882425fa43"},{"sha":"b3ca31ea99f503d340adb904432b006a116eaa3e","author":{"name":"Emilio G. Cota","email":"2ef58f7968325b2e7ec839e83a175e093b7d2b07@braap.org"},"message":"hardfloat: support float32/64 fused multiply-add\n\nPerformance results for fp-bench run under aarch64-linux-user\non an aarch64 host:\n\n- before:\nfma-single: 53.05 MFlops\nfma-double: 51.89 MFlops\n\n- after:\nfma-single: 110.44 MFlops\nfma-double: 101.78 MFlops\n\n- w/ both using float32/64_is_normal etc.:\nfma-single: 110.57 MFlops\nfma-double: 93.93 MFlops\n\n- w/ both using fpclassify etc.:\nfma-single: 102.86 MFlops\nfma-double: 101.71 MFlops\n\nSigned-off-by: Emilio G. Cota <cota@braap.org>","distinct":true,"url":"https://api.github.com/repos/cota/qemu/commits/b3ca31ea99f503d340adb904432b006a116eaa3e"},{"sha":"8aee07a145e46fa2b031c03a25cf23234e17a0ca","author":{"name":"Emilio G. Cota","email":"2ef58f7968325b2e7ec839e83a175e093b7d2b07@braap.org"},"message":"hardfloat: support float32/64 square root\n\nPerformance results for fp-bench run under aarch64-linux-user\non an Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz host:\n\n- before:\nsqrt-single: 26.61 MFlops\nsqrt-double: 17.14 MFlops\n\n- after:\nsqrt-single: 95.06 MFlops\nsqrt-double: 89.05 MFlops\n\nNote that here we have a single implementation for both f32/f64.\nI tried the same trick we used before, but the results aren't\nas good:\n\n- w/ each using float32/64_is_normal or fpclassify etc.:\nsqrt-single: 95.50 MFlops\nsqrt-double: 84.55 MFlops\n\n- w/ both using fpclassify etc.:\nsqrt-single: 91.04 MFlops\nsqrt-double: 85.55 MFlops\n\nSigned-off-by: Emilio G. Cota <cota@braap.org>","distinct":true,"url":"https://api.github.com/repos/cota/qemu/commits/8aee07a145e46fa2b031c03a25cf23234e17a0ca"},{"sha":"d57fd0ac52ea79481650e663e6e9a5b4e40cc767","author":{"name":"Emilio G. Cota","email":"2ef58f7968325b2e7ec839e83a175e093b7d2b07@braap.org"},"message":"hardfloat: support float32/64 comparison\n\nPerformance results for fp-bench run under aarch64-linux-user\non an Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz host:\n\n- before:\ncmp-single: 34.23 MFlops\ncmp-double: 32.53 MFlops\n\n- after:\ncmp-single: 43.51 MFlops\ncmp-double: 41.23 MFlops\n\nUsing float32/64_is_any_nan vs. isnan yields only up to a 2% perf\ndifference, so I'm keeping for now a single implementation.\n\nThis low sensitivity is most likely due to the soft-fp\nint64_to_float32/64 functions -- they take ~50% of execution time.\nThey should be converted to hardfloat once there are test cases\nin fp-test for them.\n\nSigned-off-by: Emilio G. Cota <cota@braap.org>","distinct":true,"url":"https://api.github.com/repos/cota/qemu/commits/d57fd0ac52ea79481650e663e6e9a5b4e40cc767"},{"sha":"e8072c59db5589aff3171bf1ae86fa6fc88c5a37","author":{"name":"Emilio G. Cota","email":"2ef58f7968325b2e7ec839e83a175e093b7d2b07@braap.org"},"message":"hardfloat: support float32_to_float64\n\nPerformance improvement for SPEC06fp for the last few commits:\n\n                              qemu-aarch64 SPEC06fp (test set) speedup over QEMU 4c2c1015905\n                                      Host: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz\n                                            error bars: 95% confidence interval\n\n  4.5 +-+---+-----+----+-----+-----+-----+-----+----+-----+-----+-----+----+-----+-----+-----+-----+----+-----+---+-+\n    4 +-+..........................@@&+...........................................................................+-+\n  3.5 +-+.............+%%+.........@@&...............+==............................................+addsub       +-+\n  2.5 +-+..%%@&+..+++++%%&=+......+%@&..%%@&+.+@@=++%%&=....................................%%@++.%%@=++%%&++     +-+\n    2 +-+..%%@&+.%%@=+.%%&=...&&=.+%@&..%%@&.$$%@=..%%&=.........+++.%%@=+............+%@&=.%%@&++%%@=++%%@=++%%&=+-+\n  1.5 +-+**#%@&**$%@=**$%&=*#$%&**#$@&**#%@&**$%@=**$%&=*#$@&**#$@&**#%@=**%%@=*#$%&=*#$@&**#%@&**#%@=*+f%@=*#$%&=+-+\n  0.5 +-+**#%@&**$%@=**$%&=*#$%&**#$@&**#%@&**$%@=**$%&=*#$@&**#$@&**#%@=**$%@=*#$%&=*#$@&**#%@&**#%@=+sqr@=*#$%&=+-+\n    0 +-+**#%@&**$%@=**$%&=*#$%&**#$@&**#%@&**$%@=**$%&=*#$@&**#$@&**#%@=**$%@=*#$%&=*#$@&**#%@&**#%@=*+cmp=*#$%&=+-+\n  410.bw416.gam433.434.z435.436.cac437.lesli444.447.de450.so453454.ca459.GemsF465.tont470.lb4482.sph+f32f64ean\n\n                                       qemu-aarch64 NBench score; higher is better\n                                     Host: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz\n\n  16 +-+-------------------+---------------------+----------------------+---------------------+-------------------+-+\n  14 +-+..........................................+++++++***............+++..+++++................................+-+\n  12 +-+.........................................@@@@&&===+*............@@@&&&==**..................+before       +-+\n  10 +-+.........................................@..@.&..=.*............@.@..&.=.*............@@@&&&==***ub       +-+\n   8 +-+.....................................++++@..@.&..=.*............@.@..&.=.*............@+@..&+= +*ul       +-+\n   6 +-+...................@@@@&&===**..++###$$$%%..@.&..=.*..***###$$++@.@..&.=.*.......$$$%%%.@..&+= +*iv       +-+\n   4 +-+............###$$$%%..@.&..=.*..***.#..$.%..@.&..=.*..*+*..#+$%%%.@..&.=.*..***###+$++%.@..&+= +*ma       +-+\n   2 +-+.........****.#..$.%..@.&..=.*..*.*.#..$.%..@.&..=.*..*.*..#.$..%.@..&.=.*..*.*..#.$..%.@..&+=+s*rt       +-+\n   0 +-+---------****##$$$%%@@@&&===**--***##$$$%%@@@&&===**--***###$$%%%@@&&&==**--***###$$%%%@@&&&==***mp-------+-+\n                    FOURIER            NEURAL NET       LU DECOMPOSITION                 gmean      +f32f64\n\nImages in png: https://imgur.com/a/BzUtL\n\nSigned-off-by: Emilio G. Cota <cota@braap.org>","distinct":true,"url":"https://api.github.com/repos/cota/qemu/commits/e8072c59db5589aff3171bf1ae86fa6fc88c5a37"}]}
{"actor":{"display_login":"cota"}}