Wednesday, June 04, 2008
« TechEd 2008 Day 1 Part 2 | Main | TechEd 2008 Day 2 Part 2 »

This morning’s session with Stephen Toub on the parallel extensions to the .net framework was excellent.  Stephen had a  quad-core laptop that was enormous and hotter than the surface of the sun.  Intel’s quad-core mobile chips for laptops should be out this summer.  Anyone want to buy a used Vostro with a Core2 Duo?  He also had an early prototype of a system based on the Intel Dunnington architecture that appeared to have 20 cores.  I suddenly felt that my Quad Core setup at home was hardly adequate to do real concurrency research.

I owe him several comments and I hope my notes are adequate to remember all of them.  I brought some more questions I didn’t ask yesterday.

Q: Stephen has stated that the goal is for developers to extend System.Threading.Tasks.Task in order to do concurrency at a lower level than Parallel.ForEach<>, yet Task has an internal constructor keeping you from extending it.

A: The PFX team realized this during their internal code reviews and this will be fixed in a future CTP.

Q: In the ray-tracing example, you can see one of the pitfalls of static partitioning of workload.  Compare the top of the image vs. the bottom.  In ray-tracing the objects and reflective surfaces make for much more intensive computations, and so the top of the screen draws very quickly while the bottom of the screen fills in rather slowly.  Is thought going into hinting semantics that would allow users of PFX to indicate that certain units of execution have a greater “weight” relative to others?  Would you handle this by changing priority of some Task threads so Windows gives it extra cycles, or changing the static partitioning algorithms?

A: With the current Task API, you can set the priority of a Task, which ultimately means thread priority.  There is design discussion going on related to how we might be able to give hints to the TPL.

I just got out of a “deep dive” on the Silverlight 2 rendering pipelines.  There were some good debugging hints I didn’t know about, but other than that the dive was not as technical as I’d hoped.  Right now I’m in a social networking session led by Rob Howard, and then on to more Silverlight.

Thursday, June 05, 2008 12:06:24 AM (Central Standard Time, UTC-06:00)
Hi Damon-

Glad you enjoyed the session! Thanks for coming. A few clarifications to what you have written as answers...

Regarding concurrency at a lower-level than Parallel.For/ForEach, there's no reason you need to extend Task for this scenario: you can simply use Task, just like Parallel.For/ForEach do. I believe your follow-up question to me was taking this a step further, asking how one could create custom Tasks given that Task has a private constructor in the June 2008 CTP. It currently does have a private constructor, but we do realize that there are scenarios this prohibits, and we do have plans to remove this restriction.

Regarding priorities, the June 2008 CTP has a ThreadPriority setting on TaskManagerPolicy, so you can create TaskManager's with varying priorities, and when you create Tasks or run Parallel loops, you can target a particular TaskManager instance.

Regarding the demo machine, it actually had 24 cores ;)

And if you're interested, some information on the mobile quad-core processor I mentioned:
http://www.tomshardware.com/news/Centrino-QX9300-X9100,5445.html

Best,
Stephen
Name
E-mail
Home page

Comment (Some html is allowed: a@href@title, strike) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Enter the code shown (prevents robots):

Live Comment Preview