From fa9f5739403cb7842fddd781d70c207071a0c39c Mon Sep 17 00:00:00 2001
From: Pedro Gonnet <pedro.gonnet@durham.ac.uk>
Date: Thu, 20 Nov 2014 21:54:40 +0000
Subject: [PATCH] yet another iteration, fixed the BH_times figure, formatted
 the code correctly.

---
 paper/figures/BH_scaling.eps | 335 +++++++++++++++++++--------------
 paper/figures/BH_scaling.pdf | Bin 8427 -> 9660 bytes
 paper/figures/BH_times.eps   | 351 +++++++++++++++++------------------
 paper/figures/BH_times.pdf   | Bin 8940 -> 8723 bytes
 paper/paper.tex              | 201 ++++++++++----------
 5 files changed, 473 insertions(+), 414 deletions(-)

diff --git a/paper/figures/BH_scaling.eps b/paper/figures/BH_scaling.eps
index f1d5062..171d0dc 100644
--- a/paper/figures/BH_scaling.eps
+++ b/paper/figures/BH_scaling.eps
@@ -1,12 +1,12 @@
 %!PS-Adobe-3.0 EPSF-3.0
-%%Creator: MATLAB, The MathWorks, Inc. Version 8.0.0.783 (R2012b). Operating System: Linux 3.8.0-30-generic #44-Ubuntu SMP Thu Aug 22 20:52:24 UTC 2013 x86_64.
+%%Creator: MATLAB, The MathWorks, Inc. Version 8.3.0.532 (R2014a). Operating System: Linux 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64.
 %%Title: figures/BH_scaling.eps
-%%CreationDate: 11/05/2013  22:51:51
+%%CreationDate: 10/27/2014  10:44:42
 %%DocumentNeededFonts: Helvetica
 %%DocumentProcessColors: Cyan Magenta Yellow Black
 %%LanguageLevel: 2
 %%Pages: 1
-%%BoundingBox:    25    16   788   297
+%%BoundingBox:    29    20   872   325
 %%EndComments
 
 %%BeginProlog
@@ -161,7 +161,7 @@ end
 
 %%Page: 1 1
 %%BeginPageSetup
-%%PageBoundingBox:    25    16   788   297
+%%PageBoundingBox:    29    20   872   325
 MathWorks begin
 bpage
 %%EndPageSetup
@@ -170,9 +170,9 @@ bpage
 bplot
 
 /dpi2point 12 def
-portraitMode 0192 3636 csm
+portraitMode 0216 4008 csm
 
-  114    65  9156  3375 rc
+  143   101 10108  3660 rc
 85 dict begin %Colortable dictionary
 /c0 { 0.000000 0.000000 0.000000 sr} bdef
 /c1 { 1.000000 1.000000 1.000000 sr} bdef
@@ -185,213 +185,278 @@ portraitMode 0192 3636 csm
 c0
 1 j
 1 sg
-   0    0 9404 3445 rf
+   0    0 10369 3802 rf
 6 w
-0 2756 2821 0 0 -2756 282 3100 4 MP
+0 3041 3111 0 0 -3041 310 3421 4 MP
 PP
--2821 0 0 2756 2821 0 0 -2756 282 3100 5 MP stroke
+-3111 0 0 3041 3111 0 0 -3041 310 3421 5 MP stroke
 4 w
 DO
 SO
 6 w
 0 sg
- 282 3100 mt 3103 3100 L
- 282  344 mt 3103  344 L
- 282 3100 mt  282  344 L
-3103 3100 mt 3103  344 L
- 282 3100 mt 3103 3100 L
- 282 3100 mt  282  344 L
- 685 3100 mt  685 3071 L
- 685  344 mt  685  372 L
+ 310 3421 mt 3421 3421 L
+ 310  380 mt 3421  380 L
+ 310 3421 mt  310  380 L
+3421 3421 mt 3421  380 L
+ 310 3421 mt 3421 3421 L
+ 310 3421 mt  310  380 L
+ 755 3421 mt  755 3389 L
+ 755  380 mt  755  411 L
 %%IncludeResource: font Helvetica
 /Helvetica /ISOLatin1Encoding 120 FMSR
 
- 619 3245 mt 
+ 689 3566 mt 
 (10) s
-1132 3100 mt 1132 3071 L
-1132  344 mt 1132  372 L
-1066 3245 mt 
+1248 3421 mt 1248 3389 L
+1248  380 mt 1248  411 L
+1182 3566 mt 
 (20) s
-1580 3100 mt 1580 3071 L
-1580  344 mt 1580  372 L
-1514 3245 mt 
+1742 3421 mt 1742 3389 L
+1742  380 mt 1742  411 L
+1676 3566 mt 
 (30) s
-2028 3100 mt 2028 3071 L
-2028  344 mt 2028  372 L
-1962 3245 mt 
+2236 3421 mt 2236 3389 L
+2236  380 mt 2236  411 L
+2170 3566 mt 
 (40) s
-2476 3100 mt 2476 3071 L
-2476  344 mt 2476  372 L
-2410 3245 mt 
+2729 3421 mt 2729 3389 L
+2729  380 mt 2729  411 L
+2663 3566 mt 
 (50) s
-2923 3100 mt 2923 3071 L
-2923  344 mt 2923  372 L
-2857 3245 mt 
+3223 3421 mt 3223 3389 L
+3223  380 mt 3223  411 L
+3157 3566 mt 
 (60) s
- 282 2706 mt  310 2706 L
-3103 2706 mt 3074 2706 L
- 114 2750 mt 
+ 310 2986 mt  342 2986 L
+3421 2986 mt 3389 2986 L
+ 143 3030 mt 
 (10) s
- 282 2268 mt  310 2268 L
-3103 2268 mt 3074 2268 L
- 114 2312 mt 
+ 310 2503 mt  342 2503 L
+3421 2503 mt 3389 2503 L
+ 143 2547 mt 
 (20) s
- 282 1831 mt  310 1831 L
-3103 1831 mt 3074 1831 L
- 114 1875 mt 
+ 310 2021 mt  342 2021 L
+3421 2021 mt 3389 2021 L
+ 143 2065 mt 
 (30) s
- 282 1393 mt  310 1393 L
-3103 1393 mt 3074 1393 L
- 114 1437 mt 
+ 310 1538 mt  342 1538 L
+3421 1538 mt 3389 1538 L
+ 143 1582 mt 
 (40) s
- 282  956 mt  310  956 L
-3103  956 mt 3074  956 L
- 114 1000 mt 
+ 310 1055 mt  342 1055 L
+3421 1055 mt 3389 1055 L
+ 143 1099 mt 
 (50) s
- 282  518 mt  310  518 L
-3103  518 mt 3074  518 L
- 114  562 mt 
+ 310  573 mt  342  573 L
+3421  573 mt 3389  573 L
+ 143  617 mt 
 (60) s
- 282 3100 mt 3103 3100 L
- 282  344 mt 3103  344 L
- 282 3100 mt  282  344 L
-3103 3100 mt 3103  344 L
-gs 282 344 2822 2757 rc
+ 310 3421 mt 3421 3421 L
+ 310  380 mt 3421  380 L
+ 310 3421 mt  310  380 L
+3421 3421 mt 3421  380 L
+gs 311 380 3111 3042 rc
 24 w
-45 37 45 -8 45 7 45 -11 44 -5 45 -11 45 5 45 -41 
-44 -12 45 14 45 -14 45 -8 45 0 44 -14 45 -31 45 -4 
-45 8 44 -33 45 -14 45 -8 45 -18 45 -22 44 2 45 -19 
-45 -49 45 3 44 -26 45 -16 45 -22 45 -38 45 -11 44 -48 
-45 -15 45 -42 45 -19 44 -48 45 -26 45 -34 45 -47 45 -36 
-44 -36 45 -36 45 -41 45 -41 44 -39 45 -42 45 -43 45 -41 
-45 -39 44 -40 45 -42 45 -43 45 -42 44 -43 45 -41 45 -42 
-45 -42 45 -43 44 -42 45 -44 45 -42 45 -43 44 -44 282 3100 64 MP stroke
+50 -10 49 -5 50 -34 49 -54 49 -6 50 -3 49 -43 49 -21 
+50 -25 49 -27 50 -38 49 -2 49 -38 50 -31 49 -20 49 -29 
+50 -27 49 -17 49 -56 50 1 49 -51 50 -26 49 -22 49 -21 
+50 -32 49 -27 49 -23 50 -25 49 -45 49 -16 50 -24 49 -38 
+50 -41 49 -48 49 -48 50 -44 49 -43 49 -51 50 -47 49 -38 
+49 -58 50 -46 49 -44 50 -44 49 -45 49 -45 50 -41 49 -48 
+49 -44 50 -47 49 -48 49 -48 50 -47 49 -48 50 -47 49 -47 
+49 -48 50 -48 49 -49 49 -47 50 -48 49 -48 49 -49 311 3421 64 MP stroke
+DD
+50 75 49 -23 50 -20 49 9 49 299 50 -13 49 -223 49 183 
+50 13 49 -77 50 7 49 15 49 -32 50 -2 49 -4 49 -11 
+50 -13 49 -11 49 -18 50 -20 49 -5 50 -23 49 -6 49 -16 
+50 -23 49 -4 49 -16 50 -21 49 -2 49 -11 50 5 49 -28 
+50 29 49 -50 49 40 50 -20 49 -24 49 -47 50 -4 49 -36 
+49 -8 50 -18 49 -19 50 -9 49 -23 49 -22 50 -15 49 -10 
+49 -40 50 -4 49 -15 49 -18 50 -22 49 -13 50 -28 49 -5 
+49 -33 50 -21 49 -20 49 -18 50 -25 49 -22 4 -3 356 3422 64 MP stroke
 gr
 
 24 w
+DD
 %%IncludeResource: font Helvetica
 /Helvetica /ISOLatin1Encoding 144 FMSR
 
-2568 1397 mt 
-(3299ms) s
+2964 1101 mt 
+(323ms) s
+2964 2501 mt 
+(811ms) s
 %%IncludeResource: font Helvetica
 /Helvetica /ISOLatin1Encoding 120 FMSR
 
-1464 3388 mt 
+1638 3709 mt 
 (nr. cores) s
-gs 282 344 2822 2757 rc
+gs 311 380 3111 3042 rc
 DO
 16.8 w
-2821 -2756 282 3100 2 MP stroke
+3110 -3041 311 3421 2 MP stroke
 gr
 
 16.8 w
 DO
-1115  249 mt 
+1288  285 mt 
 (Speedup Barnes-Hut) s
 SO
 6 w
 1 sg
-0 2757 5642 0 0 -2757 3573 3100 4 MP
+0 3041 6221 0 0 -3041 3940 3421 4 MP
 PP
--5642 0 0 2757 5642 0 0 -2757 3573 3100 5 MP stroke
+-6221 0 0 3041 6221 0 0 -3041 3940 3421 5 MP stroke
 4 w
 DO
 SO
 6 w
 0 sg
-3573 3100 mt 9215 3100 L
-3573  343 mt 9215  343 L
-3573 3100 mt 3573  343 L
-9215 3100 mt 9215  343 L
-3573 3100 mt 9215 3100 L
-3573 3100 mt 3573  343 L
-4379 3100 mt 4379 3043 L
-4379  344 mt 4379  400 L
-4313 3245 mt 
+3940 3421 mt 10161 3421 L
+3940  380 mt 10161  380 L
+3940 3421 mt 3940  380 L
+10161 3421 mt 10161  380 L
+3940 3421 mt 10161 3421 L
+3940 3421 mt 3940  380 L
+4828 3421 mt 4828 3358 L
+4828  380 mt 4828  442 L
+4762 3566 mt 
 (10) s
-5274 3100 mt 5274 3043 L
-5274  344 mt 5274  400 L
-5208 3245 mt 
+5816 3421 mt 5816 3358 L
+5816  380 mt 5816  442 L
+5750 3566 mt 
 (20) s
-6170 3100 mt 6170 3043 L
-6170  344 mt 6170  400 L
-6104 3245 mt 
+6803 3421 mt 6803 3358 L
+6803  380 mt 6803  442 L
+6737 3566 mt 
 (30) s
-7065 3100 mt 7065 3043 L
-7065  344 mt 7065  400 L
-6999 3245 mt 
+7791 3421 mt 7791 3358 L
+7791  380 mt 7791  442 L
+7725 3566 mt 
 (40) s
-7961 3100 mt 7961 3043 L
-7961  344 mt 7961  400 L
-7895 3245 mt 
+8778 3421 mt 8778 3358 L
+8778  380 mt 8778  442 L
+8712 3566 mt 
 (50) s
-8856 3100 mt 8856 3043 L
-8856  344 mt 8856  400 L
-8790 3245 mt 
+9766 3421 mt 9766 3358 L
+9766  380 mt 9766  442 L
+9700 3566 mt 
 (60) s
