<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.pluralsight.com/community/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Academia.NET</title><link>http://www.pluralsight.com/community/blogs/drjoe/default.aspx</link><description>Helping developers, students and teachers learn modern software development principles.</description><dc:language>en</dc:language><generator>CommunityServer 2008 SP1 (Build: 30619.63)</generator><item><title>When it rains, it pours --- articles on parallel processing that is</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/10/10/when-it-rains-it-pours-articles-on-parallel-processing-that-is.aspx</link><pubDate>Sat, 11 Oct 2008 04:47:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:53857</guid><dc:creator>joe-hummel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=53857</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/10/10/when-it-rains-it-pours-articles-on-parallel-processing-that-is.aspx#comments</comments><description>&lt;p&gt;Wow, my reading pile just got a lot bigger today.&amp;nbsp; First, the latest (Oct 2008) issue of &lt;a href="http://msdn.microsoft.com/en-us/magazine/default.aspx"&gt;MSDN&lt;/a&gt; contains 4 articles related to parallel processing:&amp;nbsp; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;quot;Design considerations for parallel programming&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;Improved Support for Parallelism in the next version of Visual Studio&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;Solving 11 Likely Problems in your Multithreaded Code&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;Build Concurrent Apps From Simple F# Expressions&amp;quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&amp;#39;m currently reading #4, since I&amp;#39;m a believer that functional programming may be one of the ways we make parallel processing safer, scalable, and generally more approachable.&amp;nbsp; I don&amp;#39;t see much in F# yet, it seems right now to be just another way to gain access to PFx and MPI.NET.&amp;nbsp; But the potential is definitely there.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;If that isn&amp;#39;t enough, the latest &lt;a href="http://mags.acm.org/queue/200809/"&gt;issue&lt;/a&gt; (Oct 2008) of ACM&amp;#39;s Queue magazine (&amp;quot;Architecting Tomorrow&amp;#39;s Computing&amp;quot;) presents a broader view of the concurrency problem, with articles on&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;quot;Real-world Concurrency&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;Erlang for Concurrent Programming&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;Parallel Programming with Transactional Memory&amp;quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Erlang is another functional language, but with a proven process-based approach to concurrency and parallel processing.&amp;nbsp; I&amp;#39;m just learning about Erlang now, I really really need to implement some apps and collect some performance numbers.&amp;nbsp; Erlang&amp;#39;s process-oriented concurrency model was originally designed for system building and robustness, so the question is how it fares for HPC.&amp;nbsp; Transactional memory is an interesting approach --- in short, you don&amp;#39;t worry about accessing shared memory, you just go for it and check when you&amp;#39;re done to see if a conflict has occurred.&amp;nbsp; If not, you commit, otherwise you&amp;nbsp;rollback and try again.&lt;/p&gt;
&lt;p&gt;Anyway, happy reading!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=53857" width="1" height="1"&gt;</description><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/Transactional+Memory/default.aspx">Transactional Memory</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/Concurrency/default.aspx">Concurrency</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/ACM+Queue/default.aspx">ACM Queue</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/Erlang/default.aspx">Erlang</category></item><item><title>32-bit SDK for HPC Server 2008 fails --- "The procedure entry point GetProcessIdOfThread could not be located..."</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/10/10/32-bit-sdk-for-hpc-server-2008-fails-quot-the-procedure-entry-point-getprocessidofthread-could-not-be-located-quot.aspx</link><pubDate>Sat, 11 Oct 2008 02:21:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:53856</guid><dc:creator>joe-hummel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=53856</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/10/10/32-bit-sdk-for-hpc-server-2008-fails-quot-the-procedure-entry-point-getprocessidofthread-could-not-be-located-quot.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://www.microsoft.com/hpc/en/us/default.aspx"&gt;RTM&lt;/a&gt;&amp;nbsp;for HPC Server 2008 was recently released, and I&amp;#39;ve been happily running HPC apps on my clusters.&amp;nbsp; I wanted to run some demos for my students, so I installed the SDK for HPC Server 2008 on the classroom machine (a 32-bit Windows XP box), and launched as usual with mpiexec:&lt;/p&gt;
&lt;p style="PADDING-LEFT:30px;"&gt;mpiexec&amp;nbsp; -n&amp;nbsp; 4&amp;nbsp; MyMPIApp.exe&lt;/p&gt;
&lt;p&gt;A dialog box immediately appeared with the error message &amp;quot;The procedure entry point GetProcessIdOfThread could not be located in the dynamic link library KERNEL32.dll&amp;quot;.&amp;nbsp; I closed the dialog, and the console window then displayed this error message:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;ReadFile() failed, error 109&lt;br /&gt;Error: unable to start the local smpd manager&lt;/p&gt;
&lt;p&gt;A firewall problem?&amp;nbsp; Disabled the firewall, same error.&amp;nbsp; Reboot?&amp;nbsp; Same error.&amp;nbsp; Installed MPI.NET and ran an MPI.NET app; same error.&amp;nbsp; So it seems to be a problem with the 32-bit SDK for HPC Server.&amp;nbsp; I did find a temporary solution:&amp;nbsp; uninstall the SDK, download and install the v1 SDK for Compute Cluster Server, available &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d8462378-2f68-409d-9cb3-02312bc23bfd&amp;amp;displaylang=en"&gt;here&lt;/a&gt;.&amp;nbsp; Same MPI apps ran fine with the older SDK.&amp;nbsp; I&amp;#39;ve submitted a bug report to Microsoft, I&amp;#39;ll post when we figure out what&amp;#39;s going on.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=53856" width="1" height="1"&gt;</description><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/MPI/default.aspx">MPI</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/MPI.NET/default.aspx">MPI.NET</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/MSMPI/default.aspx">MSMPI</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/32-bit+SDK+for+HPC+Server+2008/default.aspx">32-bit SDK for HPC Server 2008</category></item><item><title>RTM for HPC Server 2008 is now available</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/09/25/rtm-for-hpc-server-2008-is-now-available.aspx</link><pubDate>Thu, 25 Sep 2008 20:28:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:53654</guid><dc:creator>joe-hummel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=53654</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/09/25/rtm-for-hpc-server-2008-is-now-available.aspx#comments</comments><description>&lt;p&gt;In case you missed it, RTM for Windows HPC Server 2008 is now available &lt;a href="http://technet.microsoft.com/en-us/evalcenter/cc835241.aspx"&gt;here&lt;/a&gt;.&amp;nbsp; Don&amp;#39;t forget to grab the &lt;a href="http://www.microsoft.com/downloads/info.aspx?na=47&amp;amp;p=2&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=2c6db4f3-b604-461f-9170-43e9cee062c5&amp;amp;u=details.aspx%3ffamilyid%3d12887DA1-9410-4A59-B903-693116BFD30E%26displaylang%3den"&gt;SDK&lt;/a&gt; for HPC Server, which allows you to program MPI, as well as access a cluster programmatically via the HPC Server API.&lt;/p&gt;
&lt;p&gt;There are also a number of tutorials and how-to articles available on Microsoft&amp;#39;s &lt;a href="http://www.microsoft.com/hpc/en/us/developer-resources.aspx"&gt;developer resources&lt;/a&gt; page, two of which we wrote and blogged about earlier:&amp;nbsp; &amp;quot;&lt;a href="http://www.pluralsight.com/community/blogs/drjoe/archive/2008/06/19/51178.aspx"&gt;Classic HPC Development using Visual C++&lt;/a&gt;&amp;quot;, and &amp;quot;&lt;a href="http://www.pluralsight.com/community/blogs/drjoe/archive/2008/08/18/learning-parallel-programming-from-shared-memory-multi-threading-to-distributed-memory-multi-processing.aspx"&gt;From Sequential to Parallel Code&lt;/a&gt;&amp;quot;.&amp;nbsp; The former is for more experienced HPC C++ developers, and uses OpenMP, MPI and MPI.NET&amp;nbsp;to develop an image processing application.&amp;nbsp; The latter is oriented towards newcomers to HPC and HPC Server 2008, and shows how to move step-by-step from a sequential, desktop GUI application (managed C++ or C#) to a parallel, cluster-based&amp;nbsp;application.&amp;nbsp; A variety of parallelization techniques are presented, including&amp;nbsp;parametric sweep, explicit threads, OpenMP, TPL, and HPC Server&amp;#39;s new SOA-based approach.&amp;nbsp; Both tutorials include extensive lab exercises, solutions, and demos.&lt;/p&gt;
&lt;p&gt;Cheers!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=53654" width="1" height="1"&gt;</description><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/OpenMP/default.aspx">OpenMP</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/HPC/default.aspx">HPC</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/TPL/default.aspx">TPL</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/MPI/default.aspx">MPI</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/HPC+Server+2008/default.aspx">HPC Server 2008</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/WCF/default.aspx">WCF</category><category domain="http://www.pluralsight.com/community/blogs/drjoe/archive/tags/MPI.NET/default.aspx">MPI.NET</category></item><item><title>Learning Parallel Programming --- from shared-memory multi-threading to distributed-memory multi-processing</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/08/18/learning-parallel-programming-from-shared-memory-multi-threading-to-distributed-memory-multi-processing.aspx</link><pubDate>Tue, 19 Aug 2008 03:29:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:52542</guid><dc:creator>joe-hummel</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=52542</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/08/18/learning-parallel-programming-from-shared-memory-multi-threading-to-distributed-memory-multi-processing.aspx#comments</comments><description>&lt;p&gt;We&amp;#39;re working with Microsoft to develop several&amp;nbsp;tutorials introducing developers to high-performance computing, parallel programming, and Windows HPC Server 2008.&amp;nbsp; Our first tutorial (for experienced HPC developers, &amp;quot;Exploiting Data Parallelism with OpenMP, MPI and HPC Server 2008&amp;quot;),&amp;nbsp;is available &lt;a href="http://www.pluralsight.com/community/blogs/drjoe/archive/2008/06/19/51178.aspx"&gt;here&lt;/a&gt;.&amp;nbsp;&amp;nbsp;We&amp;nbsp;are working on our second tutorial, &amp;quot;From Sequential to Parallel Development&amp;quot;, which is nearing completion.&amp;nbsp; This is more introductory in nature, taking the traditional &amp;quot;sequential&amp;quot; developer step-by-step into the world of parallel programming.&amp;nbsp; The tutorial is extensive, currently 50 pages in length, complete with source code, lab exercises, and solutions in both VC++ and C#.&lt;/p&gt;
&lt;p&gt;We start with a GUI-based Mandelbrot application, and show various ways to parallelize the application via multi-threading --- explicitly with .NET threads, then implicitly with OpenMP and the TPL (Task Parallel Library in the upcoming PFx, or Parallel Extensions to .NET).&amp;nbsp; We then architect a client-server version of the Mandelbrot app, introduce Windows HPC Server 2008, and show how to parallelize the app across a cluster.&amp;nbsp; This includes a discussion of many topics, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multi-threading&lt;/li&gt;
&lt;li&gt;Multi-processing&lt;/li&gt;
&lt;li&gt;BackgroundWorker and Thread classes&lt;/li&gt;
&lt;li&gt;OpenMP&lt;/li&gt;
&lt;li&gt;TPL&lt;/li&gt;
&lt;li&gt;MPI&lt;/li&gt;
&lt;li&gt;MPI.NET&lt;/li&gt;
&lt;li&gt;programming against the HPC Server 2008 API&lt;/li&gt;
&lt;li&gt;automating application deployment and job submission&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The goal is to show developers how to take a sequential, GUI-based application and parallelize this app across both multi-core and cluster-based hardware.&amp;nbsp; Here&amp;#39;s the current draft of the tutorial document:&amp;nbsp; &lt;a href="http://www.pluralsight.com/drjoe/sdk/SeqToParallelHPC.pdf"&gt;SeqToParallelHPC.pdf&lt;/a&gt;.&amp;nbsp; The current download including source code and lab exercises:&amp;nbsp; &lt;a href="http://www.pluralsight.com/drjoe/sdk/SeqToParallelHPC.zip"&gt;SeqToParallelHPC.zip&lt;/a&gt;.&amp;nbsp; Any and all feedback greatly appreciated.&amp;nbsp; Enjoy!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=52542" width="1" height="1"&gt;</description></item><item><title>Exploiting Data Parallelism with OpenMP, MPI and Microsoft HPC Server 2008</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/06/19/51178.aspx</link><pubDate>Thu, 19 Jun 2008 15:35:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:51178</guid><dc:creator>joe-hummel</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=51178</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/06/19/51178.aspx#comments</comments><description>&lt;P&gt;We're working with Microsoft to develop some tutorials for the HPC Server 2008 SDK.&amp;nbsp; We just finished one of the tutorials, representing a classic HPC development scenario:&amp;nbsp; &amp;#8220;Exploiting Data Parallelism with OpenMP, MPI and Microsoft HPC Server 2008&amp;#8221;.&amp;nbsp; The scenario revolves around&amp;nbsp;the parallelization of an image processing application, and includes both lab exercises and solutions.&amp;nbsp; The tutorial is extensive, 74 pages covering a multitude of topics in the HPC space:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;OpenMP 
&lt;LI&gt;MPI 
&lt;LI&gt;MPI.NET 
&lt;LI&gt;MPI tracing with ETW and Jumpshot 
&lt;LI&gt;MPI debugging --- locally on your&amp;nbsp;workstation and remotely on the cluster 
&lt;LI&gt;Submitting workloads to an HPC Server 2008 cluster 
&lt;LI&gt;Troubleshooting submission problems 
&lt;LI&gt;HPC Server 2008 cluster setup&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Here's the tutorial document: &lt;A href="http://www.pluralsight.com/drjoe/sdk/ClassicHPCDevC++.pdf"&gt;ClassicHPCDevC++.pdf&lt;/A&gt;.&amp;nbsp; The complete download: &lt;A href="http://www.pluralsight.com/drjoe/sdk/ClassicHPCDevC++.zip"&gt;ClassicHPCDevC++.zip&lt;/A&gt;.&amp;nbsp; Enjoy!&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=51178" width="1" height="1"&gt;</description></item><item><title>March CTP of HPC Server 2008 just released</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/03/13/50469.aspx</link><pubDate>Thu, 13 Mar 2008 16:54:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:50469</guid><dc:creator>joe-hummel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=50469</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/03/13/50469.aspx#comments</comments><description>&lt;P&gt;Microsoft has just released a CTP of its upcoming HPC Server 2008 product&amp;nbsp;(the next version of Windows Compute Cluster Server 2003).&amp;nbsp; The MPI library has undergone a series of performance enhancements (e.g. &lt;A href="http://channel9.msdn.com/ShowPost.aspx?PostID=366683"&gt;Network Direct&lt;/A&gt; for more efficient message communication), and the scheduler now provides an easier and more interactive way to execute kernels of work (based on the&amp;nbsp;scheduler's new &lt;A href="http://forums.microsoft.com/WindowsHPC/ShowPost.aspx?PostID=2924455&amp;amp;SiteID=78"&gt;SOA capabilities&lt;/A&gt; for job submission and execution).&amp;nbsp; I'm just starting to kick the tires, existing MPI and OpenMP apps runs just fine on the new version.&amp;nbsp; Next up is to start playing with the new scheduler...&lt;/P&gt;
&lt;P&gt;The CTP also includes numerous other improvements, including better setup and administration support.&amp;nbsp; To download, click &lt;A href="https://connect.microsoft.com/content/content.aspx?ContentID=6923&amp;amp;SiteID=12"&gt;here&lt;/A&gt; to join the beta program.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=50469" width="1" height="1"&gt;</description></item><item><title>incorrect MSMPE 64-bit library installed as part of SDK for Compute Cluster Pack</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/02/20/50285.aspx</link><pubDate>Thu, 21 Feb 2008 04:06:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:50285</guid><dc:creator>joe-hummel</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=50285</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2008/02/20/50285.aspx#comments</comments><description>&lt;P&gt;During the first run of our Windows Compute Cluster Server class last week in Irvine, we discovered that when you install the SDK for Compute Cluster Pack, the wrong version of msmpe.lib is installed.&amp;nbsp; In particular, the 64-bit msmpe.lib file, which gets installed into C:\Program Files\Microsoft Compute Cluster Pack\Lib\amd64, is actually the 32-bit library.&amp;nbsp; So when you compile in 64-bit mode and link against the 64-bit msmpe.lib, you get unresolved symbols for the MPI functions:&amp;nbsp; MPI_Init, MPI_Send, MPI_Recv, MPI_Finalize, etc.&amp;nbsp; Microsoft has built a&amp;nbsp;correct version of the library, which I've made available &lt;A href="http://www.pluralsight.com/drjoe/wccs/msmpe-amd64.zip"&gt;here&lt;/A&gt;&amp;nbsp;for download.&lt;/P&gt;
&lt;P&gt;Some background...&amp;nbsp; The SDK for Compute Cluster Pack is the MPI programming libraries for Windows Compute Cluster Server.&amp;nbsp; There are 2 libraries each for 32-bit and 64-bit.&amp;nbsp; For normal MPI programming, you link against msmpi.lib.&amp;nbsp; For MPI programming with &lt;A href="http://www-unix.mcs.anl.gov/mpi/www/www4/MPE.html"&gt;MPE-based&lt;/A&gt; event tracing, you link against msmpe.lib.&amp;nbsp; The 32-bit msmpe.lib file is fine, the 64-bit msmpe.lib file is incorrect.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=50285" width="1" height="1"&gt;</description></item><item><title>Microsoft HPC Server 2008</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2007/11/19/49219.aspx</link><pubDate>Mon, 19 Nov 2007 14:18:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:49219</guid><dc:creator>joe-hummel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=49219</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2007/11/19/49219.aspx#comments</comments><description>&lt;P&gt;At Supercomputing last week, Microsoft announced the next version of its HPC product:&amp;nbsp; HPC Server 2008.&amp;nbsp; The current version (&amp;#8221;Windows Compute Cluster Server&amp;#8221; or WCCS) is built upon Server 2003, while this next version is built upon Server 2008.&amp;nbsp; I'll be blogging about v2 in the coming weeks, for now you can find additional information &lt;A href="http://www.microsoft.com/windowsserver2003/ccs/hpcplus.aspx"&gt;here&lt;/A&gt;. In particular, there's technical information available&amp;nbsp;as a&amp;nbsp;Word .docx, and you can download beta1 if you want to play.&lt;/P&gt;
&lt;P&gt;Speaking of playing...&amp;nbsp; I mentioned in an earlier post that you can build your own cluster with very little hardware, e.g. I'm using 2 dual-core Mac Minis.&amp;nbsp; Phil Pennington just &lt;A href="http://blogs.msdn.com/philpenn/archive/2007/11/15/virtual-hpc-cluster-on-a-notebook-pc.aspx"&gt;posted&lt;/A&gt;&amp;nbsp;how to setup a cluster on your laptop / desktop using virtualization, very cool.&amp;nbsp; Just add lots of RAM, and hopefully you have a few cores free on your CPU :-)&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=49219" width="1" height="1"&gt;</description></item><item><title>Supercomputing 2007: &amp;quot;Data Streaming&amp;quot;</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2007/11/16/49181.aspx</link><pubDate>Fri, 16 Nov 2007 08:24:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:49181</guid><dc:creator>joe-hummel</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=49181</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2007/11/16/49181.aspx#comments</comments><description>&lt;P&gt;Michael Wolfe, PhD, is a well-known compiler writer and parallelization guru, and currently works for &lt;A href="http://www.pgroup.com/"&gt;The Portland Group&lt;/A&gt;. He gave a vendor talk at Supercomputing this week (Reno, NV) on what he calls &amp;#8220;Data Streaming&amp;#8221;.&amp;nbsp;He started by showing a timeline of CPU clock rates from 1997 ... 2007.&amp;nbsp; There was a clear trend:&amp;nbsp; from 1997 .. 2002, the clock rates followed Moore's law and grew by a factor of 10 --- from 300MHz to 3GHz.&amp;nbsp; But from 2002 to 2006, the rates barely grew at all (3.8GHz), and in 2007 the clock rates actually dropped back to 3GHz.&amp;nbsp; So we appear to have hit the wall in terms of CPU clock rates.&amp;nbsp; As you all know, what chip manufacturers are doing now is going multi-core to offer increased performance.&lt;/P&gt;
&lt;P&gt;But forget about multi-core for a moment.&amp;nbsp; Let's look at just one core running at 3GHz.&amp;nbsp; In the good 'ole days of compiler optimization, we optimized by reducing instruction count /&amp;nbsp;instruction cycles.&amp;nbsp; We have become pretty good at that, to the point that we can't feed the CPU with data fast enough --- Mike did some back-of-the-envelope calculations that I won't repeat here, but basically showed that optimized, compute-intensive code needs 16-24GB/Sec bandwidth to memory.&amp;nbsp; CPUs today don't have anywhere near that bandwidth to RAM.&lt;/P&gt;
&lt;P&gt;Okay, so add another core.&amp;nbsp; Michael showed this very simple picture of a two-headed straw: &amp;#8220;Imagine you're at your favorite dinner sharing a milkshake with your significant other&amp;#8221; (my words).&amp;nbsp; Both of you are pulling through the same base --- i.e. with two cores&amp;nbsp;you still have only 1 pipe to memory.&amp;nbsp; This problem is going to get bad very quickly, since the # of cores will grow exponentially (quad-cores are getting common, 8-cores by next year, etc.).&amp;nbsp; But the # of pins to memory will not grow exponentially, though it will grow (AMD's new Barcelona quad-core chip has 2 pipes to memory).&amp;nbsp; Think of the multi-headed straw as you ponder the purchase of your next quad-core box...&lt;/P&gt;
&lt;P&gt;The answer is to (a) throw more and more cache at the CPU (L1, L2, L3), and (b) start programming &amp;amp; optimizing for the cache --- &amp;#8220;to the point that you consider the cost of executing an instruction to be $0.00&amp;#8221; (Michael's words).&amp;nbsp; So &amp;#8220;Data Streaming&amp;#8221; is the idea that instead of always agressively doing computation, you instead aggressively fill the cache with data you will need, and then do computation once the data arrives.&amp;nbsp; If you have 2 cores, then core #1&amp;nbsp;can be reading data while core #2 is computing; when core #2 runs out of data, it starts reading data while core #1 executes.&amp;nbsp;This sounds crazy --- to have an execution core basically spend its time waiting for data --- but it turns out that you get much better performance (in compute-intensive programs) than having both cores go full-speed ahead executing instructions, and essentially both waiting for data.&amp;nbsp; Michael and a colleague did this for a spec benchmark, and got around 1.5-1.7 speedup on a 2-core CPU (vs. essentially no speedup when the code was optimized for instruction counts).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Here's a simple example of what you can do today to optimize for better cache performance.&amp;nbsp; First, imagine a collection of objects or structs.&amp;nbsp; Second, suppose you have to run through the collection, touching&amp;nbsp;a field of each object / struct:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;for (int i = 0; i &amp;lt; N; i++)&lt;BR&gt;&amp;nbsp; a[i].field++;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Every time you read from memory, the hardware reads a cache line --- 8 or 16 bytes (at least).&amp;nbsp; By using an array of objects / structs, what you just did was pollute the cache with things you are never going to use (the other fields of the struct), to get at the one field you will use.&amp;nbsp; The solution is to move back to the old days of parallel arrays, i.e. using separate arrays to hold the various fields.&amp;nbsp; The loop then becomes:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr&gt;for (int i = 0; i &amp;lt; N; i++)&lt;BR&gt;&amp;nbsp;&amp;nbsp; afield[i]++;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Now when you read a cache line, you'll use those other values in the cache line in future iterations.&amp;nbsp; The next step is to add prefetch instructions (which VS supports) to get ahead:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr&gt;for (int i = 0; i &amp;lt; N; i++) {&lt;BR&gt;&amp;nbsp;&amp;nbsp; prefetch( afield[i+8] );&amp;nbsp; // or something, this is very HW dependent&lt;BR&gt;&amp;nbsp;&amp;nbsp; afield[i]++;&lt;BR&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;This is starting to approximate the &amp;#8220;Data Streaming&amp;#8221; idea, in that instead of doing computation, we think first about streaming in the data we're going to need.&amp;nbsp; The point of Michael's talk is that we need to start thinking about this more deeply.&amp;nbsp; I suspect Michael has some good ideas about how the compiler can help us.&lt;/P&gt;
&lt;P dir=ltr&gt;And here's a related item:&amp;nbsp; the TLB (translation lookaside buffer), which is responsible for translating addresses from virtual memory to physical memory, is another potential area of concern.&amp;nbsp; The TLB is in essence&amp;nbsp;another cache, and is getting killed as we go multi-core --- if the cores are running different instruction streams, the TLB miss rate is growing and this means more trips to RAM, and this means more waiting.&amp;nbsp; Rough rule of thumb: the cost of each memory level is a factor of 10, so CPU to L1 is 10 cycles, CPU to L2 is 100, CPU to L3 is 1,000, and CPU to RAM is 10,000 cycles.&amp;nbsp; So you can see that waiting 10,000 cycles to read something from RAM is a BAD thing for performance.&lt;/P&gt;
&lt;P dir=ltr&gt;The bottom line:&amp;nbsp; getting good performance from today's multi-core chips is not as easy as just creating multiple threads and handing them off to the operating system.&amp;nbsp; Fun times!&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=49181" width="1" height="1"&gt;</description></item><item><title>Microsoft Compute Cluster Server</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2007/11/15/49156.aspx</link><pubDate>Thu, 15 Nov 2007 08:36:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:49156</guid><dc:creator>joe-hummel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=49156</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2007/11/15/49156.aspx#comments</comments><description>&lt;P&gt;My PhD is in parallelizing compilers, back in the 1990's when supercomputers were hot.&amp;nbsp; Then the field cooled off, as the machines were too costly, the programming models were too difficult, and the auto-parallelizing compilers failed to live up to (unrealistic) expectations.&amp;nbsp; But the field has come&amp;nbsp;roaring back to life the last couple years,&amp;nbsp;especially with cheap high-speed interconnects and multi-core CPUs.&amp;nbsp; Microsoft has a number of technologies in the HPC (high performance computing) arena:&amp;nbsp; Parallel LINQ, Task Parallel Library, F#, and Compute Cluster Server.&lt;/P&gt;
&lt;P&gt;Microsoft Compute Cluster Server, or CCS, is Microsoft's foray into the HPC cluster arena --- imagine a rack of blades with quad-core CPUs and a high-speed interconnect.&amp;nbsp;&amp;nbsp;CCS was released in 2006, runs on Windows Server 2003 64-bit, and is currently at v1.0 with SP1; v2 was just announced at Supercomputing this week in Reno, and will run on Windows Server 2008 64-bit.&lt;/P&gt;
&lt;P&gt;I'm really excited to be working in the field again, finally putting all that PhD work to use :-)&amp;nbsp; Right now I'm part of a team here at Pluralsight developing a 5-day course on CCS:&amp;nbsp; what it offers, how it works, and its supported programming models (basically OpenMP and MPI).&amp;nbsp; Our first course offering is slated for the last week of November, 26-30.&amp;nbsp; For more info on the course, click &lt;A href="http://www.pluralsight.com/courses/AppliedComputeClusterServer.aspx"&gt;here&lt;/A&gt;&amp;nbsp;.&lt;/P&gt;
&lt;P&gt;Surprisingly, it doesn't take that much hardware to get into CCS and experiment.&amp;nbsp; A CCS cluster consists of a head node (that manages the cluster and schedules jobs) and compute nodes (which do the actual work).&amp;nbsp; Since a head node can also server as a compute node, you can build a cluster with one computer --- any computer capable of running Windows Server 2003 64-bit.&amp;nbsp; Of course, life is more interesting if you have 2 or more compute nodes, which forces you into the world of distributed programming and MPI.&lt;/P&gt;
&lt;P&gt;In fact, take a peek at my portable cluster --- I'm using 2 Mac Minis as compute nodes and a Thinkpad as the head node (the other thinkpad is my normal working machine, and acts as a client to the cluster):&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="/drjoe/images/MacMiniCluster.jpg"&gt; &lt;/P&gt;
&lt;P&gt;The mac minis make excellent portable Windows servers. I booted to the mac os, ran bootcamp, inserted the Windows 20003 CD, wiped the disk clean when it rebooted, and installed. Some of the drivers are missing (e.g. bluetooth and wireless), but the server hardware I needed --- monitor, hard disk and ethernet --- were found and installed fine.&amp;nbsp;Once installed, I run them headless (you have to boot with&amp;nbsp;a dvi to s-video adapter attached because the mini is looking for a monitor, but once booted you can remove the adapter and remote into the machine).&lt;/P&gt;
&lt;P&gt;Right now I'm attending the annual Supercomputing conference, which is a great conference and getting better every year.&amp;nbsp; 9,000 attendees, 87 miles of fiber optic cable, and more computing power than most countries.&amp;nbsp; Tomorrow I'll blog about one of the things I learned that blew me away:&amp;nbsp; the cost of executing an instruction is essentially 0, so optimization now is all about data locality and caching.&amp;nbsp; The optimizing compiler world has been turned on its head.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=49156" width="1" height="1"&gt;</description></item><item><title>Interested in LINQ?</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2006/11/03/41701.aspx</link><pubDate>Sat, 04 Nov 2006 00:51:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:41701</guid><dc:creator>joe-hummel</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=41701</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2006/11/03/41701.aspx#comments</comments><description>&lt;P&gt;I'm sure you've heard about LINQ, but just in case you haven't, it stands for &lt;EM&gt;Language Integrated Query.&amp;nbsp; &lt;/EM&gt;I just finished a 60-page overview of LINQ, which is available&amp;nbsp;as a&amp;nbsp;PDF from O'Reilly:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.oreilly.com/catalog/language1/?CMP=ILC-2RQ886833906&amp;amp;ATT=language1"&gt;http://www.oreilly.com/catalog/language1/?CMP=ILC-2RQ886833906&amp;amp;ATT=language1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The PDF represents the first in a 3-part series on LINQ; part 2 will focus specifically on LINQ for SQL, and part 3 will focus on LINQ for XML. Along with the PDFs I'll be presenting a series of MSDN webcasts on LINQ; I'll let you know when the live presentation dates become official.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;LINQ offers SQL-like query support in C# and VB, allowing you to write queries --- against objects, XML documents, relational databases, and more --- with IntelliSense and strict type-checking.&amp;nbsp; For example, given a set of Doctor objects, here's a query to select all the doctors living in Chicago:&lt;/P&gt;&lt;PRE&gt;&lt;FONT size=2&gt;var &lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;chicago &lt;/SPAN&gt;&lt;/STRONG&gt;= from d in doctors where d.City == &amp;#8220;Chicago&amp;#8220; select d;&lt;BR&gt;&lt;/FONT&gt;&lt;/PRE&gt;
&lt;P&gt;There's a CTP (May 2006) you can download in order to play with LINQ [1]. The technology is slated to appear sometime in 2007 with the &lt;EM&gt;3.next&lt;/EM&gt; release of .NET (i.e. the release to *follow* the upcoming 3.0 release). It's very interesting technology, I encourge you to learn about LINQ if you haven't already. Cheers!
&lt;P&gt;&lt;PRE&gt;[1] &lt;A href="http://msdn.microsoft.com/data/ref/linq/"&gt;http://msdn.microsoft.com/data/ref/linq/&lt;/A&gt;&lt;/PRE&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=41701" width="1" height="1"&gt;</description></item><item><title>MSDNAA *does* provide access to Visual Studio Team System</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2006/08/17/33133.aspx</link><pubDate>Thu, 17 Aug 2006 15:02:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:33133</guid><dc:creator>joe-hummel</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=33133</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2006/08/17/33133.aspx#comments</comments><description>&lt;P&gt;For the academics in the crowd...&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I was under the impression that Microsoft's Academic Alliance was providing Visual Studio Team System as trial software that expires after 180 days.&amp;nbsp; Turns out that if you contact MSDNAA, you can get a volume licensing key to distribute the full version of VSTS (&amp;#8220;Visual Studio Team Suite&amp;#8220;) to your students and install on your lab machines. VSTS includes software engineering tools and processes for the entire software lifecycle.&lt;/P&gt;
&lt;P&gt;I'm not sure how to exactly go about getting the licensing key from MSDNAA, that's the next step :-)&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=33133" width="1" height="1"&gt;</description></item><item><title>Building documentation from XML comment files</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2006/08/05/32809.aspx</link><pubDate>Sun, 06 Aug 2006 01:36:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:32809</guid><dc:creator>joe-hummel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=32809</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2006/08/05/32809.aspx#comments</comments><description>&lt;P&gt;I've been a big fan of NDoc for generating professional looking documentation from XML comment files.&amp;nbsp; Unfortunately, it seems development on NDoc has stalled of late, and support for generating documentation for .NET 2.0 code is still beta.&amp;nbsp; The good news is that Microsoft has just released a CTP of the tool they use internally, called Sandcastle.&amp;nbsp; This is an early (i.e. rough) release, but a good step in the right direction.&amp;nbsp; Here's a blog entry from MS with more info:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/sandcastle/default.aspx"&gt;http://blogs.msdn.com/sandcastle/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;See the bottom of that blog page for the download link.&amp;nbsp; Note it's an early beta with a command-line interface.&amp;nbsp; Cheers!&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=32809" width="1" height="1"&gt;</description></item><item><title>Rocky Lhotka and CSLA 2.0</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2006/04/02/20941.aspx</link><pubDate>Sun, 02 Apr 2006 16:50:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:20941</guid><dc:creator>joe-hummel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=20941</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2006/04/02/20941.aspx#comments</comments><description>&lt;P&gt;Webcast listeners know I'm a big fan of Rocky's work on distributed design.&amp;nbsp; He's designed a framework (CSLA) for distributed N-tier systems, and recently updated his framework for .NET 2.0.&amp;nbsp; If you ever get a chance to hear him speak at TechEd or PDC, do so.&amp;nbsp; In fact, turns out Rocky was recently on .NET Rocks, and you can hear him talk about CSLA 2.0.&amp;nbsp; Here's the link:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.dotnetrocks.com/default.aspx?showID=172"&gt;http://www.dotnetrocks.com/default.aspx?showID=172&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Kudos to Andy M. for the heads up and link.&amp;nbsp; Cheers!&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=20941" width="1" height="1"&gt;</description></item><item><title>Web Service URL should be a config setting --- it already is!</title><link>http://www.pluralsight.com/community/blogs/drjoe/archive/2006/02/08/18684.aspx</link><pubDate>Thu, 09 Feb 2006 03:52:00 GMT</pubDate><guid isPermaLink="false">d057c89c-07b5-4bfb-b52f-d79d1e3ece89:18684</guid><dc:creator>joe-hummel</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.pluralsight.com/community/blogs/drjoe/rsscomments.aspx?PostID=18684</wfw:commentRss><comments>http://www.pluralsight.com/community/blogs/drjoe/archive/2006/02/08/18684.aspx#comments</comments><description>&lt;P&gt;During today's webcast on web services (Wed Feb 8), there was a question related to moving your web service from your dev box to the production box.&amp;nbsp; When the web service moves, the URL will change, so what's the best way to protect your client code from this predictable change?&amp;nbsp; We shouldn't need to re-reference and recompile the client app just because the web service moved.&amp;nbsp; The answer of course is that the URL should be a .config setting.&amp;nbsp; The detail I forgot was exactly what property to set at run-time after you read the URL from the .config file.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Duh, it's the .Url property!&amp;nbsp; Let me finish this story, and then tell you an even better one :-)&amp;nbsp; But first, the .Url property.&amp;nbsp; The client starts by createing the web service object (which is really the proxy), and then sets the URL like this:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;this.server = new EmployeeWebService.Employees();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;this.server.Url = Properties.Settings.EmployeeWebServiceURL;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;This assumes you have defined a .config setting named &lt;EM&gt;EmployeeWebServiceURL&lt;/EM&gt;.&amp;nbsp; It may seem backwards to create the web service object first&amp;nbsp; and set the URL second, since don't you need the URL to create the web service object?&amp;nbsp; Nope, because you're really just creating the proxy --- the web service isn't contacted until you make a method call, and that's when you need the URL.&amp;nbsp; &lt;/P&gt;
&lt;P dir=ltr&gt;So that's the first part of the story:&amp;nbsp; create .config setting, and set the proxy's Url property before you call it.&amp;nbsp; So off I got to update my demo code&amp;nbsp;in VS 2005, I bring up the Properties page, click the Settings tab, and behold, the .config setting is already there!&amp;nbsp; Turns out Visual Studio 2005 automatically defines an application-level setting for the project whenever you add a web reference.&amp;nbsp; So in my demo code, in the BusinessTierClient project, there's a setting called &amp;#8220;BusinessTierClient_EmployeeWebService_Employees&amp;#8220; that contains the URL for the web service.&amp;nbsp; And the proxy is already coded to read this setting, so if you chance it, the proxy does the right thing.&amp;nbsp; Very cool.&lt;/P&gt;
&lt;P dir=ltr&gt;The only problem is that this .config setting is stored in the component's app.config file, which for a DLL, isn't around at run-time.&amp;nbsp; So to make this work the way you want it to --- i.e. to expose the .config setting in the client-side .exe's config file --- you have to merge the DLL's app.config file with the client-side .exe's config file.&amp;nbsp; We've done this already with other settings, e.g. the connection string needed by Data Access Tier has to be merged into web.config (for a web service) or remotingserver.exe.config (for a remoting server host).&amp;nbsp; I'll update my demo and repost the demo + slides to the webcasts page, in this case app.config file associated with the EmployeeClientGUI has been updated, that's it.&lt;/P&gt;
&lt;P dir=ltr&gt;Learning something new every day...&amp;nbsp; Cheers,&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=18684" width="1" height="1"&gt;</description></item></channel></rss>