Wednesday, February 20, 2008

Parallel Extensions: Inside the task parallel library


URL (both low res and high res files can be used)
XMLFILE

InsideTPL_512kbs.wmv 197a5dc1-c6a1-4cfe-9bb3-7784742e8e04 -3.5415294 excellent -0.44631405 building 112 2.43043995 other side 3.9280522 universe 6.45968825 working same stuff 10.5230216 talked 12.8364479 parallel extension 16.58609755 released ctp 20.8999887 msdn download 23.42993425 plinq 27.93104995 task parallel library 36.0891599 pretty high level 39.744152 features library 42.1826214 too deep 45.0896588 series of interviews 48.1535862 dive into details 50.36932885 excellent 53.8709864 task parallel library 57.121398 features 58.78085375 plinq 60.6553799 other areas 64.7495227 developers 68.46602955 thinkers 73.2807994 platform team 78.8423266 task parallel library 81.90619395 performance 85.0331747 feedback 86.87661345 ctp 96.82180055 talked 110.02008735 Netherlands 112.98926875 research 116.5855726 work 118.0199955 erik 119.5865692 meijer 122.92548535 interesting 126.3345726 Haskell 128.7726837 predecessor 131.0858504 linq 133.30545585 working here 135.8672994 couldn’t help myself 139.0841225 nice abstractions 143.7091939 parallel programming c# 148.9942835 task parallel library 154.65151705 erik meijer 163.24507375 Haskell 165.808474 programming language 169.24588555 pretty big 172.46531865 plinq as well 180.43693995 first start off 182.52712135 reminder 184.43627895 dig in 186.9370205 best way 188.4651996 introduce 190.62362365 tpl 192.6553402 code samples 195.15630845 where what it does 198.43519395 couple of layers 202.40637535 parallel loops 206.5316134 lower level apis 211.6881463 dans probably good person 214.53258505 how 220.1256701 start simple example 231.06748985 really simple 236.22535835 we have some for loop 248.41480275 right here 254.25724155 independent of each other 257.7870647 computation 260.6021588 results 262.22662705 in array 267.44748075 pretty nice to parallel 270.7283821 multiple cores 273.4757143 pretty hard time 276.51029145 parallelizing loop 279.79352385 thread pool 282.88644335 sync them end 286.82489235 nicer way 291.0114808 what task parallel library 293.82346375 about 295.6980488 parallel for 301.3256418 write parallel.for 305.73399775 give bounds 308.07478235 iterate over 311.0450488 third argument 313.3263368 delegate 315.01483795 executed 317.10827215 each element 318.82555445 domain 322.01468715 c# 342.2043073 think nice 344.48672225 original code 346.8002903 exactly same 348.70834815 as before 351.14278805 c# compiler 353.64338665 free variables 356.11018715 polling method 359.67734585 original for loop 363.0828833 way we call it 365.9264445 close call at end 369.83363385 task parallel library 372.83122 automatically 374.5855091 in parallel 376.61774605 sequential 379.1161701 if only one core 381.58475175 dynamically 383.9628935 optimizes for 386.897042 environment 389.8982041 16 cores 392.5247733 heavy magic 396.99264065 actually 399.21515425 telling secret 401.93071545 work ceiling 404.0241021 algorithm 406.4316565 dynamically 409.02607375 workload 411.74781295 dig into 414.5879082 trade secrets 417.59108735 suppose example 419.8389694 computation 422.4354377 highly irregular 424.902042 compute1 426.7143708 quick 430.46727215 compute3 quick again 434.59057605 statically 437.09257715 distribute 439.52870185 core 1, 2, 3 443.56123925 so much longer than rest 447.12467465 everyone waiting 450.43731295 work ceiling 453.9057994 dynamically distribute 459.06271775 core 2 completely dedicated 464.59660775 dynamically change 467.783415 dedicated 469.6587461 desk machine 472.65974835 virus scanner 475.5365091 office is loading 481.84619165 all cores available 484.88083455 statically 487.37932545 impossible 489.9752393 work ceiling 492.72347625 dynamically 494.75676195 most of 497.0378731 processing power 500.9437767 parallel for 504.22480845 implementation is 507.06938325 pretty small 509.44920185 other abstractions 511.88102385 task api 514.2897801 spawns 517.696601 bunch of work 520.5720545 top of task 522.6635624 abstractions 525.41591615 waiting cancellation 529.8841962 tasks look like 532.57450795 fundamental 534.97936175 building blocks 543.5765987 basic task api 547.5754978 really 549.94847055 fundamentally 553.2947234 two abstractions 555.6691021 parallel 557.389559 replicable 561.04606805 builds on top 563.76673925 semantics 565.2636962 right 566.76249555 basic items 571.9547109 important 575.01920525 task interface 580.8000862 task{ 583.32937305 few methods 585.08278805 important 587.67198985 create 590.9548719 static method 595.7666894 static task 601.675144 creation method 604.7695352 give it work to do 608.3956066 delegate performs it 612.30014515 call it action 615.2694944 giving an action 618.2416894 task will be 622.64652955 potentially executed in parallel 627.42761345 really want results 630.242737 method 632.1492858 wait method 637.1192268 call wait 638.52243315 on tasks 641.3681123 between creation point 644.92876535 action be executed 648.6179388 potentially in parallel 651.6817211 why else 654.80550345 unless 657.43384925 only for 659.5582869 big computation 662.1821701 speed it up 664.6833096 not about fairness 667.7464762 asynchronous programming 671.49501475 exposing 674.46773025 speedup 677.52960095 do not guarantee 681.02816445 much more heavyweight 684.37330505 really smart 686.18591165 scheduling 688.43514065 go into little bit 693.18647965 I have really 696.06128235 nice example 699.2812302 Fibonacci function 704.000542 definitely illustrates problems 713.50233225 good point 716.47061795 one nice thing 720.0025227 c# 721.59674495 really simple 725.0971667 almost identical 727.93979145 for sequential 735.03583565 getting functional stuff 738.28582545 imperative 742.4743538 not pick on c++ 752.788025 closures 754.75586515 all this 758.69506465 turns out more verbose 761.94917695 delegates 765.8198549 inline lambda syntax 771.69650235 new lambda syntax 776.8538028 little more painful 779.9495454 doable 782.44708735 can we use for c++ 786.9158844 little more work 791.13624265 type more arguments 797.3559887 even use linq from c++ 802.13870185 plinq more attractive 805.73137535 shared pointers 810.29618255 tier 1 feature 815.32597395 Fibonacci example 818.4215499 one question 821.1095703 design perspective 823.63988665 doing this 825.42233455 library 828.36179825 not in virtual machine 831.5821962 other words 833.70639575 parallel for 836.86252385 keyword use 844.4256894 interesting 846.8632699 language 849.6779309 feature atomic 853.7720647 Haskell 856.6135091 implementation 859.95904995 always tradeoff 862.8967404 deep language 864.83858505 integration 867.02239345 new keywords 869.46237195 or first 871.64635715 library 874.27391275 heavier weight 876.99136285 library experiment 880.08532205 see what used 883.52459075 finetune design 886.99574835 not clear yet 890.7415295 really going to find out 895.64960095 integrate into language 899.86805335 nice point about c# 904.12054655 combination generics 908.3090862 lambda 912.77634925 express new statements 916.9021724 express them in language 921.5937892 lightweight 926.93340255 otherwise not possible 930.4680182 Haskell 932.8117563 first time 935.34288325 parsing 939.4390182 pretty printing 943.24991165 same type of libraries 947.15786625 tpl one of those 950.56374155 lightweight 953.40937645 library 956.69002155 obviously more heavyweight 960.1884241 not case 964.50335265 use of library 967.72500915 minor optimizations 971.84730505 minimal 974.2550363 simply because its 976.53450915 library 979.3178776 interesting see 983.97582655 vocabulary context 989.3806157 instantiate object 992.63030845 for whatever 995.03779935 somehow 998.01035035 run in parallel 1005.06878465 sidetracked 1008.28855905 before Fibonacci 1012.10166105 one other concept 1015.23019735 scheme 1016.4469842 futures 1018.41808395 also support 1020.51088665 compute 1022.1075783 side effects 1024.3556894 return some value 1026.72899325 tasks generic 1040.2940783 task of T 1043.41898535 back to the future 1047.42140705 somebody else 1052.39112025 Steve Toub 1057.70301365 pm for task parallel 1061.39125065 appreciate 1070.64192185 happy guy 1077.45493315 make 1079.4240182 compute value t 1082.26733905 in the future 1085.396508 action 1087.48843315 type T 1089.45736625 get back 1090.99002725 immediately 1093.08190935 future of T 1095.01773475 value 1097.9889479 implicitly do a wait 1101.64651705 future done 1104.27181635 by the time 1106.1464184 you call 1110.24243885 potentially in parallel 1114.3657495 very powerful concept 1118.9307733 without side effects 1122.68132435 very careful 1126.1463867 interesting mention 1130.96084585 wont always be in 1135.9008538 lookup 1138.6194978 hasn’t executed 1145.12164065 making crucial 1148.02538215 item efficient 1150.3084751 potentially 1153.9326032 Fibonacci function 1157.37274945 parallel Fibonacci 1163.62120755 Fibonacci n 1168.68711795 example to show 1170.6872461 quickly 1173.8093867 many many parallel tasks 1178.1576395 computation trees 1180.9999649 both branches 1183.9369932 parallel library 1188.71778465 if n<=1 1192.43918145 return 1 1203.75225855 otherwise 1209.16069165 Fibonacci n-1 1212.1926701 in parallel 1216.25393885 one of them in future 1221.9123368 future f1 1230.6953413 future.create 1238.1647461 delegate expression 1243.56929825 doesn’t take any arguments 1249.07266675 pfib(n-1) 1260.38482205 return argument 1265.16717465 and semicolon 1269.57429935 magic with 1271.60533905 static classes 1274.45151025 infer type 1277.38721095 create methods 1283.1406259 nice clever 1287.57665765 completely c# 3.0 1307.266313 future here 1310.8308776 potentially done in parallel 1315.04830845 fib of 3 1318.32925175 fib of2 1323.2111905 pfib(n-2) 1327.20756125 interested to see 1329.51676535 this future 1331.23711685 now done 1332.83133795 return 1337.45674155 return fib(n-2) 1341.8975613 plus value of 1344.8967733 f1.value 1347.70877555 crucial one 1351.55678915 pfib(n-1) 1355.2400284 recursive function 1358.6458833 all n-1 1362.5875749 potentially parallel 1365.304076 quickly 1366.8371554 create 1369.43058395 thousands 1371.71327785 parallel task 1375.3372642 library can 1379.7761282 parallel 1383.84030505 core why 1387.4010647 tpl is efficient 1389.9957824 implementation 1392.3717665 create a future 1396.27997285 advertize 1399.0899037 computation 1402.24785265 available 1406.68970755 steal this task 1410.77968485 stolen it 1413.2492121 and finished it 1417.5938538 return with results 1421.21836625 maximal parallelism 1424.5005794 another thing 1426.31207375 no one 1428.0016973 stolen 1430.5945091 local queue 1433.062974 happens a lot 1437.21969395 hundreds of thousand 1441.6294774 know how 1443.6605488 to calculate 1445.5662506 sequentially 1449.50380845 no thread switching 1453.63011685 immediately sequentially 1457.56616895 only beginning 1459.84870865 parallel task 1463.34873475 after 4 cores being used 1469.22502955 all the other sequentially yourself 1473.5722801 look like 1475.44563725 cheating 1478.3819592 some depth 1481.03935375 recursion 1483.4141338 stop creating 1485.60444905 task 1488.35489685 object allocation 1492.07073135 still need think 1494.7277461 recursive 1496.791932 divide conquer 1498.9186792 style 1501.2587404 handle internally 1503.5728334 for now 1509.63546375 point worth making 1512.7280522 code sample 1514.448542 no longer 1517.8261384 left branches 1520.98254655 right branches 1524.79436965 entirely serializing 1528.3583379 spitting off 1530.61159525 asynchronous work 1535.04678235 tree to be created 1538.45271435 how you structure 1541.54587535 program 1543.86001935 very easy 1546.2649547 input this asynchronous 1552.8016497 future mechanism 1555.67395695 implicit 1557.9249037 conversion 1561.770076 figured little bit 1564.92616105 too much magic 1567.83321205 not obvious 1570.9572563 accidentally 1574.70818825 concurrency wrong point 1579.5536395 can see 1582.8667914 trying things easier 1586.14673025 people think 1588.71107375 skilled 1591.7093028 good point 1595.64984135 still allocate 1598.9007461 very quick 1601.80432545 enough work here 1605.0576996 offset allocation 1608.71200575 for small n 1612.05781415 very little work going 1615.30695355 reality 1617.5258062 really 1619.9028016 threshold 1622.24623815 smaller than 10 1625.1513436 sequential version 1627.27851025 return 1630.0914218 sequential Fibonacci 1635.06044675 avoids any allocations 1638.8382109 programmers deal with 1641.0922529 ctp 1643.52928915 download 1645.8744921 samples in there 1647.78046945 plinq 1650.1235556 show in there 1653.0965896 sequential threshold 1656.4049173 Fibonacci 1658.6245261 obviously more 1661.34348305 better performing 1664.0620193 sequential 1667.7542892 not recursive 1670.18778805 exact formula 1672.5020964 exact value 1675.2851724 Fibonacci solution 1679.50234245 typical recursive 1683.28453975 implicitly 1685.78590255 explicitly 1687.7223504 ctp 1689.12783675 examples 1690.7851338 quick sort 1692.53352955 breaking 1694.59985265 smaller subsets 1697.8468107 exactly same solution 1701.4097801 some apis 1704.47392405 didn’t get into 1708.2587302 separate pools of tasks 1712.53661455 parallel apis 1715.38501365 more to them 1718.3206497 each one 1720.56857715 happen in parallel 1723.44635495 alluded 1726.32150005 self replication 1729.16727895 implementation 1731.3838096 how it works 1733.44788895 use of this 1736.44838215 infrastructure 1738.82675515 maybe 1741.0412143 one more thing 1743.42115195 parallel 1747.3222495 parallel do 1749.2941894 nice example 1751.2917563 create own 1753.38854995 abstractions 1756.107127 Fibonacci function 1759.5133946 just be careful 1763.54833905 certain point 1767.0765386 create 1769.07653635 parallel do 1772.2650919 static statement 1775.92080395 parallel.do 1780.07698075 two actions 1783.9217699 action 1 1786.6100692 another action 1789.3316259 action 2 1793.01691505 implement it 1794.9560964 one task 1798.17578235 task t 1801.79956695 potentially in parallel 1805.64551935 task.create 1807.5522472 action1 1810.82999325 action2 yourself 1813.3650794 sequentially 1816.39441275 wait till 1818.238237 task1 is done 1822.92764635 that will be it 1826.86825285 own little abstraction 1831.8348742 own structure 1833.99129595 structure 1836.46252275 abstraction 1838.99396375 all things 1840.83708735 library 1843.11716105 first class 1846.08687195 lot 1848.9926554 in the language itself 1853.0861202 pretty powerful 1858.7149411 real product too 1864.1200284 small wrappers around them 1867.8092835 this form 1869.6223969 nice thing 1871.49504655 parallels 1874.12307035 exception handling 1876.8409581 parallel world 1879.0310182 many things 1881.77929825 many things can fail 1884.9970624 changes 1887.7175522 exception 1890.3445522 serially 1892.21841615 of course 1893.935847 action1 1896.15596945 exception 1898.4360386 don’t call 1900.4363742 action2 1902.47115195 could be 1904.8442937 action2 already running 1908.06239345 possibly its own 1911.4117121 parallel 1914.5297733 aggregate 1917.97250005 exception collection 1922.2501792 of exceptions 1925.97240485 all other 1928.846118 innerexceptions 1932.8487926 collection 1935.9128946 changes things 1939.2556259 fundamental shift 1942.66200455 write your code 1945.3206248 convenient apis 1949.47548195 easier to deal with it 1952.78918035 developers 1955.26017575 implement 1957.35147965 aggregate 1960.6635318 what do with it 1964.44395355 catching finding 1968.72846265 occurred within it 1972.10543205 tool support 1975.4779626 easier to deal with 1978.1973413 try catch 1981.2293005 what catch is question 1984.1677994 show you 1987.04307945 you have 1990.32706125 calling 1993.0129082 library 1994.19979485 today 1996.7304059 parallel.do 1999.76434695 throw 2002.1406225 fooexception 2006.6086463 throw 2011.2671951 exception 2015.23551365 plinq 2016.92521885 runs 2019.04601255 fundamental 2021.04692405 calling this 2022.7020352 try 2026.92391505 where going to catch 2029.2660454 right 2030.7364842 catch 2032.7069071 fooexception 2034.95608395 bar 2038.14203405 both might happen 2042.1120851 don’t run multiple 2044.86358285 catch for same try 2048.4252937 any of these throw 2050.7376089 exception 2052.581754 paralleldo 2055.77116785 what it contains 2059.1135363 abbreviate 2061.4915998 parallel 2064.6193776 aggregate 2066.9603708 ae 2071.4285987 innerexceptions property 2075.9943368 either or both 2078.33778915 conceptually 2082.83735715 stop the world 2085.2744093 additional 2088.46558285 fundamental race condition 2092.30772345 catch handler 2094.4018538 either 2096.96383 particular 2099.2148674 let it escape 2101.7160658 up the call stack 2104.52659075 best practice 2107.15293655 not let 2108.9008447 leak out of 2112.2799592 handle inline 2114.9034003 what outside 2117.84261795 how you normally 2122.5291474 cant sufficiently 2126.5314751 probably fatal 2129.93749325 not right away 2133.4676055 unhandled 2135.84368485 blow up 2137.0640579 top 2138.56217235 message handler 2144.7521066 thread aborts 2151.12629145 fabulous 2153.65898535 eloquently 2156.31644905 stop the world 2159.2524502 threadabort 2161.9726418 prevent them 2163.56873475 running 2165.09852275 already 2167.533254 run completion 2170.16100685 like to stop 2172.44428235 if you can 2175.6927665 cooperatively cancel 2179.7902563 clarify it 2182.22236625 no confusion 2185.13065995 add small point 2187.632305 suggestion 2190.28763835 users delegate 2193.8191962 as much as possible 2197.3844218 doesn’t quite apply 2200.41353635 parallel for 2203.634152 delegate executing 2207.01161685 probably better 2209.5419037 try catch 2211.0420329 outside 2216.00774835 sometimes terminate 2219.7301089 out of for loop 2223.94946715 best practices 2226.636618 make sense 2228.4788991 point out 2230.8879173 little different 2233.7622393 interesting thing 2235.91956585 another form 2237.85786625 side effects 2240.3269536 parallel computations 2243.10836625 don’t want to have 2245.4806656 isolated things 2248.14174495 in parallel 2251.8288946 race conditions 2254.08052955 parallel do 2256.7345488 parallel for 2259.7977812 can be done parallel 2263.61071885 limiting side effects 2267.08130955 exceptions 2270.20380615 within parallel parts 2274.1448402 unobservable 2278.02182545 assigned to same variable 2286.51358395 something 2288.07361795 reasonable 2291.9201565 other kinds of effects 2295.07574835 write 2297.1409445 int x=0 2299.1999184 x++ 2301.7664343 over here 2303.42042405 maybe do 2305.98448305 x++ here too 2309.9837177 what will be value of x 2313.5186293 really hard to say 2316.3291973 sequentially 2318.08036285 two 2320.3924808 read same time 2323.45526195 both write back 2325.0519513 one 2327.33330505 really bad situation 2330.7385749 never want to run into 2334.2052665 ever share state 2336.8334808 put locks 2338.86164065 protect 2341.14439005 not check for 2343.33127215 at moment 2345.1116225 research 2347.021949 working hard 2349.2106951 analysis 2352.2381962 writing these thing 2356.86400005 exceptions escape 2360.8646021 work in progress 2363.7442574 programmer 2365.71157715 careful 2367.92841615 put a lock 2372.08861115 usefulness 2374.6178005 parallelism 2377.9011701 locking becomes issue 2381.4957359 end up locking 2384.2117971 plus plus 2387.43407035 significantly slower 2391.5577937 than sequentially 2395.21377555 shared state 2398.1561406 difficult road 2400.78061685 education 2402.932271 most people 2404.74543995 haven’t done 2406.5899547 parallel 2409.2161089 giant base class 2414.40605335 hardware 2416.37562025 evolved 2418.18544675 matters 2420.6238028 really cool 2422.37845465 libraries 2424.52848305 some developers 2426.8411214 they don’t have 2429.908254 shared mutable state 2435.660779 read book 2437.2837336 blog 2439.06304655 couple 2441.84725405 things 2443.1571769 really 2444.44141955 pushed 2445.9725341 plinq 2448.4431157 functional in nature 2450.8759694 side effects 2454.068644 nasty things 2457.50372 guides you 2459.7547688 declarative 2462.56658625 conscious 2465.37924045 effort 2468.94351705 safety plinq 2472.7559411 grok 2476.6646928 educating people 2479.915042 immutable 2482.66761115 bunch of c# 2485.50697395 weblogs 2488.1935488 erik 2490.6645964 purity 2494.6041758 educate over time 2497.66547965 tool support 2500.35035835 dans research 2503.3235454 absolutely 2505.8878141 best resource 2508.13461 channel9 2514.0415125 jumping to 2518.54385945 one thing 2521.29136855 people understand here 2523.5139411 c# 2524.92079485 everything 2527.4813481 down to threading level 2533.73273925 still performing 2539.7001248 like to think so 2543.5787291 funny benchmark 2546.79651365 hand optimized 2550.23791275 best way possible 2553.54754315 naive 2556.5190284 matrix multiply 2559.82811 same algorithm 2561.92567125 parallel for 2563.98725855 always beats 2567.2045273 using thread pool 2571.36248645 pretty good achievement 2574.76898645 how much 2576.73907715 in practice 2579.0817642 communication 2582.14611345 more usually 2584.67742405 algorithm 2586.8645805 performance get 2589.83395925 otherwise by hand 2592.4911758 crucial 2595.7424751 high level abstractions 2600.2413617 underlying primitives 2603.68294105 show it 2605.8975363 only one 2608.14814405 building 99 2613.9302676 moved up 2622.93395355 important point 2628.30798305 building 99 2631.08845015 new high tech 2634.2795919 research helped design 2639.1826282 up to certain point 2643.34028235 many ideas 2648.90441955 Jim gray tribute 2652.4979728 pretty impressive building 2658.93523475 work internally 2661.6220114 library 2663.0314332 not about 2664.97058735 fair scheduling 2668.18936285 much computation 2670.43757715 as possible 2672.5936157 only one thread 2675.4098685 per processor 2677.43950575 nirvana 2679.53134695 workergroup 2681.657076 one 2684.4067835 connected 2686.34874155 circularly 2688.56659305 one thing 2691.09915195 called task manager 2693.75312815 many of them 2695.97301705 depending on need 2698.88163495 bunch of resources 2701.85034015 pretend have 2704.8174728 four processors 2707.195076 invariant 2709.9757835 real 2711.4137642 os thread 2713.5702971 best thing 2716.72662475 os doesn’t have to 2719.06898755 schedule 2722.3199615 maximal performance 2726.132135 one of these threads 2729.35377215 workergroup 2732.9470148 has a bunch of 2735.1367574 workers 2737.6020692 one of them running 2740.01247855 more threads 2742.73182885 per worker group 2745.3875091 always 2748.79169845 all blocked except one 2752.2636202 each worker group 2755.8841089 local queue tasks 2760.4812007 processor 2765.5781259 Fibonacci example 2770.3247948 all the n-1 tasks 2773.206008 local task queue 2779.108305 communicate any other queue 2782.60743315 local one 2784.0788606 only 2785.3284785 one 2787.0155114 accessing it 2789.1746361 push up 2790.8284728 all tasks 2793.42336515 advertise 2796.799974 value 2799.01683905 wait for task 2802.2690386 last task 2804.61190365 particular one 2807.5515431 directly execute 2810.11246605 again 2812.64511905 running as long as it can 2815.8953005 other worker groups 2818.1155726 doing the same 2820.30341955 workers 2823.17764405 nothing to do 2826.7700193 stealing mode 2829.4605862 work to be done 2832.20972565 eager guys 2835.77618375 go around 2841.0875601 local task queue 2844.86718715 Fibonacci 2847.3078277 n-1 tasks 2850.21033905 start executing 2853.463398 own local processor 2857.37063045 local stacks 2860.40121095 keep executing 2865.81129255 take a little round trip 2870.4327506 know existence 2873.2150726 of other tasks 2875.46569735 all connected 2878.87136625 by a link structure 2882.06307375 in memory 2884.8110737 other guys queue 2888.7809116 something to be stolen 2891.9040681 smart algorithm 2894.56398985 queues 2896.6257574 look like this 2899.3749978 steal this end 2902.87582995 pushing on this end 2906.72291615 enough distance 2911.03619845 without synchronizing 2914.94023245 all be stealing 2918.34515195 slightly more sync 2921.1588062 involved 2923.8790851 avoid any real 2927.1907245 synchronization 2931.8798719 only reason 2933.5704989 sync 2934.72407035 lock 2937.00348415 handshake 2940.3818674 distributed 2942.537847 task queue 2944.7856395 as long as you can 2947.4143209 key property 2949.53831295 more efficient 2951.5401021 more threads 2953.6927155 than one 2955.6364626 per worker group 2958.44623135 may want the 2962.5389139 value of fib(n-1) 2965.88608965 stolen 2967.10122795 not done 2969.54340705 what to do 2972.29420755 block itself 2974.9804762 another thread 2977.8229343 local thread pool 2981.6696837 invariant 2985.2623946 one blocked thread 2988.5429513 also look 2990.98225405 for blocked thread 2994.888313 also start running again 2998.0123277 excellent 3000.8254003 lot details 3003.57763385 scheduling algorithm 3006.70322455 works really well 3009.9528243 implemented 3015.5461429 work stealing algorithm 3018.76585265 on average best 3022.73814175 given worst case scenarios 3026.54773815 all possible 3029.5487642 good locality 3032.9537438 good worst case 3037.8618663 virus scanner 3040.83206695 game 3043.2377438 adapting to workload 3046.1813935 assume 3048.8965658 static division 3052.05123705 textbox 3057.64678575 four parts 3059.89714635 array 3062.0849422 one of them 3064.61652615 page full 3067.0231962 wait 10000 3070.27241615 one work item 3072.7444252 small items 3076.8350318 dynamically distribute 3080.9641905 see more in 3084.02642975 distributed world 3087.0246361 in mpi 3089.8712914 solve these problems 3092.9975726 core algorithm 3096.40175405 weren’t dreaming 3099.21745585 of 80 cores 3103.6531452 fantastic 3106.9641452 maximum number 3109.5263719 possible cores 3112.09150005 think 3114.3415284 already 3117.43244785 more sophisticated 3120.09263725 papers 3121.99859185 based on ideas 3125.4707279 lack of hardware 3128.9668833 impeded designs 3132.779864 is there a limit 3136.25239005 number of cores 3139.069254 limits 3140.749703 more issue 3142.969737 applications 3145.1268504 programs 3149.1278697 clr thread pool 3151.5650443 single 3153.2244071 global lock 3155.3764683 as number 3159.4749842 simply doesn’t scale 3163.161542 queue management 3165.78691615 now becomes issue 3168.9436871 can you write 3171.2227461 algorithms 3172.9446463 utilize 3174.03870075 core 3176.47604995 Amdahl’s law 3180.1656531 maximum speed 3183.5069513 maximum amount of 3186.6624672 sequential code 3190.4468969 little small bit 3194.47792525 shave off at most 3197.13225175 20% 3199.1993073 still 80% 3202.41612135 multiple cores 3205.75891385 really becomes imperative 3209.50919165 find maximum 3212.542525 bang for buck 3215.3215193 one for loop 3218.0143901 processing 3220.290508 90% 3222.4825023 scale 3225.16731415 Dan 3228.51153405 msr project 3231.61330505 bulk 3234.95393315 one for loop 3237.29723475 counterexample 3240.3599774 graph layout 3243.4842234 schema designer 3246.82787645 change one line 3248.8887971 graph 3250.48592975 algorithm 3253.10941955 speeded up a lot 3256.6414298 gui 3259.3585783 we couldn’t achieve 3263.0484014 much more speedup 3265.9274978 8 core 3269.26646715 dual core 1.8 times 3273.51762365 first core 3275.334313 difference 3277.67683225 afterward 3280.52025515 not enough 3282.64533 parallelism 3285.42608735 execution time 3287.5521134 on program 3289.74092295 sequential time this 3294.24023925 rewrite program 3297.4289116 chunk 3301.83237195 sequential 3306.77448985 reduce parallel time 3316.6182903 still have 3319.71348075 sequential 3323.87019165 still time here 3327.3670794 doing sequential processing 3330.5269298 other parts 3333.86886285 throwing more cores 3336.77749325 shows first 3339.71700345 8 or 16 cores 3341.7791531 unless 3343.3729207 entire 3345.4674377 much less 3351.1225216 pessimist 3355.1864422 law 3357.96899665 true picture 3362.18663045 parallel bigger 3365.65551025 throwing more data 3370.84291725 applications more and more data 3374.0321905 games 3375.9710046 great example 3378.4088606 portion 3381.4431259 parallelizable 3383.97215085 percentage 3386.3147801 we can 3387.599398 changing 3390.5674524 corollary 3393.44196605 change that factor 3399.91456245 optimistic way 3403.47308395 very real examples 3407.41117125 fixed size 3410.0361531 problem, 3413.16057485 tiny little detail 3415.94451365 parallelizing 3419.069169 certain overhead 3422.4482098 some allocations 3424.29042865 manage 3427.44759075 non-negligible 3431.22836625 start 3433.1984411 adding up 3435.16587985 important point 3438.1659887 users should 3439.9802903 always 3443.3209808 need limit 3447.0737926 not a silver bullet 3450.9505182 what providing 3454.0119173 want to run 3456.1037279 computation 3457.91698075 in parallel 3459.76251025 computing 3463.66812135 ui intensive 3466.9801928 certain chunks 3469.45359415 computations 3472.2922824 spread it out 3475.29603405 get back into 3477.9537166 experience mode 3480.921008 great point 3483.047042 bulk 3487.3625692 doing 3489.61312705 gui 3492.29844335 response button 3495.2367563 perceived 3497.8604989 different 3501.4861656 new 16 core blocks 3506.0509377 16 seconds to 1 seconds 3510.36495355 incredibly happy 3513.14119165 where 3516.3635352 biggest bang of the buck 3521.7373039 understanding of performance 3526.91323925 library really helps again 3530.77437305 potential 3533.08357375 parallelism 3536.3990454 solve all worlds 3538.8048243 problems 3542.3362257 make it quicker 3545.77221095 change few lines 3548.36794905 outer loop 3551.33604425 outer things 3555.242847 import library 3557.5260828 change 3559.6509241 few statements 3562.3382234 model vb 3566.27650115 definitely honorable 3569.02721435 model 3571.81094675 machine does lot of work 3575.58952955 far future 3577.96690025 runtimes 3580.33989235 able to do 3583.405686 assessment 3586.28076195 compiler knows 3589.622635 don’t wrong 3591.71661225 science 3593.4352393 fiction 3595.0941633 automatic 3597.0608096 parallelism 3599.25120185 available 3600.8440443 using 3603.0314581 Haskell 3605.5329955 side effects 3608.53354655 any parallelism 3613.65778465 research is 3618.50225285 really hard problem 3623.15938895 ever working in practice 3626.75350685 smallest thing 3630.91079255 cheap enough 3634.3490227 little thing 3635.91011685 add up 3637.22273815 great 3638.53763155 reality 3642.53543885 one other thing 3644.97863725 looking into 3647.59945015 asynchronous programming 3651.257322 something 3654.6648787 really problem in practice 3658.69659985 multiple cores 3661.31966785 can help 3664.00641385 thinking about 3666.0715601 futures 3668.82207715 think about 3671.66862135 asynchronous operations 3674.4796883 do request 3678.57370755 looking into 3681.69596605 extending basic design 3687.79331865 related 3689.8865227 don 3693.69958845 upcoming episode 3696.79378575 f# 3699.60651815 using libraries 3702.578364 ready soon 3707.57539915 f# functional 3710.76314405 language on clr 3714.26574725 productized 3716.5767166 not done yet 3718.9211656 process 3721.01514065 blessing 3724.6732166 part 1 3725.95256355 continue 3727.76787195 deeper 3730.14185945 other areas 3732.20344905 part 2 3734.0169479 respond 3735.8621588 focus 3739.705186 here niners 3742.92495695 post thread 3744.5498481 ask for 3747.39445695 next 3751.67600685 impressive

2 comments:

Bob Uva said...

The xml link points back to the channel 9 page, not to where the xml file can be downloaded.

Aravind said...

@bob uva

Fixed it, thanks for the heads up..