-3573 3100 mt 3629 3100 L
-9215 3100 mt 9158 3100 L
-3472 3144 mt 
+3940 3421 mt 4002 3421 L
+10161 3421 mt 10098 3421 L
+3839 3465 mt 
 (0) s
-3573 2598 mt 3629 2598 L
-9215 2598 mt 9158 2598 L
-3372 2642 mt 
+3940 2868 mt 4002 2868 L
+10161 2868 mt 10098 2868 L
+3739 2912 mt 
 (0.2) s
-3573 2097 mt 3629 2097 L
-9215 2097 mt 9158 2097 L
-3372 2141 mt 
+3940 2315 mt 4002 2315 L
+10161 2315 mt 10098 2315 L
+3739 2359 mt 
 (0.4) s
-3573 1596 mt 3629 1596 L
-9215 1596 mt 9158 1596 L
-3372 1640 mt 
+3940 1762 mt 4002 1762 L
+10161 1762 mt 10098 1762 L
+3739 1806 mt 
 (0.6) s
-3573 1095 mt 3629 1095 L
-9215 1095 mt 9158 1095 L
-3372 1139 mt 
+3940 1209 mt 4002 1209 L
+10161 1209 mt 10098 1209 L
+3739 1253 mt 
 (0.8) s
-3573  594 mt 3629  594 L
-9215  594 mt 9158  594 L
-3472  638 mt 
+3940  656 mt 4002  656 L
+10161  656 mt 10098  656 L
+3839  700 mt 
 (1) s
-3573 3100 mt 9215 3100 L
-3573  343 mt 9215  343 L
-3573 3100 mt 3573  343 L
-9215 3100 mt 9215  343 L
-gs 3573 344 5643 2757 rc
+3940 3421 mt 10161 3421 L
+3940  380 mt 10161  380 L
+3940 3421 mt 3940  380 L
+10161 3421 mt 10161  380 L
+gs 3940 380 6222 3042 rc
 24 w
-90 58 90 18 89 32 90 16 89 22 90 17 89 35 90 -12 
-89 18 90 46 90 18 89 25 90 35 89 21 90 1 89 34 
-90 49 89 1 90 25 90 34 89 22 90 17 89 53 90 24 
-89 -18 90 60 89 18 90 34 90 27 89 2 90 47 89 -14 
-90 45 89 -3 90 41 89 -15 90 32 90 15 89 -11 90 12 
-89 13 90 15 89 3 90 2 89 10 90 0 90 -4 89 3 
-90 13 89 12 90 2 89 -2 90 1 89 1 90 10 90 5 
-89 11 90 -5 89 11 90 -4 89 12 90 9 89 14 3573 594 64 MP stroke
+99 23 99 30 99 4 98 -16 99 29 99 34 99 -5 98 18 
+99 14 99 12 99 2 98 40 99 1 99 10 99 24 98 13 
+99 17 99 29 99 -19 98 54 99 -11 99 21 99 29 98 30 
+99 17 99 23 99 32 98 31 99 1 99 48 99 37 98 15 
+99 11 99 -2 99 -3 98 7 99 6 99 -7 99 -2 98 21 
+99 -26 99 1 99 6 98 10 99 7 99 6 99 20 98 -3 
+99 14 99 6 99 -3 98 1 99 1 99 4 99 3 98 7 
+99 -2 99 1 99 -2 98 8 99 -2 99 5 98 2 3940 656 64 MP stroke
+DD
+99 147 99 -22 99 -17 98 35 99 572 99 5 99 -397 98 379 
+99 57 99 -123 99 46 98 64 99 -36 99 32 99 26 98 12 
+99 7 99 12 99 -3 98 -10 99 30 99 -17 99 29 98 1 
+99 -17 99 35 99 2 98 -10 99 46 99 19 99 73 98 -31 
+99 163 99 -110 99 217 98 3 99 -14 99 -112 99 65 98 -74 
+99 53 99 5 99 5 98 60 99 -18 99 -9 99 26 98 72 
+99 -138 99 117 99 48 98 31 99 -2 99 90 99 -74 98 220 
+99 -145 99 22 99 53 98 132 99 -17 99 78 98 74 3940 656 64 MP stroke
 gr
 
 24 w
+DD
 %%IncludeResource: font Helvetica
 /Helvetica /ISOLatin1Encoding 144 FMSR
 
-8909 1450 mt 
-(60%) s
+9853 1168 mt 
+(75%) s
+9853 2253 mt 
+(36%) s
 %%IncludeResource: font Helvetica
 /Helvetica /ISOLatin1Encoding 120 FMSR
 
-6166 3388 mt 
+6822 3709 mt 
 (nr. cores) s
-gs 3573 344 5643 2757 rc
+6243  285 mt 
+(Parallel Efficiency Barnes-Hut) s
+3923 3464 mt 
+( ) s
+10145  422 mt 
+( ) s
+gs 3940 380 6222 3042 rc
 DO
 16.8 w
-5642 0 3573 594 2 MP stroke
+6221 0 3940 656 2 MP stroke
+SO
+6 w
 gr
 
-16.8 w
+6 w
+SO
+1 sg
+0 334 1151 0 0 -334 3999 3362 4 MP
+PP
+-1151 0 0 334 1151 0 0 -334 3999 3362 5 MP stroke
+4 w
 DO
-5586  249 mt 
-(Parallel Efficiency Barnes-Hut) s
 SO
+6 w
+0 sg
+3999 3362 mt 5150 3362 L
+3999 3028 mt 5150 3028 L
+3999 3362 mt 3999 3028 L
+5150 3362 mt 5150 3028 L
+3999 3362 mt 5150 3362 L
+3999 3362 mt 3999 3028 L
+3999 3362 mt 5150 3362 L
+3999 3028 mt 5150 3028 L
+3999 3362 mt 3999 3028 L
+5150 3362 mt 5150 3028 L
+4454 3162 mt 
+(QuickSched) s
+gs 3999 3028 1152 335 rc
+24 w
+350 0 4068 3119 2 MP stroke
+gr
+
+24 w
+4454 3313 mt 
+(Gadget2) s
+gs 3999 3028 1152 335 rc
+DD
+350 0 4068 3270 2 MP stroke
+SO
+6 w
+gr
+
 6 w
 
 end %%Color Dict
diff --git a/paper/figures/BH_scaling.pdf b/paper/figures/BH_scaling.pdf
index e8db7689dbd3347050cd6a938d03c7e1e05909e7..5f8cef4cbe14e358e5e579f3eba2fa96c68240bf 100644
GIT binary patch
delta 7011
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
Xv8be?C^e1C(#XJ^OI6j?-;E0ZB_)@d

delta 5739
zcmdnv{n~MYdwt~nei>7qy8HW+;wEqfO~29k`SI2u*8T(Yjxax3xGT<k_1(pL7d!p=
zZn1Ih$usxl%vUT}l~w-8;^Xuq8~-kqSKr=#@~Zu>>e^eizk_GpyZ7GiUB;*C_ZNR^
zx-Q||-2HpTvfZ;^K7U!pe)+b$$-OrUA&lFT=Ute5JKbJ!npQ&V-P!f|6<_AtoUZ=&
z`>xY(72Q*%pI+`b9I&F-Zu*Ok$4P$*%Wv%5Y<d2;j98f;{|!r<uGa--&x4=s=y<$n
z>V((N9xg}};{UY!!mHOaRWH6=w&!VbYuUZY|6=AZ6A!O>wv%h!j~h#hxppkKl34U7
zZf@E61GTkZ>%M==`u<oi*!m~qWKXwxpV-yOvsAlYuB-@p7#UtsaE!U*?ANx~kdqzD
zvrBC@rzp!cY+;wPc=VBZ-itdN%gn?*qW<$Z&x$q-xN(`uQ9@wK6*YN>6)BB}x1?#r
zZW8rvta9PDF?sALf34hARe9bz)BC6NZg#XcpS|}~b)Ll={`;Fau9(@I&tJ3lW0<#o
zTRqEF=QZC~K9iN_RV}=A_36rG-et`%Z%O%jub;W?p6)X52c7ae)N`b2II2CGD<}5|
zr0F&rX5}_A-FquM_wIx)m7SZM7ENNEwC?Ieo~YRqj%;za+O27NZ`YOeixdn`DxE9W
zbvDY%bv$G_Io~lVeiEDNk3CI`Cb3RgcXc68)a(T;_1BedGJk*UePW*dwWDivbr=08
zoR)IQLuuODueaBQ>AcwTz(Su-!TI+mjhCIvS-x%1Qv8|9*}3ic>ZL+|x$ZH|xV~QC
z?3U}sD(t%o4|>X1-aaL8L~H4~#Vf6?X1811FF3%p%<;(D6yt!0CAO+7{>znL+^yNF
zazC&n$gJli=PRCV_1BhcPLrKHX^mz2<r4~<MNX()bcs9h?5yiPuXV*DSGeCgtk1e=
z%P1bgbT0J3gCKF1Z(ap^XKE=lEa>B9*gEr8;&rvH9|NlD^PCyqYDLtstMtY;7<TxX
z8Q;sSnS5Vs;zyZ}yHqkmrg&|uinwh*E#+qEw-wh|50*~Vxy)kl_{hV0_9pev1vkV5
z_E;6IW>!!M?%$W|ps{YNOWx&8Dvb*2>Cux?if>L(^p7lSxZsvLrBY){X0gZ}k*7Z@
zg;~v9qdf$V=oqF%sWO;mys%hjP_eahUF9W>6Khv;Oz2<wHCg(MY`5ReGXe)yVwg=1
zOiWoVXv**Mndi$RlQl}+8#XZ})tm6d9b(O2tjEo4bv4tODK&J1;<U!33yMPhGrkvG
zSi#8hiYaJs!Q<`k4WG+<<;95TtV=x-wbo<Pks!bCrV8g9e^(xSX{lcnuizKHzWjXN
z`)`-OzArcbZd*{lui@uu7vbF}*7v+K)sE?zH~rAJ^xMl^&m~DObyI(GV%f<*A09rd
zfA)1b|K;xR^6lo|&+q^L<@lUq6=`R7TD3CrdES}CeMHMneX;i6VDW&k@BS(WA2WLT
zPgot<Gj*PCo!zGmW))Qj9z5hU;7^}yU%2eJfo<A3;k9RG9;rS(t2ylZg~&&y6LOPR
zn`*IpOuwO}{z9-KyRTtMz1q1;a~9gnHMy+X<keT7;2Gd+#Pl*s_O#AV@dB?**JrGK
zUMqF@Ls+>TRvAAwJXmIN<R!QMr>h=^^wKQUBtMp{<;$3s;~sL^J#y#SfL?VS<<9)G
zf<0f#Rc_tkQ!c#fIlbc5&#l^aYu-O|zHX!QCs(-mS=7bt>J4nqc)W{D9;{d^*!*Qy
z?d#f2Z;yoL*U!n^eEab&8;`FB$^i#C7QL3}b4=$Jd9dopC&Ts`#u{5&q#8V2O%F`?
z$9L$Lxub$5Z==9@g(+blc@(;)IWY5Fe(8`l*Ee8B+KzqFKhL=D^pKO?VkUl1^Y2~L
zwe_3hi+0W_b${^5^(T{1_S&Xr2gTGgIHcWkzg=1_UEi{2-FNHyS9NZ4FIjUsou~|b
z6~?ci{~<~&+*56;2LGoMr55I~%A59`%jdV#xgz}K%B)EL8`-gUgm+xeJ{Ivr@}jih
zM^CMqX*U*JS#jA$ZL-d4ZISib%u@}vUz%!peb&u?$&P<48D6gHX<_}6r<(avwp)VN
zZuhNC=M-E7FM5P2Oj(+EX>C3C#gn%-d~6e#ti!X?G&ota<JeTEW7~98?s6_GUexHj
zpJRUNH0A6Un(}k!sT<Z#O|@!u&{*wQshlNL#@6yJ#3P3P<MxSSTuwg(_Q;uDy|lp7
zVYBGO3EpX0W(y~+{@K|rbZVDuS!W3IxgTavuS|Q^vpbOU(6g?Iw_XG!2UK6^t@pDG
zGh8R@$RQ;XU@SQG%+n-&nHu>Wsme7E9cJ{-Ixe94Cbd*&wO~Yo@|2iQb&_i$TI80A
zO-;(mk(jhs`iP8Fy6?93jSU$y;*SPRnVM$1^vR;2n@K{pA{~L|c8VIuLyB&n;z;}F
zrc)!bY>hC>`k6~ho-xj<c_W#6&hB6Rg0<eA`n#^&E39z;lXW!ur(K~E@6<g^`k#$T
z|JpqKWK<e^?3`=Xul&mF1rcx0t@+v>UcSEX`0U4DKAoLie*Jx3-unMl9S5)3*E1U(
zxI20BUM@)%Lkm;0$+x()+0D(26^twlH}h~OF|vhwM*6z?PA=h@$Z4QpYH9|;llge%
z84V^I@QO1UO!ne6=Q2<*P%ttwQZP`MJdyVnOiv+SKeLB^z+`rQS)ok*9Q|DV+|0bv
zV*Nb*yv)4R$>#jBlcV_a>y0eTEbQ!xONvqxbGa(!gobg32uF&o6<9GvdRwO|$E>d1
z98C&(9?cyJ3C#)$asn<b944F!)*9Qk-O`d@@^!~nrPUn0cNb|i>2N)|r;xB)C4r&&
z;tC6^S7)@J9iO@K#g{K<EG_?ES^wwz{omj3R@Z;zaAs~g{<!zclv9_MXl|^ZDEMop
zX!f~eb;%8re{vk>-!FU4WR_2bxQ%?X+vkfJhc9_9KF;~@rG<tBw`9Cvjhw#n`yZcL
zj+|L?<HZb-lW$D_W$WtbuKib&{QAKIg_|>e9=8`V&n(I**^{F7eS+FlRh3gqKWg?(
zdU_{orjA*VknU-p9?xkmF0P)7za%;e8r5gcNpW4HV`gZm=xbEHv-L>cJ)7G*?`%j2
zT~m{swMj)m$u9Dd?#JnF%TFmy`uASdQ6Ttntgz7C$&-R@f|ZSw7cZIpCy6<wD0=tL
zZ`@*DV%BG7WZU*D)O2RH$ZwoA!;?jz@rcx+CJv>TPJu(c1?ph}axJ<WCv8x#=?HC^
zARt)(m~++)hZzDkNlJ-s6OLpi=@|CSIF@+Q_fE%e8{s&m^-bT;9Jrpa-*NB3`#;!!
za2<ZxwwpIz@~okk!725#p3z4AYs5HMe>RzU`8*9~cjs__Bk}S4#K-REBxbUPp13e0
zSJN-q+*Y7Wd(Q8~`uUw6x6g`QR%%_hLq3bOKL2&yt@=Rem%7LPze-kR`g&^H%%q9e
zI9X30j#=s0_;CYokmEkCZL3;rqh4HGcWG9K-8UZw(VMO7M6O*4o3FpCYu)05C&XT7
zc^xSWnVVai(H3<{ddYsT^KA1A+(q(~w*HXgjXoG$AR7A4YHHxTf0Jcg7p=&-`RvP*
zo*%K<J6-4f(B%C&p<Zu=yM4aC=Q0<0@1VY8uCo`;c>gFUIB4?I+t-!5ti8LMwg!Dz
zb@jrcXNNVn%{sRE&9Wr(H)a;1ItkOBDeq{Q{+B)H<P)pQ`nTtNWU(pRI=Of2ekK=%
zJ?pL*{qmjiMrP@TQ2rC5TRS~2c0GPsr=kA(nu%(;64#mejQlbOa~UNP>e~b}?@p+X
znZkedu}*_d{;#8JRV!rVwq~8Qaa%HD|1R-khi*vkZ9XHu=G$t8Xw@qjYj4`b%0;Ir
zB|VguSa4HQ>#oR&wC5{5E*i()Q@4yhV!P2Q{F21HBHk!#jW>^884B{2yxe_x>HBk<
zj8!2wN)~R~^WjRP^v){{3fB4I@5)^2JK3%+=q-FbXGJ(ua@l)v7pW^B_Rc!LE~WS7
zobPhxA0+sKAFtp0+~SJc!SEutnT5)`O?W-k+gfT~?~1EhqvE^g?T>el?dL3hHu-0T
z&-1JqXXf7Cvj6W~qd%9n1otE_Jl^?3s3b4x@zPc2s;_=*tV~K?;Z=Fy+)I&vEW0-d
zA75NvUob(tl+h=?XZh~RJJ&r=EXb;?4h+24FZw9&;J3ZEi?%6fRULm=%=2Km%w#js
z<p&$MtS(p9MwLyOcHXRL#{<T<8}3MzzjAY2{#E^_w}ik8=`Rhv{^HxdJJ!uVt=zXU
z=N8LF>unW=d14++ci!$*(z_$Nx#{Sxn@qpIHS8~H30+XX?6Pm{l-JK6<b7v<W7E1J
zjQ98sqt`c$eZPGF{cVA~faw0G6_(7~S)=;XeDuHi^>zuWtG}D@KHB^1WcGUN_?0eK
z7T;<~Pz!BHy0oq8?GfeeY4193Z`1M=>$1@ZYzu9Ff8Q#~D>}c+^{XTMsmal2xi4(o
zbD3S!M%X4}$_8U?&HC18weGt+RFBjw-LmTGt({%z$7dW|to~WMukg#=?#H2rA9q)*
z(QKEQw{Y{Jv^7&F%5uKjb!o@Z+h(aL#}{<oU-)LvnVM6s0Uv4)&J!w;3YF8c42-MT
z^Tb6rg<pF1zwOUMV-7!lAiMYZsc-R@v=`6bqaC|*o&UyzZ8t=%GgS;kkJW#*Y5Lec
z(>3MWB3{9~j!m33Eb)z=t3Oqi-*vlwIR1!0#F;AXgF8JU*0rs!JuNq@W7Cbfhl`@F
zY>}8g(NLFBv`W%{(_x!89e1zJU=NlEy!L*@&yrf}t&bKmq;C|wlXSM!-A_C@%=+B+
z$geCt2Y-B<{CvK!#(~YkZ$uAquZdBwu0N&OWXp3q<I3*ch1tGuf{(8jyYtTYc~R)@
zgz3+N6U2Jny=K`oW3^SPYsMCJE~nS0g<f5%zxTEHT&ULi$#xbcpY!Y&g_PThy>b3s
z^vzJlG|=$%Mb2mZE$WtKR^MNymbV<f5$8Hj*Q)a0gSsif8t;Tsp5&iD>olb}Vh4Bf
z^LH2P*K)s2cD_14cAbRYss|IgzQ=H%Z~O6pw>;y7%KF8>nr3Y-73Y$^V9TYZANb&9
z(w$$P>r^9)oh?`#o6>b(%g8ogyIJU}QfQ^;*M6lW&fQ-AS;0&3*ImC)B<_5;Xysp(
z=_;;A_XTrFv+v#VA?-qQaS-e3)c#AB24@%X*PmUOU|)ZmarP}!mOXw+2eRi*d~vh;
z$t~Z1X&PF(LDQt>%Wb>MU)y_4<k%Ipc|YIf<k_m<i#ebCaO%Xfa(^!#aL+2)zhdF8
zmCIJi-gTYT(06nBM|0n0b3CUW4c#)+HYdM|Iiz|*sNV9YDj_y+!j8Ot!nO5L)ZQ19
zW8xnk{=ZX8=&QZ(#S8V%Z$Ik1*B{b!{CZybJxlGcB9Hy+ee%QID_<^ulXCF1X}Ink
z<x78@j%?c2VZ?uKMcbXg8_&MpyW+f8?_z-ge;?nchZ?ipUw>k2Zw}{9nK6BzsQ;-&
zd+gT-Y~IQx_j<v@&A+d1$z!Q}acpMsEA9Mf-~X4Yo-&s2nSJuQ(mD4z@zwR0gl{UH
z-=T3|<>j{zwWn7)7S%s)Jhgb~(&>8Bw=1mrKJEXdhWzW5?#5=>AK$o2+mt`56pobq
zIrDA6FOF?mEjo)M7d~9WYSui-&S~ChQ>iSz_zZE0lw`?UKkCd6|6KI{p)YIURk^!{
z&U4Jq)vRPQ_VxLE$jj}^y2XE{Kl`1Qu&4eBquKGx)2tFt?|tNG^gXEV=EO;hX6@RP
z-4SHgvXdqK)Z%RhC#_SeYl^;17k4-6mb<pQgMF_I&)x?<$<G}N{@pO1dUr!mgZ#@s
zy=zztwzePhR8ct?yI7xf_0)vL&o=hS=yV=FxaC{}&m~`jDyO)dUt1eae|dH7)Jo$&
zH9B*hv+Jua@7UG9&TdY?o}Y(i-A~;cbNBMSx&}*yjdi{1tnPV}^Ha1Gj&Ml*Z$6rv
z8vij^b^SZZm`7#*8?#Hr0=#z{G|ri@+vJdSjq5JkLnen7`{}LyYWKe0ec6@!{m%J~
zjKR^mVmsN@)=f3qxna%Quhu2(v0cATHb06<V6?sPC_VLg{qCa9X8-4(4@PglS~aom
zWaTqO746pNCfcSG4)e+!jVLZ-`MY4<nkapveS3wtKkoSHH{*S%*x%n(8(;jLw8Fz)
z-Pq<~udau~CpYFT5hg8FO8Hh-0%kNRe_4F&gJ_)M!_(7RuiSl|v#R>UgEZ%hzYj(;
zc8mXHyP@}C@4f5gt8+ipci(Q@FZ52M;<@QB<?RQYb}<C^hch%zdGYUOclqnxT~|0V
zSQZ<}yWi>E^)C475zfms=XA~_1oxWu?7tpT_SR@}^K{mTb1rrn&c0>ptdDQzXI_=%
zm;N1U$1TQow`S?itN&UI{~e#vlgIH|?_Jy1yQwetoYLcX-*ofWME=)p(=XOvJ9n=5
zxz?QcEYU7;XT5%1$@0UmzrOy<eE1qWTTAS|Yh^qCNga;bzohhx`p!W1lSYS&7AIQ?
z*Us5$_pUYQ<D;+h3$yKxU)>&i`MBg}e}x^h%Nx%=-7LPa<J!|*n|Cg`r)mG;iu@0O
z4~_H8-ZKAux+zqva=J-@-{E$yzJ$0F=5^u09y9#AL=UNn+`HNBn!s8daz{MGtRpzS
z<)7NUD{sOdc50{}4(FYAL%zNB?A8r@waktJS3bNFO`a2UN=&@be`2}jN*PN7ub+=!
zTx4!{>sRckXXc;Hoj18##+lJ#^LZINM&;xr19OWMV_ox93qxH)!_-t=0|NsC-IOF#
zbAz;0BSS+o!^sA6-Yf>@>iUxn6jX@Pa7@llz*yJNP}jgT#K_3X)X2)faI%QJHm0Dz
zyg$Ezo`IgZg|UK0kdc9*QPSi*Wmzi=Jp)~11Ksr0ywsx1WCdjt6W!3H(!7#Vg<#(R
zg^-L=1;^5K1tTK`BLk4}MkWfOA<ha$28PCySrz<=a%8!Jhbj@iC*IqewH3E9x)_*i
za_Ku4r6!hS=I6O2mZWO9Sb^MSXlP(+WMpb&V5n_isBU1OuF0kEo1cPJ#bi}w3jtWL
z#K6KOS6Pmda5<(NW^ZV2r~ryz1BE;VE-=Hu+|1MxUChYP&<I`3(9+Csa<qy{y`iNE
zh9O2q#%AamjEs%VF~lqkG1VEFW2!SYzz{Pw1ly}>V1VR$BXc7R*P9twnoL$!wTX4M
zv@mcrG;*|bax-;yvUD?da&|K^H8pc}wQw^xF*UHWA*dpj%g&CgxFoTtq@pM_jmzB9
N+=NS2)z#mP3jmdmJ^=s#

diff --git a/paper/figures/BH_times.eps b/paper/figures/BH_times.eps
index f4a80a2..3fa76a5 100644
--- a/paper/figures/BH_times.eps
+++ b/paper/figures/BH_times.eps
@@ -1,12 +1,12 @@
 %!PS-Adobe-3.0 EPSF-3.0
-%%Creator: MATLAB, The MathWorks, Inc. Version 8.0.0.783 (R2012b). Operating System: Linux 3.8.0-30-generic #44-Ubuntu SMP Thu Aug 22 20:52:24 UTC 2013 x86_64.
+%%Creator: MATLAB, The MathWorks, Inc. Version 8.3.0.532 (R2014a). Operating System: Linux 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64.
 %%Title: figures/BH_times.eps
-%%CreationDate: 11/06/2013  09:10:44
+%%CreationDate: 11/19/2014  09:30:06
 %%DocumentNeededFonts: Helvetica
 %%DocumentProcessColors: Cyan Magenta Yellow Black
 %%LanguageLevel: 2
 %%Pages: 1
-%%BoundingBox:    30    16   493   297
+%%BoundingBox:    43    20   543   325
 %%EndComments
 
 %%BeginProlog
@@ -161,7 +161,7 @@ end
 
 %%Page: 1 1
 %%BeginPageSetup
-%%PageBoundingBox:    30    16   493   297
+%%PageBoundingBox:    43    20   543   325
 MathWorks begin
 bpage
 %%EndPageSetup
@@ -170,10 +170,10 @@ bpage
 bplot
 
 /dpi2point 12 def
-portraitMode 0192 3636 csm
+portraitMode 0216 4008 csm
 
-  174    65  5557  3375 rc
-95 dict begin %Colortable dictionary
+  305   101  6006  3660 rc
+93 dict begin %Colortable dictionary
 /c0 { 0.000000 0.000000 0.000000 sr} bdef
 /c1 { 1.000000 1.000000 1.000000 sr} bdef
 /c2 { 0.900000 0.000000 0.000000 sr} bdef
@@ -185,263 +185,246 @@ portraitMode 0192 3636 csm
 c0
 1 j
 1 sg
-   0    0 6269 3445 rf
+   0    0 6913 3802 rf
 6 w
-0 2756 5014 0 0 -2756 627 3100 4 MP
+0 3041 5530 0 0 -3041 691 3421 4 MP
 PP
--5014 0 0 2756 5014 0 0 -2756 627 3100 5 MP stroke
+-5530 0 0 3041 5530 0 0 -3041 691 3421 5 MP stroke
 4 w
 DO
 SO
 6 w
 0 sg
- 627 3100 mt 5641 3100 L
- 627 3100 mt  627  344 L
-1343 3100 mt 1343 3049 L
+ 691 3421 mt 6221 3421 L
+ 691 3421 mt  691  380 L
+1481 3421 mt 1481 3365 L
 %%IncludeResource: font Helvetica
 /Helvetica /ISOLatin1Encoding 120 FMSR
 
-1277 3245 mt 
+1415 3566 mt 
 (10) s
-2139 3100 mt 2139 3049 L
-2073 3245 mt 
+2358 3421 mt 2358 3365 L
+2292 3566 mt 
 (20) s
-2935 3100 mt 2935 3049 L
-2869 3245 mt 
+3236 3421 mt 3236 3365 L
+3170 3566 mt 
 (30) s
-3730 3100 mt 3730 3049 L
-3664 3245 mt 
+4114 3421 mt 4114 3365 L
+4048 3566 mt 
 (40) s
-4526 3100 mt 4526 3049 L
-4460 3245 mt 
+4992 3421 mt 4992 3365 L
+4926 3566 mt 
 (50) s
-5322 3100 mt 5322 3049 L
-5256 3245 mt 
+5869 3421 mt 5869 3365 L
+5803 3566 mt 
 (60) s
- 627 3100 mt  677 3100 L
- 526 3144 mt 
+ 691 3421 mt  746 3421 L
+ 590 3465 mt 
 (0) s
- 627 2488 mt  677 2488 L
- 459 2532 mt 
-(50) s
- 627 1877 mt  677 1877 L
- 392 1921 mt 
-(100) s
- 627 1266 mt  677 1266 L
- 392 1310 mt 
-(150) s
- 627  655 mt  677  655 L
- 392  699 mt 
-(200) s
-gs 627 344 5015 2757 rc
+ 691 3133 mt  746 3133 L
+ 590 3177 mt 
+(2) s
+ 691 2846 mt  746 2846 L
+ 590 2890 mt 
+(4) s
+ 691 2558 mt  746 2558 L
+ 590 2602 mt 
+(6) s
+ 691 2271 mt  746 2271 L
+ 590 2315 mt 
+(8) s
+ 691 1984 mt  746 1984 L
+ 523 2028 mt 
+(10) s
+ 691 1696 mt  746 1696 L
+ 523 1740 mt 
+(12) s
+ 691 1409 mt  746 1409 L
+ 523 1453 mt 
+(14) s
+ 691 1121 mt  746 1121 L
+ 523 1165 mt 
+(16) s
+ 691  834 mt  746  834 L
+ 523  878 mt 
+(18) s
+ 691  547 mt  746  547 L
+ 523  591 mt 
+(20) s
+gs 691 380 5531 3042 rc
 /c8 { 1.000000 0.133333 0.000000 sr} bdef
 c8
-0 2503 80 3 80 -42 79 -65 80 -40 79 -28 80 -27 80 -20 
-79 -60 80 43 79 -40 80 -54 80 -21 79 -54 80 16 79 -41 
-80 -20 79 -49 80 -12 80 -47 79 2 80 -39 79 -10 80 -33 
-80 -7 79 -10 80 -45 79 -7 80 -22 80 -39 79 -7 80 -11 
-79 22 80 -60 79 1 80 -21 80 2 79 -14 80 -3 79 23 
-80 -17 80 -6 79 -11 80 -1 79 -11 80 -1 80 -4 79 4 
-80 4 79 -10 80 -9 79 1 80 -2 80 5 79 -5 80 -3 
-79 -6 80 -2 80 3 79 -6 80 -1 79 -6 80 -2 79 -9 
-0 -1572 627 3100 66 MP
+0 2765 88 -9 88 -60 88 23 88 14 87 -19 88 -44 88 7 
+88 -20 87 -12 88 -15 88 9 88 -39 88 -12 87 -5 88 -20 
+88 -9 88 -15 87 -23 88 18 88 -53 88 11 88 -26 87 -19 
+88 -24 88 -13 88 -20 87 -25 88 -28 88 2 88 -38 88 -31 
+87 -9 88 -8 88 3 88 7 87 -4 88 -5 88 9 88 5 
+88 -16 87 23 88 2 88 -3 88 -7 87 -3 88 -5 88 -15 
+88 4 88 -8 87 -4 88 4 88 0 88 1 87 -2 88 -1 
+88 -5 88 3 88 1 87 1 88 -5 88 3 88 -3 87 1 
+0 -2234 691 3421 66 MP
 PP
 /c9 { 0.800000 0.106667 0.000000 sr} bdef
 c9
--5014 0 0 2503 80 3 80 -42 79 -65 80 -40 79 -28 80 -27 
-80 -20 79 -60 80 43 79 -40 80 -54 80 -21 79 -54 80 16 
-79 -41 80 -20 79 -49 80 -12 80 -47 79 2 80 -39 79 -10 
-80 -33 80 -7 79 -10 80 -45 79 -7 80 -22 80 -39 79 -7 
-80 -11 79 22 80 -60 79 1 80 -21 80 2 79 -14 80 -3 
-79 23 80 -17 80 -6 79 -11 80 -1 79 -11 80 -1 80 -4 
-79 4 80 4 79 -10 80 -9 79 1 80 -2 80 5 79 -5 
-80 -3 79 -6 80 -2 80 3 79 -6 80 -1 79 -6 80 -2 
-79 -9 0 -1572 627 3100 67 MP stroke
+-5530 0 0 2765 88 -9 88 -60 88 23 88 14 87 -19 88 -44 
+88 7 88 -20 87 -12 88 -15 88 9 88 -39 88 -12 87 -5 
+88 -20 88 -9 88 -15 87 -23 88 18 88 -53 88 11 88 -26 
+87 -19 88 -24 88 -13 88 -20 87 -25 88 -28 88 2 88 -38 
+88 -31 87 -9 88 -8 88 3 88 7 87 -4 88 -5 88 9 
+88 5 88 -16 87 23 88 2 88 -3 88 -7 87 -3 88 -5 
+88 -15 88 4 88 -8 87 -4 88 4 88 0 88 1 87 -2 
+88 -1 88 -5 88 3 88 1 87 1 88 -5 88 3 88 -3 
+87 1 0 -2234 691 3421 67 MP stroke
 /c10 { 0.509804 1.000000 0.000000 sr} bdef
 c10
-0 2499 80 2 80 -41 79 -65 80 -40 79 -27 80 -26 80 -21 
-79 -61 80 43 79 -40 80 -52 80 -21 79 -54 80 15 79 -40 
-80 -21 79 -48 80 -11 80 -48 79 1 80 -37 79 -10 80 -34 
-80 -6 79 -10 80 -45 79 -8 80 -21 80 -39 79 -8 80 -10 
-79 21 80 -59 79 0 80 -20 80 2 79 -14 80 -3 79 23 
-80 -17 80 -6 79 -10 80 -2 79 -11 80 -1 80 -4 79 4 
-80 4 79 -9 80 -9 79 0 80 -2 80 6 79 -6 80 -2 
-79 -6 80 -3 80 3 79 -6 80 0 79 -6 80 -3 79 -9 
-0 -1571 627 3100 66 MP
+0 1942 88 4 88 -54 88 19 88 13 87 -14 88 -31 88 9 
+88 -14 87 -9 88 -9 88 9 88 -24 88 -10 87 -3 88 -11 
+88 -6 88 -7 87 -11 88 11 88 -35 88 9 88 -10 87 -15 
+88 -13 88 -8 88 -10 87 -15 88 -12 88 1 88 -21 88 -17 
+87 1 88 -8 88 2 88 2 87 -1 88 -2 88 2 88 4 
+88 -6 87 13 88 -3 88 1 88 -7 87 2 88 -7 88 -4 
+88 0 88 -3 87 -2 88 2 88 1 88 0 87 -1 88 -1 
+88 -3 88 2 88 0 87 2 88 -4 88 2 88 -1 87 2 
+0 -1643 691 3421 66 MP
 PP
 /c11 { 0.407843 0.800000 0.000000 sr} bdef
 c11
--5014 0 0 2499 80 2 80 -41 79 -65 80 -40 79 -27 80 -26 
-80 -21 79 -61 80 43 79 -40 80 -52 80 -21 79 -54 80 15 
-79 -40 80 -21 79 -48 80 -11 80 -48 79 1 80 -37 79 -10 
-80 -34 80 -6 79 -10 80 -45 79 -8 80 -21 80 -39 79 -8 
-80 -10 79 21 80 -59 79 0 80 -20 80 2 79 -14 80 -3 
-79 23 80 -17 80 -6 79 -10 80 -2 79 -11 80 -1 80 -4 
-79 4 80 4 79 -9 80 -9 79 0 80 -2 80 6 79 -6 
-80 -2 79 -6 80 -3 80 3 79 -6 80 0 79 -6 80 -3 
-79 -9 0 -1571 627 3100 67 MP stroke
+-5530 0 0 1942 88 4 88 -54 88 19 88 13 87 -14 88 -31 
+88 9 88 -14 87 -9 88 -9 88 9 88 -24 88 -10 87 -3 
+88 -11 88 -6 88 -7 87 -11 88 11 88 -35 88 9 88 -10 
+87 -15 88 -13 88 -8 88 -10 87 -15 88 -12 88 1 88 -21 
+88 -17 87 1 88 -8 88 2 88 2 87 -1 88 -2 88 2 
+88 4 88 -6 87 13 88 -3 88 1 88 -7 87 2 88 -7 
+88 -4 88 0 88 -3 87 -2 88 2 88 1 88 0 87 -1 
+88 -1 88 -3 88 2 88 0 87 2 88 -4 88 2 88 -1 
+87 2 0 -1643 691 3421 67 MP stroke
 /c12 { 0.000000 0.721569 1.000000 sr} bdef
 c12
-0 2206 80 -4 80 -44 79 -49 80 -30 79 -6 80 -26 80 -21 
-79 -39 80 19 79 -27 80 -49 80 -7 79 -41 80 2 79 -28 
-80 -17 79 -26 80 -18 80 -27 79 -8 80 -24 79 -8 80 -19 
-80 -22 79 -8 80 -23 79 -13 80 -21 80 -18 79 -17 80 -8 
-79 -6 80 -19 79 -6 80 -6 80 -2 79 -5 80 1 79 1 
-80 -6 80 -4 79 -2 80 -2 79 -2 80 -2 80 -2 79 0 
-80 5 79 -8 80 -1 79 0 80 -2 80 2 79 -2 80 -1 
-79 -1 80 1 80 0 79 -3 80 0 79 0 80 -2 79 -1 
-0 -1504 627 3100 66 MP
+0 1421 88 20 88 -48 88 10 88 16 87 -17 88 -14 88 1 
+88 -6 87 2 88 -9 88 9 88 -21 88 -2 87 0 88 -6 
+88 -6 88 -2 87 -6 88 13 88 -26 88 8 88 -2 87 -10 
+88 -8 88 -5 88 -5 87 -8 88 -8 88 4 88 -12 88 -7 
+87 4 88 -8 88 2 88 1 87 -1 88 -1 88 1 88 2 
+88 -8 87 13 88 -5 88 3 88 -8 87 5 88 -6 88 0 
+88 -1 88 -2 87 -2 88 1 88 2 88 0 87 -1 88 0 
+88 -4 88 3 88 0 87 1 88 -3 88 2 88 -1 87 1 
+0 -1266 691 3421 66 MP
 PP
 /c13 { 0.000000 0.577255 0.800000 sr} bdef
 c13
--5014 0 0 2206 80 -4 80 -44 79 -49 80 -30 79 -6 80 -26 
-80 -21 79 -39 80 19 79 -27 80 -49 80 -7 79 -41 80 2 
-79 -28 80 -17 79 -26 80 -18 80 -27 79 -8 80 -24 79 -8 
-80 -19 80 -22 79 -8 80 -23 79 -13 80 -21 80 -18 79 -17 
-80 -8 79 -6 80 -19 79 -6 80 -6 80 -2 79 -5 80 1 
-79 1 80 -6 80 -4 79 -2 80 -2 79 -2 80 -2 80 -2 
-79 0 80 5 79 -8 80 -1 79 0 80 -2 80 2 79 -2 
-80 -1 79 -1 80 1 80 0 79 -3 80 0 79 0 80 -2 
-79 -1 0 -1504 627 3100 67 MP stroke
+-5530 0 0 1421 88 20 88 -48 88 10 88 16 87 -17 88 -14 
+88 1 88 -6 87 2 88 -9 88 9 88 -21 88 -2 87 0 
+88 -6 88 -6 88 -2 87 -6 88 13 88 -26 88 8 88 -2 
+87 -10 88 -8 88 -5 88 -5 87 -8 88 -8 88 4 88 -12 
+88 -7 87 4 88 -8 88 2 88 1 87 -1 88 -1 88 1 
+88 2 88 -8 87 13 88 -5 88 3 88 -8 87 5 88 -6 
+88 0 88 -1 88 -2 87 -2 88 1 88 2 88 0 87 -1 
+88 0 88 -4 88 3 88 0 87 1 88 -3 88 2 88 -1 
+87 1 0 -1266 691 3421 67 MP stroke
 /c14 { 1.000000 0.929412 0.000000 sr} bdef
 c14
-0 564 80 -25 80 -6 79 -1 80 -12 79 -5 80 -5 80 5 
-79 -12 80 0 79 9 80 -22 80 -6 79 -9 80 3 79 -1 
-80 -5 79 -6 80 -5 80 -4 79 -7 80 -3 79 -2 80 2 
-80 -8 79 -1 80 -6 79 -3 80 -4 80 -3 79 -6 80 2 
-79 -5 80 -4 79 -1 80 -3 80 0 79 -3 80 1 79 0 
-80 -3 80 -1 79 0 80 -1 79 -1 80 0 80 -1 79 1 
-80 0 79 -1 80 -1 79 0 80 -1 80 0 79 0 80 0 
-79 -1 80 0 80 0 79 0 80 0 79 0 80 0 79 -1 
-0 -392 627 3100 66 MP
+0 28 88 40 88 -46 88 5 88 8 87 -13 88 1 88 3 
+88 -2 87 6 88 -8 88 13 88 -16 88 1 87 -1 88 1 
+88 -1 88 1 87 -4 88 8 88 -6 88 0 88 1 87 0 
+88 -2 88 -1 88 0 87 -2 88 0 88 -1 88 0 88 -1 
+87 1 88 -1 88 0 88 -1 87 0 88 -1 88 1 88 0 
+88 -1 87 0 88 -1 88 1 88 -1 87 1 88 -1 88 0 
+88 0 88 -1 87 0 88 0 88 0 88 0 87 0 88 0 
+88 -1 88 1 88 -1 87 0 88 0 88 1 88 -1 87 2 
+0 -9 691 3421 66 MP
 PP
 /c15 { 0.800000 0.743529 0.000000 sr} bdef
 c15
--5014 0 0 564 80 -25 80 -6 79 -1 80 -12 79 -5 80 -5 
-80 5 79 -12 80 0 79 9 80 -22 80 -6 79 -9 80 3 
-79 -1 80 -5 79 -6 80 -5 80 -4 79 -7 80 -3 79 -2 
-80 2 80 -8 79 -1 80 -6 79 -3 80 -4 80 -3 79 -6 
-80 2 79 -5 80 -4 79 -1 80 -3 80 0 79 -3 80 1 
-79 0 80 -3 80 -1 79 0 80 -1 79 -1 80 0 80 -1 
-79 1 80 0 79 -1 80 -1 79 0 80 -1 80 0 79 0 
-80 0 79 -1 80 0 80 0 79 0 80 0 79 0 80 0 
-79 -1 0 -392 627 3100 67 MP stroke
-/c16 { 0.984314 0.000000 1.000000 sr} bdef
-c16
-0 118 80 -16 80 -4 79 -2 80 -8 79 -1 80 -4 80 7 
-79 -12 80 0 79 9 80 -21 80 -3 79 -7 80 3 79 -1 
-80 -3 79 -5 80 -2 80 -4 79 -6 80 -2 79 -1 80 4 
-80 -6 79 0 80 -2 79 -4 80 -1 80 -1 79 -4 80 4 
-79 -5 80 -1 79 -1 80 -3 80 0 79 -3 80 1 79 -1 
-80 -1 80 -1 79 -1 80 -1 79 -1 80 0 80 0 79 0 
-80 -1 79 0 80 -1 79 0 80 0 80 -1 79 0 80 0 
-79 0 80 0 80 0 79 0 80 0 79 0 80 0 79 0 
-0 -4 627 3100 66 MP
-PP
-/c17 { 0.787451 0.000000 0.800000 sr} bdef
-c17
--5014 0 0 118 80 -16 80 -4 79 -2 80 -8 79 -1 80 -4 
-80 7 79 -12 80 0 79 9 80 -21 80 -3 79 -7 80 3 
-79 -1 80 -3 79 -5 80 -2 80 -4 79 -6 80 -2 79 -1 
-80 4 80 -6 79 0 80 -2 79 -4 80 -1 80 -1 79 -4 
-80 4 79 -5 80 -1 79 -1 80 -3 80 0 79 -3 80 1 
-79 -1 80 -1 80 -1 79 -1 80 -1 79 -1 80 0 80 0 
-79 0 80 -1 79 0 80 -1 79 0 80 0 80 -1 79 0 
-80 0 79 0 80 0 80 0 79 0 80 0 79 0 80 0 
-79 0 0 -4 627 3100 67 MP stroke
+-5530 0 0 28 88 40 88 -46 88 5 88 8 87 -13 88 1 
+88 3 88 -2 87 6 88 -8 88 13 88 -16 88 1 87 -1 
+88 1 88 -1 88 1 87 -4 88 8 88 -6 88 0 88 1 
+87 0 88 -2 88 -1 88 0 87 -2 88 0 88 -1 88 0 
+88 -1 87 1 88 -1 88 0 88 -1 87 0 88 -1 88 1 
+88 0 88 -1 87 0 88 -1 88 1 88 -1 87 1 88 -1 
+88 0 88 0 88 -1 87 0 88 0 88 0 88 0 87 0 
+88 0 88 -1 88 1 88 -1 87 0 88 0 88 1 88 -1 
+87 2 0 -9 691 3421 67 MP stroke
 gr
 
-c17
+c15
 0 sg
-2906 3388 mt 
+3228 3709 mt 
 (nr. cores) s
- 310 1753 mt  -90 rotate
+ 441 1931 mt  -90 rotate
 (s) s
 90 rotate
-2720  249 mt 
+3042  285 mt 
 (Total task times) s
- 610 3143 mt 
+ 674 3464 mt 
 ( ) s
-5625  386 mt 
+6205  422 mt 
 ( ) s
 1 sg
-0 772 1341 0 0 -772 686 1176 4 MP
+0 626 1341 0 0 -626 750 3362 4 MP
 PP
--1341 0 0 772 1341 0 0 -772 686 1176 5 MP stroke
+-1341 0 0 626 1341 0 0 -626 750 3362 5 MP stroke
 4 w
 DO
 SO
 6 w
 0 sg
- 686 1176 mt 2027 1176 L
- 686  404 mt 2027  404 L
- 686 1176 mt  686  404 L
-2027 1176 mt 2027  404 L
- 686 1176 mt 2027 1176 L
- 686 1176 mt  686  404 L
- 686 1176 mt 2027 1176 L
- 686  404 mt 2027  404 L
- 686 1176 mt  686  404 L
-2027 1176 mt 2027  404 L
-1148  536 mt 
-(tCOM) s
-gs 686 404 1342 773 rc
+ 750 3362 mt 2091 3362 L
+ 750 2736 mt 2091 2736 L
+ 750 3362 mt  750 2736 L
+2091 3362 mt 2091 2736 L
+ 750 3362 mt 2091 3362 L
+ 750 3362 mt  750 2736 L
+ 750 3362 mt 2091 3362 L
+ 750 2736 mt 2091 2736 L
+ 750 3362 mt  750 2736 L
+2091 3362 mt 2091 2736 L
+1212 2868 mt 
+(tSELF) s
+gs 750 2736 1342 627 rc
 c8
-0 110 355 0 0 -110 757 548 4 MP
+0 111 355 0 0 -111 821 2881 4 MP
 PP
 c9
--355 0 0 110 355 0 0 -110 757 548 5 MP stroke
+-355 0 0 111 355 0 0 -111 821 2881 5 MP stroke
 gr
 
 c9
 0 sg
-1148  684 mt 
-(tPAIR_PC) s
-gs 686 404 1342 773 rc
+1212 3017 mt 
+(tPAIR_PP) s
+gs 750 2736 1342 627 rc
 c10
-0 111 355 0 0 -111 757 697 4 MP
+0 111 355 0 0 -111 821 3030 4 MP
 PP
 c11
--355 0 0 111 355 0 0 -111 757 697 5 MP stroke
+-355 0 0 111 355 0 0 -111 821 3030 5 MP stroke
 gr
 
 c11
 0 sg
-1148  833 mt 
-(tPAIR_PP) s
-gs 686 404 1342 773 rc
+1212 3166 mt 
+(tPAIR_PC) s
+gs 750 2736 1342 627 rc
 c12
-0 111 355 0 0 -111 757 845 4 MP
+0 111 355 0 0 -111 821 3178 4 MP
 PP
 c13
--355 0 0 111 355 0 0 -111 757 845 5 MP stroke
+-355 0 0 111 355 0 0 -111 821 3178 5 MP stroke
 gr
 
 c13
 0 sg
-1148  981 mt 
-(tSELF) s
-gs 686 404 1342 773 rc
+1212 3315 mt 
+(qsched_gettask) s
+gs 750 2736 1342 627 rc
 c14
-0 111 355 0 0 -111 757 993 4 MP
+0 111 355 0 0 -111 821 3327 4 MP
 PP
 c15
--355 0 0 111 355 0 0 -111 757 993 5 MP stroke
+-355 0 0 111 355 0 0 -111 821 3327 5 MP stroke
 gr
 
 c15
-0 sg
-1148 1129 mt 
-(qsched_gettask) s
-gs 686 404 1342 773 rc
-c16
-0 110 355 0 0 -110 757 1141 4 MP
-PP
-c17
--355 0 0 110 355 0 0 -110 757 1141 5 MP stroke
-gr
-
-c17
 
 end %%Color Dict
 
diff --git a/paper/figures/BH_times.pdf b/paper/figures/BH_times.pdf
index 1eaf65e17544c0109275e5e9c13cf0d73d4d3b60..f3c6c67c1b14bbbeb6c716afe86db4cda50b7aa0 100644
GIT binary patch
delta 6070
zcmaFkI@x7{N4<By%yz+s_n)<YWk_FWIr`}H3yE!l3hbV{9s1f7y=PnOHdE1^uz$YN
zYsa$hZ`P$LC|L67Bu{e<6Wu-Q>&J_KcI;5rS@&0c|9d&U`pVhUcb{+XZ{Ki4^~x-<
z5=FiF_w@fq{IfVvw0-@L0tfki*1wOuZJo5dJ=Vz>>ewYIFq&G`*Zg=VF#Z38#``b-
z&o7tapM2!8VBt>tmRnmsdva#qegEc;d>-GsC4cw6J1hS6(X#;W7h4xk^%B@=TD^Di
z3P=9uO7`#NrtQBM<l!xRr_Q2aO5)0Y5wq=7g4F-sZa-}PVBg-qe?L5a`|vEI(UFtU
z`sdc|yTZF<OVPu2Zh0rGWj2+8^(R&PY|OMPpYpUDx5PvlEH~(WB9zWCFQo9Pj?XzQ
z)A=@AAGzjv*&LfX*<wzMh)n32!`>>>cW`Z#NshD+oHZ}Q-pg3#vWe39s_@(wW_K&T
zY}|dTx~uNBr|R?yu29>bbC=J#W$|IM`qY?5n#%vbDQ^7CdhV;EdCkfvLh+{j@tO7S
zPq+IVPA@vz<ZaW~zIgG&i#AjDE)S@>=eN$KNKES&N6xiJ)7+kE{9da(G3JRzXxSEd
z;eg=Z$z>{&x@Aglq?K)x7rD2)*LZ5oqcg!=vp4@;p>XV6@*;8lqRWwom6^UdA6kBC
z`L2_bJ@ksE9Wp%rmgQ618y<tgQ<t{H{}z!hjH)-h@TjTa?W~*r<>!5O3dkOp)xMoQ
z$?WxOXNNDgtxB!FuY@9kD-VRsoi$m~Mt$b~(ESPCt{WXbH*XW?HoNbfv-Y6tJT1jj
z8SD<%vv=-(5c}Q4d()~7?gtJ`l=N--zE{{Ys^wPp3fHH36Ra<0p1-fExxp_?xptvK
zai+G|ymZI=^=4C8?g+Xvh2&^0{rTlwp@PZoJ=!*F9jEzagv>f0_9f0lB28|tmWRA;
z8Yi3f3oGVHQ9b)u^*!rr*4&DVo9^$a6qsW3qeq7GeaLEu{ucMj5~-#&PXcFO(ePTi
zH?8Ev#1C1bFOLRo{51K76l<y1g2IzhFG8E<H8(mw>b`OH<jQ&%0q1883;4u(?#w6(
zlT}Yxy2#5UExPu-yPr%y!=;Uf{GT+xKe}%Zr{f{tm6w<uRT869TA2k)mau-1=?HjY
z*;Kw}$wCgh?x3qv&Di+dOSCxW9lm%kUOQ})fFqM&(xh**j%;)3`n5{4-%@Df^UxDZ
z+Z7j;ZBe;+;lPbqw%63l>lrQ|Yub|OGQCg6{m6=zIor>_GhKILr_%GTIod_%oX?$f
zZci>T-Ol^n`?ZYJuU|#1Rw|NzpR(q6-Q3~K`f|>qc9qgzx!{0LGa61B=V;WpnTyyR
zUiGOx=$K~Bmwd(ZS0YX%%T2Wj7FOe*8L)<<O09E2yGmg}`=oomcNThW)wol?kgc$Z
zPgK;I*DB=7m6Uf5w~Ep$0^S8kEAmcGza;pjN6cy7HeX>4jv9}oEg${nd$EgJhL&}H
zTq*4&SEXE-z`iLtL%Y<2A^TN8i-|L<%@+IM43iH6@BVPvD6C_v=va`qh%aTP7K_z{
zt<$+=1<H6{2po59pXt1Bi)-?^6=J^iLK#*ZWgLfAT|B`o!^q4(^|6br#PVh**;!o$
zuCf}_-aE}**%{EjOnqrbK>IO~-*4|M{AJ<D?se0Fy~}2XQTwchw9?~zl6Ml=EhN=X
zIF#CK@zX20W4Oa-eYK?a+~?vJ;n!j!i&M`|HGRJ6*_U+D@-z2R-M7U>JnT8TDu`W|
zt=>yE`|`%-M)?yfn*U~;nUK7;*HTUJ#e#MIyjD4fIu5%Y=6&^PYNv4*muzvug^le7
zuR44k`P#NP@|{|^Uhp`}A(<<8qul#?`Z+Bn!cS~`HrHa?gYZW;oFxiF4mLDfeVJl$
zWAlXq<5yG7B}{)#HDB!eyq6`}iSHFl!ikM_8ifY+x6Ha0HfL^LujDyrVsmA;%#~OT
zW%ko-mMg3SocUfYy0=1DB)4mBf<wTYgu8E6D>PV%y<<74a?G!Rx2)-1B#$-Ylr~xG
zgZ(WpFB&v1RR3}I8P_2(+r;*H8=U)dAM@Bcy6bLE&v`9k@AxcgvHuA+>4W|kwy*rb
zS<|!V4d>Of59&F8p4=N6{Zt@BNjER!bLQ(g&%-Ul@5NLWKRr9uT>QhcD_+ZG6~g0#
zHTCN@XRYsg`+~8kSGct1>TQO<3_H*DJe)LFB--0j>)qC}pq#B`Yphj@)?~+S48Ef{
zF*wGu;)(H{z}4wHqSmVKSnO(laB7zAp{<K#9)$hP%V*!=tdzc^e$^uP9g7>~9`be0
zdlXiyU(;nRYPtQywJAS>_onQ-QhY7D(RkkOhs&493;9-+%zC2d$GUUhrQ+-UlKnM{
zv~I3j`tQz*rasG)Up$p&_MJPXn!c+tr?b!R{?4>r787*lzxusa-282d+uSsZ@a!_>
zj3=tQ1I^hd-R8IzdG_ta$g{ciEWGjObM3Bw3(lJzxL4PBk5`s*1CNzwZt%oA&n%Do
zpX_PcuioeLW_Ey@SgUxy&pORo-<R25|L-sRvhwGzv%%Lx&+nY<xwx3KMt5^;>CeZP
z3oE}rU;cgm?cV8O|GWNO)Zen(;H~xgdnaD;p6SrH)tqy$V)x(AAFuy@`tkbt|8a8l
z|Gyr%7RSgtudMlF=<cY?>$(4y{Yc9UZDewa&4^!dqObF3n1(ISvohh3Z8{g)gTKh!
z6)w+NevE%_$d3rqFP9gGI^Mp!e#;xPx2G=oJw4WAzoz%T&CT}NYp05v%>Ph%>&yQ|
zyPxxHog=n0;A_R_$M@@_?yr1h`yxB)L1_J(;)BBV*H<zXag`hS75k;m)!!kzaqEYK
zNlml1&n#Q>deXLi_g~g;ZCRqR)%l{5c#?d4{r~OT_wT8z_1m&dK6UH*mHyMtyS#dm
zJ}t7^MU(qXRmiga!t-VPt>TT1wkU7Ay<BLf{JE|(&kVwUOTMa_TC8QYygz-Lm|IKI
z#mr?#Q)4e(`)+OjcfF);SF_5U<LBT1`}uEs{JVShW@__iSAJd=@VnddT3P&r^3Pl)
zYwZ__S_M?)ywRVM?~pCqcVYJ7dPX0flSd|><&<JJGBTU|ic_22)WAT&*uZqN3|A5(
zTeydxyNmPW7Vds#Q&Y3aB0Q$71_}lW29tw$&ch_td6$a@=m+Ts>xbwk>L=@`=%?zZ
zW~OJ9On%6_tlq%RuDGNqH8Gc~VoqonZ-h^#wB2!&biUbZX4*QP;rZzu80evOasR?8
zo1Ut#49r}1X?;}9iC-^u%ht~S5x~`YS9ju?t`q;gqF!dFXc?zEPvgG-ea_B%g|+vs
zZ|;A;>s;x&&+|U-d;fXQ_gee!#Tln^7+f!ZQLtaC<vdeNUN%*#{^rLp6Z<R%`=|+h
z!o0hABM)7i^613pgC}Ad&YbOXpQ$f&`1Ha63zlp3ew-Oqwf`Re^gJ1<`Eg@m<|ogE
z2fcH1a^L=|di>(iBc=GcUyqCLoNi=lXBKGJXp^E5>UlCNHEGuB8oQZmgO0kNP7aMc
zS-A4kiWw5AJ(-aaQ@my>eDACeKdP>-o_a$4?DmQN#RUa(obt|fKf1d5a`02dz|NIL
ztu_&ov)6Tb{oFrY#I^UkkI$_A=d6#ao1V4z5|mxc)78t}#~(RqL6CoMNx>YmyC*B#
zYQ$W7molwX$dVED@m=7wqVtN7)|6R3XBRIEh?`>m)Y&qqZi>C>T&@LkG}65s>vfli
z1v;<Tc_qNh$8&|gMxT^hWRQtz(<}#vr4m_uQ+;EX9=|;MW!A654Hucq_;%PjXrB<0
z5#3|JZJ=%bTj7r8p2KHSrWsWU>K2LV3QX<N>y+DYZH;-fS;3zJ9~#BkdgV<r10?4-
zrirmthp-4r-CH=}nXqDK_EFD6-+At(2h?+Kv~1?KTh+SXFn5AV%X<@<dj}dUOE`6Z
z{943Q=i9ww=h?l&W#tiGRkMF8`CUrWdDWtIv0iG{eA6&j?Il0<%kGI;!ksZgVd|G%
z3k$w>Rj!G130uDPV_9y=PQF*AOcn>H7gs#mvhfCY^~>W;ygqM!G87-Y|I&8b)TcX(
z^`-87tT(Vp**N>}l?P@M8h*4b3r|aon7r)i?=2<1>kk;rbdOQ8xS72{c#~ss$il{d
zpOe=L%C&5$Ji4Pjj<;K0b-&Al=6idr_!h3woh-ahwa$5wRYBq&>7<Vp)d`9WOkWk6
z47aaKSDia;u9xK+D}hs!LJE@v&s_d6*|f0r(PXO~w;ukizY+AQ<@~|UIf}P0N2|Qt
zEhk)Z>o}LU>_&m}hu@t)*0g2myC=O~l6K06gn8D*eCG|<IrgkOcKL1nDlRdDAAR4#
zXL45RzPWbDZS9Wb<y!Oe&phYWRkhJ+(Cd?5Y}(h@yQg{D#1iSx_N#t6eL5oj+)(U8
zkHh{D{W^~Y+ozP+nmnxkccJAsr(l+CSoOX)Pc{nQzjr2iw~O@W?N4*v)-2H$S?d?^
z?ASh)6U>RfpW7$r{ZW?NbM?`7m3cAQcYXxkJst7E+CH!(l0CYV$*y7hgQELC?;UC8
zj1emqnH;++=|S;UpUwZC9ec#HL`G0>W7$2g)Po;+UM@QvFMluYpkMm82M6nYyAw^4
z5-Xnn-9GC?_cisDb;oP|&#aIM?OCz2V%bZ_%14uGR<h3V%zmhD-pPN^?2X%!FJj*&
z8CxFS5m_;3`g?shOX09}`{E;J{P$hCC2~vU^JRC|3rO!yt#9S|U@REf*Toap`en8_
z6NmANotpAj^(7`BnYA~%qTQ@;Dj(O0b@kJKY~Fh3TCDYjvLkABr9YPNyz8i{eQof3
zp+|q`<Yj94f$yVEl^Ipn+l4Q4%*hT7+MyHM^2o^S$MXk{(woXua-yazit4M0JXy8-
z*nxWUYvS>{Rj0;q{r;Bn%5=5z3Wfhy;>7$J;`vmcrYv7FF>}?AtMRT8tQzO9#IM(Q
zt2g0gJ-^)D;HZR4BA29GS|61ia<Et^VB>jfQhPAx>4z;(^>Y4j|2Jm&!%}hj?T$@9
zf1lZOBg*xr&7lJl)j4iUo?TOJ-)Qi~Q@dtkyxHWN7R8}c#FO4m-*V`ALZ$ELJv*zu
z?)hsZEH+Ekb&nJCyZXrmX7iJ|qOG~78x($3TzW6%e&FSLgWlMU+xadVxT&42YkB1t
zyX*Wf8?lEuc3nR26usoS*#ECg>9+Qt|D8R9dB0jgmhk-NSKY1}D{0r+=R6Adece=A
z>+$@Zaa$F4`_FLNG_U))ojkMf!99yPXDCf7opt_GguO^x*ff>U^m+HntiEf_zJKKH
z+ufz>g*V=+-gj>Ig?06JVmJA_l{#|&-ty&h+>3X@4NUKfCLF!vFugD2UqtP{8>wF!
zS}$(C{lP+WUs{l1ek$8<1)nRi`_Ei8&ADk3S#N26I6!#Ik~ybK3Km{od^Y49pG%S4
zl4<YVY9pVex4K&-iS4!)ua4)L9_nVcW_O>|MgOJKrEjJPe!8_wOW81XYrWQM?<FoD
ze_!rfXFsPn<F{lP+vfbBXaOEasV@(X@Q1E>a`NY_!@UM6D)J6y$6kvU*?yI~A;i!7
zb;i35OYWbLGP%2KPJrP4AA%Jkm(I!_@nJpNGQIy*-~HY%S5~f-=31(H^LOwCsc(}P
zz7oBDyn3Baw18skWu>GRmKpQ6Y;f0pSO1nZ`TH9?@008iEc_NX+-w#vR=O29O}Zhh
zPCRmf9OI!RwRI`CPsY~nOxU-t<{bZ;C(Ymfd=IyBYpOWsoTGd6?%xw9&nECM>0Y<!
zvgOg4>PB4G7I|E=G)fcFye{&{-gV}Ld7kEFTnR>udDAwoXf|ANHm&b%3WxuZ>G!ja
zm{$F-kE>Yw{q5E%TR!gn<ESUTCfDkNj1tRoPrZsCTTUyk4@!Bk-$&!+Khv#Qz8^e9
zCJV0h@;?)^(URk=<HF;QR!utp@A2_H-bcJY{oztNz36p~b+Tha$&2ZSPCwl`HT~V<
z>J{os3NLBySx~lPNp6*=Q|93l$G>OCGgsT6(euBRU(V)M?|pb-9OIwk2}d3KuKl>c
zx~+E0tM3*}HED`EI!p4)I1+doYo~F34?T0a?87n9L*+bi-0MBkKZu`_oYNHC^5o0>
zJIgv{?)K@-_!*dM_4)Dst%p-Cr)s`@{l3HB_uLxMzpsDIUAEg^>+g~ukL3?rKQ;Wf
zOwm5-i_(`>z2zZp0WBf*R|P^JdF$*xFTFNmd(c6<ci*>v-|}uRgVVj@YuDcUUTfR?
z>P5*u{{!2T4Ab9mKmYxUcYW*ij2GRu0T-1Uf}Aa$_cIA!cUcoLBdvXdYIpIijVx~x
zHcivWSN6DEANy}}iEnJcO8KO_XX4_v9X(iav`f=0c>4Y}1CHH)KBewA;eA+dB6EfN
zfx`UrlAph}eK@Kly3E-8LEz0bhpwEO*tb4wapiP5#{JR9CE1OB=gnJtA-1wO_ecKq
zbz1~B<t>ftw-PVSdl_i|q~niJ5>xP$*~;Z-)4!g1H!J@%pO|?3pO-1NNw@Rat6SE@
zF6)?jQ~&7Xv~{0OALLW62>pN3B;XF0^sV|Md)6FZ-u@@&fYpTp_8DC^iSe;ddNREa
zy~&+^eb4VGw^@E4{+YT9ovNMv_?O4ynID|km8&1UN}F<0C12XVF8=#zj}0^KHm%*T
zwOxAKUCpb;mEzy0$XLWhM8+1$Zk%;m`&nE1%H(~MmgWV%jhJ!!{Z-e5&n@91moE4v
zWU!a>?XG`)@bBTt8~?0g5X>`W<6hqN;FU1na)Sv>-&^JjUCTTW=l*#e%e0h3t%VH2
zX)<axr(#z8eaO-I<x|;#8y_9HbMH<M-<CdM55L~M`5{~0)x1y+wLW?K*V*bBJfBvs
z|FGi23*T2)HwASFIGueTapz)*i0$PISML@~e6w%v2_5N({`UGAPI)JyC6{)5Ia%T~
z!}-VN#d4ut#Rtnnmn>`yy)QlCV8QV?osV&o_JnAjW<K8*o_{g6#PHb!eeayRGheUb
z-!xlH!r*pl;^pGMZ>_B)1Me@NkuLAN$}Q%i@CD|bPu!lIjsD2IbK0v(MU!81%`thx
zpZ=o6T<3#+XYH0Ctx9uiwFIjZxhitsZV5h7sK3iRC*)H5JeT`LD^m=)*>_x<<stvS
z!^8i4$18T<tylX~cbxP2<X3N<a_!6k0r%$zq-ABdOMfxy-jcNMM97k^Bsb#~uZ_=|
zKYJGY`wV;VmH!OtJ9XM8UzK!bG~X;KWy`3NWMXV!kY-|_n`mihu4`zRnx<=DU|^tY
zY-D0&VPIsOWMq~$xk}ob$<Sc3wwx+)>IG!%1Wa@d4RwtSLX3>8j0~*|jVH&+Xk!Y_
zl=0^`)-%vEH8xVv2r@D-G)bKNT}Ia0&{)qv*VtS)JvA@2C^K0>*~~;YG^sSNq*Ni;
zH$cHRKTjbzwLrnhNWsX^%E-dX*g_#R#90Akz+^vJKjNHuK-Qf&g~WP%bBWv*Mi)Z^
zO)h=sqSVBa%=|o;#FA7E7b}p%3=NG8jEsy74UM%84Al(`)HS*Eee+YWs+gRkU?B(#
zm>6it#84bGJc=RqrY438peQy_$W!0~GYrfv&CSroj7%(yFvN_F4JXf6RIN8Q#4y9i
z%mC92a|3g9GmH%lOwh%Q%uF!U8JU@5h#8we)Cm|MIo`~~&}ee7l1;3kk-3Sfg`=yh
zxr>Fdn~|ZjiHnn&tEGjhtBaAdfs3V`4M7#LTy}O`#U+VFB^5=fX<QaYmIhp^s;>TS
FTmT5X=kEXj

delta 6276
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
KRn^tsjSBz`bxc73

diff --git a/paper/paper.tex b/paper/paper.tex
index ce53b3f..3abb632 100644
--- a/paper/paper.tex
+++ b/paper/paper.tex
@@ -1053,10 +1053,11 @@ it is in the same cell.
 This operation is performed for each particle, starting
 with the root-level cell containing all the particles.
 
-The particle data is sorted hierarchically, following the
-octree structure.
+In our implementation, the particle data is sorted hierarchically,
+following the octree structure.
 Unlike in many codes, where the leaves store an array of
-pointers to the underlying particles, the cells, at all
+pointers to the underlying particles, which are not necessarily
+contiguous in memory, the cells, at all
 levels, store only a pointer to the first of their own particles,
 and the total number of particles.
 The current approach, illustrated in \fig{CellParts} is not
@@ -1075,16 +1076,16 @@ is in \oh{N\log N}.
     \label{fig:CellParts}
 \end{figure}
 
-The task-based implementation will consist of three
+The task-based implementation consists of three
 types of tasks:
 \begin{itemize}
-    \item {\em Self}-interactions in which all particles
+    \item {\em Self}-interactions, in which all particles
         in a single cell interact with all other particles in the
         same cell,
-    \item {\em Particle-particle} pair interactions in which
+    \item {\em Particle-particle} pair interactions, in which
         all particles in a cell interact with all
         particles in another cell,
-    \item {\em Particle-cell} pair interactions in which
+    \item {\em Particle-cell} pair interactions, in which
         all particles in one cell are interacted with the
         center of mass of all other cells in the tree.
 \end{itemize}
@@ -1093,54 +1094,59 @@ These tasks can be created recursively over the cell hierarchy
 as shown in the function {\tt make\_tasks} in \fig{MakeTasks}.
 The function is called on the root cell with the root cell
 and {\tt NULL} as its two cell parameters.
-The function recurses as follows:
+The function recurses as follows (line numbers refer to \fig{MakeTasks}:
 \begin{itemize}
-    \item If called with a single (line~6), split (line~7) cell,
-        recurse over all the cell's sub-cells (line~9), and all
-        pairs of the cell's sub-cells (line~11),
+    \item If called with a single, split cell (lines~6--7),
+        recurse over all the cell's sub-cells, and all
+        pairs of the cell's sub-cells (lines~8--11),
     \item If called with a single unsplit cell (line~13),
-        create a self-interaction task as well as a particle-cell
-        task on that cell (line~14),
-    \item If called with two non-neighbouring cells (line~21),
-        do nothing, as these interactions
-        will be computed by the particle-cell task,
+        create a self-interaction task (line~14) as well as a particle-cell
+        task on that cell (line~18),
     \item If called with two neighbouring cells and both cells
-        are split (line~33),
+        are split (line~22),
         recurse over all pairs of sub-cells spanning
-        both cells (line~37), and
+        both cells (lines~24--26), and
     \item If called with two neighbouring cells
         and one of the cells are not split, create
-        a particle-particle pair task over both cells.
+        a particle-particle pair task over both cells (line~29),
+    \item If called with two non-neighbouring cells,
+        do nothing, as these interactions
+        will be computed by the particle-cell task.
 \end{itemize}
 \noindent where every interaction task additionally locks
-the cells on which it operates (lines~16, 25, 30, and 42--43).
+the cells on which it operates (lines~17, 20, and 32--33).
 In order to prevent generating
 a large number of very small tasks, the task generation only recurses
 if the cells contain more than a minimum number $n_\mathsf{task}$
-of threads each (lines~7 and~34).
+of threads each (lines~7 and~23).
 
-The particle-particle pair interaction tasks are implemented
+As shown in \fig{BHTasks}, the particle-self and particle-particle pair
+interaction tasks are implemented
 by computing the interactions between all particle pairs spanning
-both cells in a double for-loop.
+both cells in a double for-loop (lines~9--11 and~22-24 therein).
+Some extra logic (lines~2--7 and~15--20) is added to deal with
+split cells that did not contain enough particles to warrant the
+generation of finer tasks.
 The particle-cell interactions for each leaf node are computed by
-traversing the tree recursively starting from the root node:
+traversing the tree recursively starting from the root node and:
 \begin{itemize}
   \item If called with a node that is a hierarchical parent of
     the leaf node, or with a node that is a direct neighbour of
     a hierarchical parent of the leaf node, recurse over the
-    node's sub-cells,
+    node's sub-cells (lines~29--32),
   \item Otherwise, compute the interaction between the leaf node's
-    center of mass and all the particles in the leaf node.
+    center of mass and all the particles in the leaf node (lines~33--35).
 \end{itemize}
 
 This task decomposition differs from the traditional tree-walk
 in the Barnes-Hut algorithm in that the particle-cell interactions
-are grouped per leaf, with each leaf doing its own tree walk.
+are grouped per leaf, with each leaf doing its own tree walk,
+as opposed to doing a tree walk for each individual particle.
 This approach was chosen to maximize the memory locality
 of the particle-cell calculation, as the particles in the leaf,
 which are traversed for each particle-cell interaction, are
 contiguous in memory, and are thus more likely to remain in the
-lowest-level cache.
+lowest-level cache during the entire tree-walk.
 
 This Barnes-Hut tree-code was used to approximate the gravitational
 N-Body problem for 1\,000\,000 particles with uniformly random coordinates
@@ -1148,10 +1154,9 @@ in $[0,1]^3$.
 The parameters $n_\mathsf{max}=100$ and $n_\mathsf{task}=5000$
 were used to generate the tasks.
 Using the above scheme generated 97\,553 tasks, of which
-512 self-interaction tasks, ??? particle-particle interaction
-task, and ??? particle-cell interaction tasks.
-A total of 141\,840 dependencies were generated, along with
-104\,392 locks on 37\,449 resources.
+512 self-interaction tasks, 5\,068 particle-particle interaction
+task, and 32\,768 particle-cell interaction tasks.
+A total of 43\,416 locks on 37\,449 resources were generated.
 
 For these tests, {\tt pthread}s parallelism was used and resource
 re-owning was switched off.
@@ -1171,39 +1176,47 @@ cases, an average of 51.3\,ms.
     \centerline{\epsfig{file=figures/BH_scaling.pdf,width=0.9\textwidth}}
     \caption{Strong scaling and parallel efficiency of the Barnes-Hut tree-code
         computed over 1\,000\,000 particles.
-        Solving the N-Body problem takes 3.3\,s, achieving 60\% parallel
+        Solving the N-Body problem takes 323\,ms, achieving 75\% parallel
         efficiency, over all 64 cores.
         }
     \label{fig:BHResults}
 \end{figure}
 
+\begin{figure}
+    \centerline{\epsfig{file=figures/tasks_bh_dynamic_64.pdf,width=0.9\textwidth}}
+    \caption{Task scheduling of the Barnes-Hut tree-code on 64 cores.
+      The red tasks correspond to particle self-interactions, the green
+      tasks to the particle-particle pair interactions, and the blue
+      tasks to the particle-cell interactions.}
+    \label{fig:BHTasksPlot}
+\end{figure}
+
 Unlike the QR decomposition, the results scale well only to
 32 cores, achieving 90\% parallel efficiency, and then
 level off for increasing numbers of cores.
 This, however, is not a problem of the task-based parallel
 algorithm, or of QuickSched, but of the memory bandwidth
 of the underlying hardware.
-\fig{BHTasks} shows the accumulated cost of each task type and of 
+\fig{BHTimes} shows the accumulated cost of each task type and of 
 QuickSched over the number of cores.
-At 64 cores, the scheduler overheads account for only 4.7\% of
+At 64 cores, the scheduler overheads account for only $\sim 1$\% of
 the total computational cost, whereas,
-as of 30 cores, the cost of both pair types grow by up to
-50\%.
+as of 32 cores, the cost of both pair types grow by up to
+40\%.
 This is most probably due to memory bandwidth restrictions, as
-the cost of the self interaction tasks, which do twice as much
-computation per memory access, only grow by up to 15\%.
+the cost of the particle-cell interaction tasks, which do significantly more
+computation per memory access, only grow by up to 10\%.
 
 \begin{figure}
     \centerline{\epsfig{file=figures/BH_times.pdf,width=0.8\textwidth}}
     \caption{Accumulated cost of each task type and of the overheads
-        associated with {\tt qsched\_gettask}.
-        As of $\sim 30$ cores, the cost of both pair interaction task
-        types grow by up to 50\%.
-        The cost of the self interactions, which entail twice as much
-        computation per memory access, grow only by at most 15\%.
-        The scheduler overheads make up less than 5\% of the total
-        time.
-        }
+        associated with {\tt qsched\_gettask}, summed over all cores.
+        As of 32 cores, the cost of both pair interaction task
+        types grow by up to 40\%.
+        The cost of the particle-cell interactions, which entail significantly more
+        computation per memory access, grow only by at most 10\%.
+        The scheduler overheads, i.e.~{\tt qsched\_gettask},
+        make up less than 1\% of the total time.}
     \label{fig:BHTimes}
 \end{figure}
 
@@ -1248,6 +1261,10 @@ The QuickSched library itself is remarkably simple, consisting of
 less than 3\,000 lines of code, including comments.
 Both examples, which are distributed with QuickSched,
 require less than 1\,000 lines of code each.
+For a more complex, large-scale example of a task-based computation
+based on the same algorithms, we refer to \cite{ref:Gonnet2014},
+for which the scheduler was originally designed, and from
+which QuickSched was back-ported.
 
 In both examples, QuickSched performs extremely well, even
 on a large number of shared-memory cores.
@@ -1265,7 +1282,11 @@ The most obvious of which are the following:
 \begin{itemize}
     \item {\em Priorities}: The current implementation of
         QuickSched does not take the resource locks into
-        account when selecting tasks in the queues,
+        account when selecting tasks in the queues, e.g.~it
+        may be advantageous, in some settings, to avoid tasks
+        which are involved in too many potential conflicts
+        and would therefore restrict the maximum degree of
+        parallelism when scheduled.
     \item {\em Work-stealing}: During work-stealing, the
         queues are probed in a random order although
         the total relative cost of the tasks in the queue,
@@ -1284,10 +1305,7 @@ v\,3.0 and is available for download via
 
 % Acknowledgments
 \section*{Acknowledgments}
-The author would like to thank Sam Townsend for implementing the
-kernels in the task-based QR decomposition as part of his MSc Thesis
-at Durham University.
-The author also thanks Lydia Heck of the Institute for
+The authors would like to thank Lydia Heck of the Institute for
 Computational Cosmology at Durham University for providing access
 to, and expertise on, the COSMA cluster used in the performance
 evaluation.
@@ -1303,12 +1321,8 @@ This work was supported by a Durham University Seedcorn Grant.
 \appendix
 \section{User Interface}
 
-The algorithms, as described in the previous section, have
-all been implemented as part of the Open-Source C-language
-QuickSched library.\footnote{\url{http://sourceforge.net/projects/quicksched/}}
-This section describes the interface functions and how they
-are called, and the following section contains
-examples of how QuickSched can be used.
+This section describes the QuickSched interface functions and how they
+are called.
 
 As mentioned previously, the {\tt qsched} object is the main
 interface to the task scheduler.
@@ -1321,7 +1335,7 @@ and {\tt qsched\_res\_t} are used instead.
 
 The main functions for setting up the scheduler are:
 \begin{itemize}
-    \item {\tt void qsched\_init( struct qsched *s , int nr\_queues , int flags )} \\
+    \item {\tt void qsched\_init(struct qsched *s, int nr\_queues, int flags)} \\
         Initializes a {\tt qsched} object with the given number of queues.
         The {\tt flags} parameter can be set to any bitwise or combination
         of {\tt qsched\_flag\_none},
@@ -1330,18 +1344,18 @@ The main functions for setting up the scheduler are:
         This function must be called before any of the other
         functions are used.
         \vspace{1mm}
-    \item {\tt void qsched\_free( struct qsched *s )} \\
+    \item {\tt void qsched\_free(struct qsched *s)} \\
         Releases all the memory and other resources allocated by the
         given {\tt qsched} object.
         After this function has been called, the {\tt qsched} will
         need to be re-initialized for reuse.
         \vspace{1mm}
-    \item {\tt void qsched\_reset( struct qsched *s )} \\
+    \item {\tt void qsched\_reset(struct qsched *s)} \\
         Clears the tasks and resources in the given {\tt qsched},
         but does not release the allocated memory or change
         the number of queues.
         \vspace{1mm}
-    \item {\tt qsched\_task\_t qsched\_addtask( struct qsched *s , int type , unsigned int flags , void *data , int data\_size , int cost )} \\
+    \item {\tt qsched\_task\_t qsched\_addtask(struct qsched *s, int type, unsigned int flags, void *data, int data\_size, int cost)} \\
         Creates a new task within the given {\tt qsched} and returns
         its handle.
         The {\tt type} and {\tt data} field are copied into the {\tt qsched}
@@ -1352,7 +1366,7 @@ The main functions for setting up the scheduler are:
         e.g. they are used only to group or otherwise dependencies, and
         are not passed to the execution function in {\tt qsched\_run}.
         \vspace{1mm}
-    \item {\tt qsched\_res\_t qsched\_addres( struct qsched *s , int owner , qsched\_res\_t parent )} \\
+    \item {\tt qsched\_res\_t qsched\_addres(struct qsched *s, int owner, qsched\_res\_t parent)} \\
         Creates a new resource within the given {\tt qsched} and returns
         its handle.
         The owner field is the initial queue ID to which this resource
@@ -1361,24 +1375,24 @@ The main functions for setting up the scheduler are:
         the new resource or {\tt qsched\_res\_none} if the resource
         has no hierarchical parent.
         \vspace{1mm}
-    \item {\tt void qsched\_addlock( struct qsched *s , qsched\_task\_t t , qsched\_res\_t res )} \\
+    \item {\tt void qsched\_addlock(struct qsched *s, qsched\_task\_t t, qsched\_res\_t res)} \\
         Append the resource {\tt res} to the task {\tt t}'s list of
         locks.
         The task {\tt t} will then conflict with any other task that
         also locks the resource {\tt res}, its hierarchical parents, or
         any resource hierarchically below it.
         \vspace{1mm}
-    \item {\tt void qsched\_adduse( struct qsched *s , qsched\_task\_t t , qsched\_res\_t res )} \\
+    \item {\tt void qsched\_adduse(struct qsched *s, qsched\_task\_t t, qsched\_res\_t res)} \\
         Similar to {\tt qsched\_addlock}, yet the resource is only used and
         is not part of a conflict.
         This information is used when assigning tasks to specific queues.
         \vspace{1mm}
-    \item {\tt void qsched\_addunlock( struct qsched *s , qsched\_task\_t ta , qsched\_task\_t tb )} \\
+    \item {\tt void qsched\_addunlock(struct qsched *s, qsched\_task\_t ta, qsched\_task\_t tb)} \\
         Appends the task {\tt tb} to the list of tasks that the task {\tt ta}
         unlocks.
         The task {\tt tb} then depends on the task {\tt ta}.
         \vspace{1mm}
-    \item {\tt void qsched\_run( struct qsched *s , int nr\_threads , qsched\_funtype fun )} \\
+    \item {\tt void qsched\_run(struct qsched *s, int nr\_threads, qsched\_funtype fun)} \\
         Executes the tasks in the given {\tt qsched} using {\tt nr\_threads}
         threads via the execution function {\tt fun}, as described in the
         previous section.
@@ -1404,7 +1418,7 @@ any mechanism for yielding a thread if no tasks are available,
 i.e. the main loop in {\tt qsched\_gettask}, described in the
 previous section, will spin until a task becomes available.
 This may be a problem if other parts of the user application
-are running concurrently in the background.
+are running concurrently in the background outside of QuickSched.
 Calling {\tt qsched\_init} with the {\tt qsched\_flag\_yield}
 forces the use of {\tt pthreads} and uses conditional variables
 to wait for a new task to be enqueued if obtaining a task
@@ -1505,26 +1519,26 @@ The execution function for these tasks simply calls the appropriate
 kernels on the matrix tiles given by the task data:
 \begin{center}\begin{minipage}{0.9\textwidth}
     \begin{lstlisting}
-void exec_fun ( int type , void *data ) {
+void exec_fun(int type, void *data) {
   int *idata = (int *)data;
   int i = idata[0], j = idata[1], k = idata[2];
-  switch ( type ) {
+  switch (type) {
     case tDGEQRF:
-      DGEQRF( A[i,j] , ... );
+      DGEQRF(A[i, j], ...);
       break;
     case tDLARFT:
-      DLARFT( A[i,j] , A[i,i] , ... );
+      DLARFT(A[i, j], A[i, i], ...);
       break;
     case tDTSQRF:
-      DTSQRF( A[i,j] , A[j,j]... );
+      DTSQRF(A[i, j], A[j, j], ...);
       break;
     case tDSSRFT:
-      DSSRFT( A[i,j] , A[i,k] , A[k,j] , ... );
+      DSSRFT(A[i, j], A[i, k], A[k, j], ...);
       break;
     default:
-      error( "Unknown task type." );
-    }
+      error("Unknown task type.");
   }
+}
     \end{lstlisting}
 \end{minipage}\end{center}
 \noindent where {\tt A} is the matrix over which the QR
@@ -1576,16 +1590,17 @@ and ID, respectively.
 \begin{center}\begin{minipage}{0.9\textwidth}
     \begin{lstlisting}[basicstyle=\scriptsize\tt]
 void comp_self(struct cell *c) {
-  if (c->split)
+  if (c->split) {
     for (int j = 0; j < 8; j++) {
       comp_self(c->progeny[j]);
       for (int k = j + 1; k < 8; k++)
         comp_pair(c->progeny[j], c->progeny[k]);
     }
-  else
+  } else {
     for (int j = 0; j < c->count; j++)
       for (int k = j + 1; k < c->count; k++)
         interact c->parts[j] and c->parts[k].
+  }
 }
 
 void comp_pair(struct cell *ci, struct cell *cj) {
@@ -1621,19 +1636,19 @@ void comp_pair_cp(struct cell *leaf, struct cell *c) {
 \begin{figure}
 \begin{center}\begin{minipage}{0.9\textwidth}
     \begin{lstlisting}[basicstyle=\scriptsize\tt]
-enum { tSELF , tPAIR_PP , tPAIR_PC };
+enum { tSELF, tPAIR_PP, tPAIR_PC };
 void make_tasks(struct qsched *s, struct cell *ci, struct cell *cj) {
   int j, k;
   qsched_task_t tid;
   struct cell *data[2];
   if (cj == NULL) {
-    if (ci->split && ci->count > n_task)
+    if (ci->split && ci->count > n_task) {
       for (j = 0; j < 8; j++) {
         make_tasks(s, ci->progeny[j], NULL);
         for (k = j + 1; k < 8; k++)
           make_tasks(s, ci->progeny[j], ci->progeny[k]);
       }
-    else {
+    } else {
       tid = qsched_addtask(s, tSELF, qsched_flags_none, &ci,
                            sizeof(struct cell *),
                            ci->count * ci->count);
@@ -1643,21 +1658,17 @@ void make_tasks(struct qsched *s, struct cell *ci, struct cell *cj) {
       qsched_addlock(s, tid, ci->res);
     }
   } else if (ci->split && cj->split &&
-             ci->count * cj->count > n_task * n_task)
+             ci->count * cj->count > n_task * n_task) {
     for (j = 0; j < 8; j++)
       for (k = 0; k < 8; k++)
         make_tasks(s, ci->progeny[j], cj->progeny[k]);
-  else {
+  } else {
     data[0] = ci; data[1] = cj;
     tid = qsched_addtask(s, tPAIR_PP, qsched_flags_none, data,
                          sizeof(struct cell *) * 2,
                          ci->count * cj->count);
     qsched_addlock(s, tid, ci->res);
     qsched_addlock(s, tid, cj->res);
-    if (ci->split && cj->split) {
-      qsched_addunlock(s, ci->com, tid);
-      qsched_addunlock(s, cj->com, tid);
-    }
   }
 }
     \end{lstlisting}
@@ -1672,25 +1683,25 @@ straight-forward and shown in \fig{BHTasks}, and the
 execution function can be written as:
 \begin{center}\begin{minipage}{0.9\textwidth}
     \begin{lstlisting}
-void exec_fun ( int type , void *data ) {
+void exec_fun(int type, void *data) {
   struct cell **cells = (struct cell **)data;
-  switch ( type ) {
+  switch (type) {
     case tSELF:
-      comp_self( cells[0] );
+      comp_self(cells[0]);
       break;
     case tPAIR_PP:
-      comp_pair( cells[0] , cells[1] );
+      comp_pair(cells[0], cells[1]);
       break;
     case tPAIR_PC:
-      comp_pair_pc( cells[0] , root );
+      comp_pair_pc(cells[0], root);
       break;
     case tCOM:
-      comp_com( cells[0] );
+      comp_com(cells[0]);
       break;
     default:
-      error( "Unknown task type." );
-    }
+      error("Unknown task type.");
   }
+}
     \end{lstlisting}
 \end{minipage}\end{center}
 
-- 
GitLab