<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Software Dev Blog &#187; dotNET</title>
	<atom:link href="http://www.software-dev-blog.de/tag/dotnet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.software-dev-blog.de</link>
	<description>Multicore-Programmierung, Multithreading &#38; Visual Computing</description>
	<lastBuildDate>Thu, 09 Feb 2012 19:54:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>.NET DevCon 2011: von C# 5.0 und asynchroner Programmierung</title>
		<link>http://www.software-dev-blog.de/net-devcon-2011-von-c-5-0-und-asynchroner-programmierung/03/2011/</link>
		<comments>http://www.software-dev-blog.de/net-devcon-2011-von-c-5-0-und-asynchroner-programmierung/03/2011/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 14:38:46 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[DevCon]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1539</guid>
		<description><![CDATA[Anfang März habe ich erstmals über die im Juni stattfindende .NET-Entwicklerkonferenz .NET DevCon 2011 berichtet, die in Nürnberg ihre Zelte aufschlagen und von der Neuen Mediengesellschaft Ulm ausgerichtet wird. Im zugehörigen Blogeintrag habe ich unter anderem darüber geschrieben, dass das Programm noch nicht ganz fertig ist, dass bis dato noch keine Sessions zu Windows Phone [...]]]></description>
			<content:encoded><![CDATA[<p>Anfang März habe ich erstmals über die im Juni stattfindende .NET-Entwicklerkonferenz <a href="http://dotnet-devcon.de" target="_blank">.NET DevCon 2011 berichtet</a>, die in Nürnberg ihre Zelte aufschlagen und von der Neuen Mediengesellschaft Ulm ausgerichtet wird. <a title="Programm für Entwickler-Event “.NET DevCon 2011″ fast fertig" href="http://www.software-dev-blog.de/programm-fur-entwickler-event-net-devcon-2011-fast-fertig/03/2011/">Im zugehörigen Blogeintrag</a> habe ich unter anderem darüber geschrieben, dass das Programm noch nicht ganz fertig ist, dass bis dato noch keine Sessions zu <a href="http://www.it-techblog.de/tag/wp7/" target="_blank">Windows Phone 7</a> angeboten werden und dass zudem eine Keynote-Session fehlt. Nun, seitdem hat sich einiges getan, was die Programminhalte betrifft.</p>
<p>Die gute Nachricht vorweg: die Sessionplanung scheint abgeschlossen zu sein und die <a href="http://www.dotnet-devcon.de/Programm" target="_blank">Programmübersicht</a> listet genau 50 Voträge auf, die an zwei Tagen auf je vier Tracks und vier Themenbereiche verteilt sind. Hierzu gehört auch die Begrüßung am ersten Tag und &#8211; jetzt kommt&#8217;s &#8211; eine Abschluss-Keynote vom Content Manager der Veranstaltung höchstpersönlich, <a href="http://www.goloroden.de/" target="_blank">Golo Roden</a>. So gesehen ist mein Wunsch nach einer Keynote ja erfüllt worden, allerdings nicht für den Beginn, sondern für das Ende der .NET DevCon. Na, soll mir auch recht sein!</p>
<p>Die abschließende Keynote-Session wagt einen Blick in die Zukunft zugleich. Denn unter dem Titel<a href="http://www.dotnet-devcon.de/Programm/C-4.0-and-beyond" target="_blank"> &#8220;C# 4.0 and beyond&#8221;</a> stellt Golo einige der Features vor, die in C# 5.0 implementiert werden sollen. Diese hat ja C#-Oberchefentwickler Anders Heijlsberg auf der PDC 2010 ausführlich dargestellt.</p>
<p>Eine der Hauptunterschiede zwischen <a title="Interview: Visual Studio 2010 und seine Multicore-Fähigkeiten" href="http://www.software-dev-blog.de/interview-visual-studio-2010-und-seine-multicore-fahigkeiten/02/2009/">C# 4.0</a> und C# 5.0 wird die Realisierung der asynchronen, sprich der nebenläufigen, also der Parallelprogrammierung sein. So geschieht <a title="Videochat mit Steve Teixeira über Parallelprogrammierung" href="../videochat-mit-steve-teixeira-uber-parallelprogrammierung/11/2009/">unter .NET 4</a> das Verteilen mehrerer Threads auf die vorhandenen Prozessoren mithilfe von Klassenbibliotheken. Auf Basis von C# 5.0 hingegen soll das mit einer angepassten Sprachsyntax geschehen, wovon sich Microsoft eine deutliche Erleichterung der asynchronen Programmierung verspricht.</p>
<p>Hierfür wird es in C# 5.0 das neue Schlüsselwort <strong><em>async</em></strong> geben, das auf die Verwendung asynchroner Methoden hinweist. Daneben wird in C# 5.0 mit <em><strong>await</strong></em> ein neuer Operator eingeführt, der das Programm dazu bringen soll, eine asynchrone Methode auszuführen. Diesen asynchronen Methoden wird auch eine neue Klassenbibliothek spendiert, die sich <em><strong>Task&lt;T&gt;</strong></em> nennt und die für die Rückgabewerte einer Methode zuständig sein wird.</p>
<p>Natürlich werden die neuen asynchronen Methoden von C# 5.0 Fehler abfangen können, und das auf Basis von Try-Catch-Konstrukten. Darüber hinaus lassen sich mithilfe der unter C# 4.0 eingeführten <em>CancellationTokenSource</em>-Klasse Hintergrundprozesse abbrechen.</p>
<p>Tja, über all diese Dinge und sicherlich noch weit mehr wird <a href="http://www.dotnet-devcon.de/Programm/C-4.0-and-beyond" target="_blank">Golo am 7. Juni auf der .NET DevCon von 17:15 bis 18:15 Uhr </a>reden. Da kann man schon sehr gespannt sein!</p>
<p>Ach ja: Windows Phone 7 hat es leider doch nicht auf die .NET DevCon geschafft. Na, wozu gibt es die erst gestern vorgestellt <a href="http://www.mobile-devcon.de/" target="_blank">Mobile DevCon?!</a></p>
<p>Und für alle, die sich die PDC-2010-Session von Anders Heijlsberg zu C# 5.0 anschauen wollen, haben wir das <a href="http://channel9.msdn.com/Events/PDC/PDC10/FT09" target="_blank">zugehörige Video verlinkt</a>. Viel Spaß dabei!</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/net-devcon-2011-von-c-5-0-und-asynchroner-programmierung/03/2011/&via=sw_devtwits&text=.NET DevCon 2011: von C# 5.0 und asynchroner Programmierung&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/net-devcon-2011-von-c-5-0-und-asynchroner-programmierung/03/2011/&via=sw_devtwits&text=.NET DevCon 2011: von C# 5.0 und asynchroner Programmierung&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/net-devcon-2011-von-c-5-0-und-asynchroner-programmierung/03/2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anmelden und Geld sparen: dotnet Cologne 2011</title>
		<link>http://www.software-dev-blog.de/anmelden-und-geld-sparen-dotnet-cologne-2011/03/2011/</link>
		<comments>http://www.software-dev-blog.de/anmelden-und-geld-sparen-dotnet-cologne-2011/03/2011/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 15:30:04 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Konferenz]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1510</guid>
		<description><![CDATA[Das Erfolgsgeheimnis: Eine Handvoll Software-Entwickler setzen sich zusammen und organisieren eine Konferenz, die sie selbst gerne besuchen würden. Diesen Satz habe ich auf der Webseite der Entwicklerkonferenz dotnet Cologne 2011 gefunden. Der sagt wohl eine Menge aus über das Konzept und die Absicht, eine Veranstaltung &#8220;von Entwicklern für Entwickler&#8221; zu konzipieren und umzusetzen. Und da [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em>Das Erfolgsgeheimnis: Eine Handvoll Software-Entwickler setzen sich zusammen und organisieren eine Konferenz, die sie selbst gerne besuchen würden.</em></p></blockquote>
<p>Diesen Satz habe ich auf der <a href="http://www.dotnet-cologne.de/MainPage.ashx" target="_blank">Webseite der Entwicklerkonferenz dotnet Cologne 2011</a> gefunden. Der sagt wohl eine Menge aus über das Konzept und die Absicht, eine Veranstaltung &#8220;von Entwicklern für Entwickler&#8221; zu konzipieren und umzusetzen. Und da das Ganze <a href="http://www.software-dev-blog.de/dotnet-cologne-2010-war-ein-voller-erfolg/05/2010/">letztes Jahr schon ziemlich gut geklappt hat</a>, kann man für die diesjährige Ausgabe der dotnet Cologne Ähnliches erwarten.</p>
<p>So wird es wohl nicht bei den 300 Teilnehmern vom letzen Jahr bleiben. Daher hat sich das Orga-Team rund um <a href="http://twitter.com/deralbert" target="_blank">Albert Weinert</a>, <a href="http://www.st-lange.net/" target="_blank">Stefan Lange</a> und <a href="http://twitter.com/RolandWeigelt" target="_blank">Roland Weigelt</a> um eine neue Location umgesehen und wurde im Mediapark zu Köln fündig (es handelt sich dabei um <a href="http://www.komed.de/" target="_blank">das Komed</a>). Und da auch einige neue Leute erwartet werden, gibt es diesmal auch 300- und 400-Level-Vorträge, die noch tiefer in diverse Themen einsteigen. Aber natürlich kommen auch fundierte Einführungen nicht zu kurz.</p>
<p>Toll ist auch die Idee, zwischen den einzelnen Sessions (von denen es immerhin 25 geben wird, aufgeteilt in fünf parallel laufende Tracks) etwas längere Pausen zu machen. Damit hat man auch mal die Gelegenheit, nach einem Vortrag mit den Referenten zu reden, einen der <a href="http://www.dotnet-cologne.de/Sponsoren.ashx" target="_blank">Sponsorenstände</a> zu besuchen oder sich einfach einen Kaffee zu holen. Das reduziert den Stress und erhöht sicherlich die Zufriedenheit der Teilnehmer während der dotnet Cologne 2011.</p>
<p>Auf der zugehörigen Webseite gibt es auch schon <a href="http://www.dotnet-cologne.de/Vortraege.ashx" target="_blank">erste Vorträge</a> zu bewundern, und erfreulicherweise wird es auch etwas zu Windows Phone 7 geben (<a href="http://www.it-techblog.de/peter-novak-uber-windows-phone-7-app-tests-und-app-review-zeiten/11/2010/" target="_blank">Peter Nowak</a> erzählt etwas über Silverlight für mobile Geräte). Das hatte ich ja erst kürzlich hinsichtlich der .NET DevCon 2011 <a href="http://www.software-dev-blog.de/programm-fur-entwickler-event-net-devcon-2011-fast-fertig/03/2011/">etwas bemängelt</a>.</p>
<p>So, und worauf warten Sie jetzt noch, sich anzumelden? Hierbei ist vor allem Schnelligkeit oberstes Gebot, denn die ersten hundert Anmelder erhalten einen Rabatt von 30 Euro und bezahlen schlappe 25 Euro. Die nächsten 100 Konferenzwilligen werden aber auch noch belohnt und zahlen 15 Euro weniger, also 40 Euro. Alle anderen müssen leider den Standardpreis von 55 Euro zahlen. Aber auch das ist für eine Eintages-Konferenz für Software-Entwickler immer noch ein ziemlich gutes Angebot. Allerdings können Sie sich erst ab dem 14.3. um 14:00 Uhr <a href="http://www.dotnet-cologne.de/Anmeldung.ashx" target="_blank">anmelden</a>.</p>
<p>Dass dieser sehr faire Eintrittspreis überhaupt möglich ist, hat auch mit den zahlreichen <a href="http://www.dotnet-cologne.de/Sponsoren.ashx" target="_blank">Sponsoren</a> zu tun, die auch dieses Jahr die dotnet Cologne finanziell und sonstwie unterstützen. Zu ihnen gehört auch Intel, für die ich auf die dotnet Cologne fahren werde, um vor Ort über die wichtigsten Dinge zu berichten. Also schon mal <a href="http://www.software-dev-blog.de/feed/" target="_blank">vormerken</a>: 6. Mai, Berichterstattung von der dotnet Cologne 2011 auf dem Software Dev Blog.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/anmelden-und-geld-sparen-dotnet-cologne-2011/03/2011/&via=sw_devtwits&text=Anmelden und Geld sparen: dotnet Cologne 2011&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/anmelden-und-geld-sparen-dotnet-cologne-2011/03/2011/&via=sw_devtwits&text=Anmelden und Geld sparen: dotnet Cologne 2011&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/anmelden-und-geld-sparen-dotnet-cologne-2011/03/2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programm für Entwickler-Event &#8220;.NET DevCon 2011&#8243; fast fertig</title>
		<link>http://www.software-dev-blog.de/programm-fur-entwickler-event-net-devcon-2011-fast-fertig/03/2011/</link>
		<comments>http://www.software-dev-blog.de/programm-fur-entwickler-event-net-devcon-2011-fast-fertig/03/2011/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 14:05:28 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Konferenz]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1506</guid>
		<description><![CDATA[Wirft man einen Blick auf die Webseite der .NET DevCon 2011, die am 6. und 7. Juni in Nürnberg stattfinden wird, sieht man, dass das Programm schon ziemlich weit fortgeschritten ist. Am zweiten Tag gibt es nachmittags noch ein paar Lücken, ansonsten wirkt das Ganze schon recht rund. Zunächst einmal gilt festzuhalten, dass die Programmverantwortlichen [...]]]></description>
			<content:encoded><![CDATA[<p>Wirft man einen Blick auf die <a href="http://www.dotnet-devcon.de/" target="_blank">Webseite der .NET DevCon 2011</a>, die am 6. und 7. Juni in Nürnberg stattfinden wird, sieht man, dass das <a href="http://www.dotnet-devcon.de/Programm" target="_blank">Programm</a> schon ziemlich weit fortgeschritten ist. Am zweiten Tag gibt es nachmittags noch ein paar Lücken, ansonsten wirkt das Ganze schon recht rund.</p>
<p>Zunächst einmal gilt festzuhalten, dass die Programmverantwortlichen acht Themenschwerpunkte definiert haben, vier am ersten Tag und vier am zweiten. Tag 1 umfasst die Rubriken &#8220;Sprachen&#8221;, &#8220;Architektur&#8221;,  &#8221;SharePoint &amp; Daten&#8221; sowie &#8220;ALM/Produktion&#8221;, an Tag 2 geht es um <a href="http://www.software-dev-blog.de/avx-mit-visual-studio-2010-und-openmp-optimal-einsetzeni/01/2011/">&#8220;Visual Studio &amp; Add-Ins&#8221;</a>, &#8220;Code &amp; UI&#8221;, &#8220;Web-Ready Desktop&#8221; sowie &#8220;Soft Skills &amp; Agile Methoden&#8221;. Zu meinen persönlichen Highlights zählen folgende Sessions:</p>
<ul>
<li><a href="http://www.dotnet-devcon.de/Programm/C-2.0" target="_blank">The absolutely minimum every developer should know about C#</a> &amp; <a href="http://www.dotnet-devcon.de/Programm/Die-Vielfalt-der-Programmiersprachen-unter-.NET" target="_blank">Die Vielfalt der Programmiersprachen unter .NET</a> (Rubrik Sprachen)</li>
<li><a href="http://www.dotnet-devcon.de/Programm/Parallelprogrammierung-Eine-Einfuehrung">Parallelprogrammierung – Eine Einführung</a> &amp; <a href="http://www.dotnet-devcon.de/Programm/Die-Task-Parallel-Library">Die Task Parallel Library</a> (Rubrik Architektur)</li>
<li><a href="http://www.dotnet-devcon.de/Programm/SharePoint-als-Entwicklungsplattform">SharePoint als Entwicklungsplattform </a>&amp; <a href="http://www.dotnet-devcon.de/Programm/Alternative-Datenbanken">Alternative Datenbanken</a> (Rubrik Sharepoint &amp; Daten)</li>
<li><a href="http://www.dotnet-devcon.de/Programm/Vertrauen-ist-gut-Source-Control-ist-besser">Vertrauen ist gut – Source Control ist besser!</a> &amp; <a href="http://www.dotnet-devcon.de/Programm/Buildserver-CI-und-Continuous-Deployment">Buildserver, Continuous Integration und Continuous Deployment</a> (ALM/Produktion)</li>
<li><a href="http://www.dotnet-devcon.de/Programm/Mit-ReSharper-die-Code-Qualitaet-verbessern">Mit ReSharper die Code-Qualität verbessern</a> &amp; <a href="http://www.dotnet-devcon.de/Programm/Produktivitaetssteigernde-Visual-Studio-Add-Ins">Produktivitätssteigernde Visual Studio-Add-Ins</a> (Visual Studio &amp; Add-Ins)</li>
<li><a href="http://www.dotnet-devcon.de/Programm/UI-fuer-Entwickler-und-andere-Nicht-Designer">UI für Entwickler und andere Nicht-Designer</a> &amp; <a href="http://www.dotnet-devcon.de/Programm/Code-Design-Guidelines-in-der-Praxis">Code Design Guidelines in der Praxis</a> (Code &amp; UI)</li>
<li><a href="http://www.dotnet-devcon.de/Programm/WPF-Silverlight-HTML-5-die-Qual-der-Wahl">WPF, Silverlight, HTML 5 – die Qual der Wahl</a> &amp; <a href="http://www.dotnet-devcon.de/Programm/HTML5-Der-Browser-als-Plattform">HTML5: Der Browser als Plattform</a> (Web-Ready Desktop)</li>
<li><a href="http://www.dotnet-devcon.de/Programm/Was-bringt-mir-Agil">Was bringt mir Agil?</a> &amp; <a href="http://www.dotnet-devcon.de/Programm/Agil-2.0-Das-Agile-Development-Framework-ADF">Agil 2.0 – Das Agile Development Framework (ADF)</a> (Software Skills &amp; Agile Methoden)</li>
</ul>
<p>Was mir noch ein wenig fehlt, ist das Thema <a href="http://www.it-techblog.de/tag/wp7/" target="_blank">Windows Phone 7</a>, da es auf eine ordentliche .NET-Veranstaltung durchaus passt (immerhin hat die dotnetpro WP7 schon einen <a href="http://www.dotnetpro.de/articles/articlearchive1757.aspx" target="_blank">kompletten Schwerpunkt</a> spendiert). Außerdem kann ich keinen Slot für eine Keynote-Session entdecken. Das wäre wirklich schade, schließlich gibt solch eine Eröffnungsrede die Richtung für die gesamte Veranstaltung vor. Na, mal sehen, ob es sich die Verantwortlichen der .NET DevCon &#8211; Tilman Börner und Florian Bender &#8211; in dieser Sache noch einmal anders überlegen.</p>
<p>Falls Sie das Ganze auch ohne Keynote interessant finden, können Sie sich natürlich <a href="http://www.dotnet-devcon.de/Anmeldung" target="_blank">gleich mal anmelden</a>. Wenn Sie das noch bis zum 19. April erledigen, sparen Sie 100 Euro und zahlen nur 690 Euro. Danach sind für zwei Tage .NET-Konferenz 790 Euro fällig. Hierin enthalten ist ein gemütliches Get-together am ersten Abend und ein separater <a href="http://www.dotnet-devcon.de/Ausstellung" target="_blank">Ausstellungsbereich</a>, in dem diverse Firmen ihre Lösungen und Produkte in Sachen Software-Entwicklung präsentieren werden. Für das passende Socializing ist also auch gesorgt.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/programm-fur-entwickler-event-net-devcon-2011-fast-fertig/03/2011/&via=sw_devtwits&text=Programm für Entwickler-Event ".NET DevCon 2011" fast fertig&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/programm-fur-entwickler-event-net-devcon-2011-fast-fertig/03/2011/&via=sw_devtwits&text=Programm für Entwickler-Event ".NET DevCon 2011" fast fertig&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/programm-fur-entwickler-event-net-devcon-2011-fast-fertig/03/2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dotnet Cologne 2010 #3: Noch mehr Infos und Präsentationen</title>
		<link>http://www.software-dev-blog.de/dotnet-cologne-2010-3-noch-mehr-infos-und-prasentationen/06/2010/</link>
		<comments>http://www.software-dev-blog.de/dotnet-cologne-2010-3-noch-mehr-infos-und-prasentationen/06/2010/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 10:46:54 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Konferenz]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1392</guid>
		<description><![CDATA[Ja doch, ich geb&#8217;s ja zu, ich bin mit meinem dritten Teil der dotnet Cologne 2010 (Teil 1 und Teil 2) ein wenig in Verzug. Und da ich dies natürlich wieder gutmachen möchte, gibt es heute neben den Infos zu den zwei noch ausstehenden Sessions von Oliver Sturm und Bernd Marquardt ein Schmankerl (bayerisches Idiom [...]]]></description>
			<content:encoded><![CDATA[<p>Ja doch, ich geb&#8217;s ja zu, ich bin mit meinem dritten Teil der dotnet Cologne 2010 (<a href="http://www.software-dev-blog.de/dotnet-cologne-2010-war-ein-voller-erfolg/05/2010/">Teil 1</a> und <a href="http://www.software-dev-blog.de/dotnet-cologne-2010-ein-voller-erfolg-teil-2/06/2010/">Teil 2</a>) ein wenig in Verzug. Und da ich dies natürlich wieder gutmachen möchte, gibt es heute neben den Infos zu den zwei noch ausstehenden Sessions von Oliver Sturm und Bernd Marquardt ein Schmankerl (bayerisches Idiom für &#8220;Leckerbissen&#8221;) dazu: Es sind nämlich schon ganz viele Präsentationen der Techsessions online, die man sich von dort einfach <a title="Hier gibt's die Voträge zum downloaden" href="http://www.dotnet-cologne.de/Vortraege.ashx" target="_blank">auf seinen Rechner laden kann</a>. Ein toller Service für alle, die nicht dabei sein konnten oder durften oder sonst was.</p>
<p>So, und was gibt es abschließend noch zu Olivers und Bernds Vorträgen zu sagen? Nun, beide waren (a) sehr unterhaltsam und (b) sehr informativ. Aber gut, das war ja auch nicht anders zu erwarten.</p>
<p>Oliver Sturm ist bestimmt vielen von euch ein Begriff: er ist unter anderem C#-MVP, betreibt <a href="http://www.sturmnet.org/blog" target="_blank">ein eigenes Blog</a> und <a title="Follow Oliver on Twitter" href="http://twitter.com/olivers/" target="_blank">twittert</a> sogar ab und an. Seine Session trug den Titel &#8220;Parallelisierung mit funktionalen Ansätzen in C#&#8221;. Dabei ging es &#8211; grob gesagt &#8211; um den Multicore-Shift (&#8220;Wie übersetzt man das eigentlich?!&#8221;), um das Parallelisieren von Quellcode mithilfe der <a href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-2/01/2009/">Parallel Extensions</a> in .NET und um entsprechende funktionale Ansätze, demonstriert anhand zweier Beispiele (das Filtern von Namenslisten und die parallelisierte Erzeugung von Mandelbrotbäumen). Interessant fand ich übrigens Olivers Versuch, die Begriffe &#8220;Multithreading&#8221;, &#8220;Concurrency&#8221; und &#8220;Parallelism&#8221; voneinander abzugrenzen, da diese im englischen Sprachraum äußerst oft synonym verwendet werden. Tja, und den Rest seiner Präse <a href="http://www.dotnet-cologne.de/GetFile.aspx?File=/Downloads/2010/Sturm_ParallelCsharp.zip" target="_blank">schaut ihr euch am besten selbst an</a>.</p>
<p><span id="more-1392"></span></p>
<p><a href="http://www.dotnetpro.de/articles/author51.aspx" target="_blank">Bernd Marquardt</a> beschäftigte sich dann mit einem ganz ähnlichen Thema, wenngleich aus einer anderen Richtung kommend: &#8220;Parallelprogrammierung mit der TPL&#8221;. TPL steht für <a href="http://www.software-dev-blog.de/idf09-parallel-computing-mit-net-4-und-visual-studio-2010/09/2009/">Task Parallel Library</a>, mit deren Hilfe das Parallelisieren von Managed Code vereinfacht werden soll. Natürlich zeigte auch Bernd zunächst einmal, dass die Prozessoren nicht mehr schneller werden, sondern &#8220;nur&#8221; noch mehr. Und dass Software-Entwickler aus diesem Grund eine ganze Menge Hirnschmalz auf die Optimierung ihrer Anwendungen verwenden müssen, damit diese auch optimal skalieren (die Anwendungen, nicht die Entwickler!).</p>
<p>Bernd stellte einstiegsweise die verschiedenen Parallelisierungsmodelle vor, über die Mario ja schon gut zwei Stunden vorher <a href="http://www.software-dev-blog.de/dotnet-cologne-2010-ein-voller-erfolg-teil-2/06/2010/">geredet hatte</a>. Das erste praktische Beispiel war die parallele Erweiterung von LINQ, also <a href="http://www.software-dev-blog.de/videochat-mit-steve-teixeira-uber-parallelprogrammierung/11/2009/">PLINQ</a>, die Microsoft seinem .NET-4-Framework spendiert hat. Damit lassen sich parallel ausführbare Datenbankabfragen generieren, die automatisch auf die vorhandenen Prozessorkerne und Threads verteilt werden. Aber auch das <a href="http://www.software-dev-blog.de/priopowerday-parallele-programmierung-unter-net-35/04/2009/">Parallelisieren von Schleifenkonstrukten</a> mit neuen Funktionen wie <strong><em>Parallel.For()</em></strong> und <em><strong>Parallel.ForEach()</strong></em> waren Bernd ausführliche Erläuterungen wert.</p>
<p>Und so ging es dann lustig weiter: Codeblöcke parallelisieren mit <a href="http://www.software-dev-blog.de/screencasts-zur-parallelprogrammierung-unter-net-4/07/2009/"><em><strong>Parallel.Invoke()</strong></em></a>, Task-Klassen einsetzen (vergleichbar mit der Threadpool-Klasse), Concurent Exceptions verwenden, Synchronisierungsprobleme erkennen und einiges mehr. Und wer das alles genauer wissen will, sollte sich einfach die Folien von Bernds Session <a title="Bernds Präsentation als PPT" href="http://www.dotnet-cologne.de/GetFile.aspx?File=/Downloads/2010/Marquardt_TPL.zip" target="_blank">auf seinen Rechner laden</a>.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/dotnet-cologne-2010-3-noch-mehr-infos-und-prasentationen/06/2010/&via=sw_devtwits&text=dotnet Cologne 2010 #3: Noch mehr Infos und Präsentationen&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/dotnet-cologne-2010-3-noch-mehr-infos-und-prasentationen/06/2010/&via=sw_devtwits&text=dotnet Cologne 2010 #3: Noch mehr Infos und Präsentationen&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/dotnet-cologne-2010-3-noch-mehr-infos-und-prasentationen/06/2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dotnet Cologne 2010, ein voller Erfolg &#8211; Teil 2</title>
		<link>http://www.software-dev-blog.de/dotnet-cologne-2010-ein-voller-erfolg-teil-2/06/2010/</link>
		<comments>http://www.software-dev-blog.de/dotnet-cologne-2010-ein-voller-erfolg-teil-2/06/2010/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 15:02:24 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Konferenz]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1387</guid>
		<description><![CDATA[Wie ich bereits berichtete, habe ich mich letzte Woche auf der dotnet Cologne 2010 herumgetrieben und mir dabei die Sessions von Rami Radi, Mario Deilmann, Oliver Sturm und Bernd Marquardt zu Gemüte geführt. Auf die Session von Rami bin ich ja bereits ausführlich eingegangen, und jetzt folgen noch die von Mario, Oliver und Bernd. Dr. [...]]]></description>
			<content:encoded><![CDATA[<p>Wie ich <a href="http://www.software-dev-blog.de/dotnet-cologne-2010-war-ein-voller-erfolg/05/2010/">bereits berichtete</a>, habe ich mich letzte Woche auf der  dotnet Cologne 2010 herumgetrieben und mir dabei die Sessions von Rami  Radi, Mario Deilmann, Oliver Sturm und Bernd Marquardt zu Gemüte  geführt. Auf die Session von Rami bin ich ja bereits ausführlich  eingegangen, und jetzt folgen noch die von Mario, Oliver und Bernd.</p>
<p>Dr. Mario Deilmann (so sein vollständiger Name) ist bei Intel für  Compiler und ähnlich geartete Software-Tools zuständig. Mit seiner  Lunch-Session ging er der Frage nach, welches Programmier- bzw.  Thread-Modell für skalierende Anwendungen das beste sei. Skalierend  bedeutet in diesem Zusammenhang, dass parallelisierter Quellcode nicht  nur optimal auf zwei Prozessorkerne verteilt wird, sondern auch auf  vier, sechs, acht oder 256 Kernen läuft &#8211; und zwar ohne  Leistungseinbußen.</p>
<p>Hierfür ist laut Mario zunächst einmal ein  passendes Profiling-Tool wie der <a href="http://software.intel.com/en-us/intel-vtune/" target="_blank">Intel VTune Performance Analyzer</a> erforderlich, mit dem man diejenigen Funktionen, Module und andere  Stellen des Quellcodes aufspürt, die für die meiste Rechenleistung und  -zeit verantwortlich sind. Denn das sind oft <em>die</em> Stellen, an denen  man als Software-Entwickler ansetzen sollte. In vielen Fällen sind das  zum Beispiel Schleifenkonstrukte, die sich bestens zum Parallelisieren  eignen.</p>
<p>Eine der passenden Programmiermodelle wusste Mario  natürlich gleich darzustellen: <a title="Workshop: parallel Programmieren mit OpenMP" href="http://www.software-dev-blog.de/parallel-programmieren-mit-openmp/02/2009/">OpenMP</a>. Allerdings weist diese  pragma-basierte Parallelisierung von seriellen Anwendungen auch diverse  Nachteile auf: Man denkt als Programmierer in Threads anstatt in  Tasks (was laut Mario eigentlich ein absolutes No-Go sein sollte), es  lassen sich keine eingebetteten Parallelkonstrukte realisieren und mit  lokalen Daten geht OpenMP ebenfalls nur suboptimal um. Aber für die  schnellen ersten Ergebnisse für parallel ausführbare Programme ist  OpenMP laut Mario eine gute Wahl.</p>
<p><span id="more-1387"></span>Außerdem unterstützt OpenMP  keine objektorientierten Programmiersprachen wie C++, was natürlich in  vielen Fällen ein klares KO-Kriterium ist. Aber wozu gibt es  beispielsweise die <a title="Intel TBB 3.0 mit neuen Funktionen und VS2010-Support" href="http://www.software-dev-blog.de/intel-tbb-3-0-mit-neuen-funktionen-und-vs2010-support/05/2010/">Intel Threading Building Blocks</a>. Mit dieser Thread-sicheren, hochoptimierten Sammlung von fertigen C++-Konstrukten  lassen sich sequentiell programmierte Anwendungen recht schnell und ohne  größere Kenntnisse der Parallelprogrammierung in parallel ablaufende  Programme umwandeln. Praktisch an Intel TBB ist deren Vielseitigkeit: OS-seitig werden  Linux, Mac OS und Windows unterstützt, und es gibt sogar eine  nicht-kommerzielle Variante, die den <a href="http://de.wikipedia.org/wiki/GNU_Lesser_General_Public_License" target="_blank">LGPL-Lizenzrichtlinien</a> unterliegt.</p>
<p>Neben OpenMP und Intel TBB existieren noch weitere  Ansätze, wie sich Software parallelisieren lässt. Dazu gehört das noch recht junge Projekt <a href="http://software.intel.com/en-us/articles/intel-cilk/" target="_blank">Cilk++ von Intel</a>, das einen ähnlichen Weg einschlägt wie Intel TBB, allerdings einen Parallel Debugger sein Eigen nennt, ein SDK bietet und auf hunderten von Prozessorkernen skalieren soll. Und vergessen sollte man natürlich auch nicht <a title="Beta-Tester von Parallel Studio werden" href="http://www.software-dev-blog.de/beta-tester-von-parallel-studio-werden/04/2010/">Parallel Studio</a>, das unter anderem die Tools <a title="Parallel Inspector" href="http://www.software-dev-blog.de/multicore-turbo-fur-visual-studio-intel-parallel-studio/10/2008/ ">Parallel Inspector</a> und <a title="Parallel Amplifier" href="http://www.software-dev-blog.de/isc’09-intel-parallel-amplifier-im-detail/04/2009/">Parallel Amplifier</a> aufweist, mit deren Hilfe man Fehler im Quellcode aufspüren kann (Inspector) und sich die Anwendung weiter optimieren lässt (Amplifier). Das geht sogar so weit, dass Laufzeitfehler wie Race Conditions und Dead Locks aufgespürt werden können &#8211; bevor dies der Anwender später tut.</p>
<p>So, und die Sessions von Oliver Sturm und Bernd Marquardt sind dann morgen dran. Versprochen!</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/dotnet-cologne-2010-ein-voller-erfolg-teil-2/06/2010/&via=sw_devtwits&text=dotnet Cologne 2010, ein voller Erfolg - Teil 2&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/dotnet-cologne-2010-ein-voller-erfolg-teil-2/06/2010/&via=sw_devtwits&text=dotnet Cologne 2010, ein voller Erfolg - Teil 2&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/dotnet-cologne-2010-ein-voller-erfolg-teil-2/06/2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>dotnet Cologne 2010 war ein voller Erfolg!</title>
		<link>http://www.software-dev-blog.de/dotnet-cologne-2010-war-ein-voller-erfolg/05/2010/</link>
		<comments>http://www.software-dev-blog.de/dotnet-cologne-2010-war-ein-voller-erfolg/05/2010/#comments</comments>
		<pubDate>Mon, 31 May 2010 07:27:19 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Konferenz]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1385</guid>
		<description><![CDATA[Die letzte Woche war für mich mal wieder sehr event-haltig: Mittwoch und Donnerstag war ich auf der Droidcon 2010 in Berlin, am Freitag verschlug es mich dann nach Köln der dotnet Cologne 2010 wegen, und kaum war ich von meiner Reise zurück, unternahm ich am Samstag noch einen kurzen Abstecher in Richtung GamesCamp Munich 2010, [...]]]></description>
			<content:encoded><![CDATA[<p>Die letzte Woche war für mich mal wieder sehr event-haltig: Mittwoch und Donnerstag war ich auf der <a href="http://www.it-techblog.de/droidcamp-2010-android-everywhere/05/2010/" target="_blank">Droidcon 2010 in Berlin</a>, am Freitag verschlug es mich dann nach Köln der <a href="http://www.it-techblog.de/droidcamp-2010-android-everywhere/05/2010/">dotnet Cologne 2010</a> wegen, und kaum war ich von meiner Reise zurück, unternahm ich am Samstag noch einen kurzen Abstecher in Richtung <a href="http://www.software-dev-blog.de/ruckschau-das-war-das-gamecamp-munich-2009/06/2009/" target="_self">GamesCamp Munich</a> 2010, die vom lieben Kollegen <a href="http://twitter.com/flobbymedia" target="_blank">Flo Bergmann</a> organisiert wurde.</p>
<p>Da es auf diesem Blog ja um das Thema Multicore-Programmierung geht, widmet sich dieser Blogbeitrag der dotnet Cologne 2010. Zunächst einmal möchte ich den Organisatoren rund um <a href="http://twitter.com/deralbert" target="_blank">Albert Weinert</a>, <a href="http://twitter.com/rolandweigelt" target="_blank">Roland Weigelt</a> und all den anderen ein großes Kompliment aussprechen: Ihr habt da wirklich ein tolles Event mit tollen Themen, Sessions und Sprechern organisiert. Ok, dass der Kaffee nicht immer warm war und die Technik gleich mal am Anfang nicht so recht wollte, übersehe ich gerne. Wichtig ist doch, dass die Inhalte stimmen und gut rübergebracht werden. Und das war auf jeden Fall so. Also zumindest kann ich das von den Vorträgen behaupten, die ich besucht habe.</p>
<p>Meine persönliche Sessionplanung umfasste vier Vortragende: Rami Radi und Mario Deilmann von Intel, den sehr unterhaltsamen Oliver Sturm und zu guter Letzt den werten <a title="prio.powerday: Parallele Programmierung unter .NET 3.5" href="http://www.software-dev-blog.de/priopowerday-parallele-programmierung-unter-net-35/04/2009/">Bernd Marquardt</a>, der auf solch einer Veranstaltung natürlich nicht fehlen darf (und den ich im Juni auf den <a href="http://www.dotnetpro-powerday.de/Anmeldung/Anmeldung-dotnetpro.powerdays-vom-22.06.-23.06.2010" target="_blank">dotnetpro powerdays</a> wieder erleben werde).</p>
<p><span id="more-1385"></span>Ramis Session war <a href="http://www.software-dev-blog.de/wie-net-entwickler-mit-vtune-bottlenecks-finden-konnen/11/2009/">wie immer</a> sehr technisch orientiert und fand wegen der vielen Codebeispiele das Interesse der Zuhörenden, die sich im Raum &#8220;Bremen&#8221; eingefunden hatten. Und die wurden auch nicht enttäuscht: Rami legte sehr unterhaltsam dar, wie das Dreigestirn Windows 7, .NET 4 und Multicore-Architekturen voneinander profitieren. Dabei ging es unter anderem um ein wenig Grundlagenwissen in Sachen <a title="Mehr Multithread-Leistung mit dem Intel Core i7 Prozessor" href="http://www.software-dev-blog.de/mehr-multithread-leistung-mit-dem-intel-core-i7-prozessor/11/2008/">Nehahlem</a>, also Turbo Boost, Quickpath-Architektur und andere Dinge.</p>
<p>Aber auch über die Verbesserungen von .NET 4 aus Multicore-Sicht wusste Rami anschaulich zu berichten: So stellte er Features wie Thread Scheduling, Thread Pooling, <a href="http://msdn.microsoft.com/en-us/library/0xy59wtx.aspx" target="_blank">Garbabe Collection</a>, <a href="http://msdn.microsoft.com/en-us/library/dd460717.aspx" target="_blank">TPL</a> sowie <a title="Multicore-Programmierung im .NET-Umfeld – Teil 3" href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-3/02/2009/">PLINQ</a> vor. Dabei gewährte er interessante Einblicke und verriet wichtige Details wie die parallele Aktualisierung von Gen-0- und Gen-2-Daten, die bei der Garbage Collection anfallen. Zudem ging er näher auf das <a href="http://blogs.msdn.com/b/jennifer/archive/2009/06/26/work-stealing-in-net-4-0.aspx" target="_blank">Work-Stealing</a> des in .NET 4 komplett überarbeitenden Thread Managers ein, bei der sich unterbeschäftigte Thread-Queues einfach Threads anderer Queues &#8220;klauen&#8221; können und so die Effizienz des Threadpool-Managers steigern.</p>
<p>Sehr erstaunlich fand ich auch die Tatsache, dass unter .NET 4 nun nicht mehr 25 Threads pro CPU verwaltet werden können, sondern derer 250! Hierfür ist allerdings ein sehr guter Scheduler notwendig, was Microsoft mit dem neuen .NET-Framework wohl gelungen ist.</p>
<p>Nach so viel Theorie wurde es dann sehr praktisch: Rami zeigte all die Verbesserungen unter .NET 4 im Hinblick auf seine Multicore-Fähigkeiten anhand eines Maze-Solvers, bei dem es um den den schnellsten Weg innerhalb eines Labyrinths von A nach B geht. Hierzu bediente er sich eines kleinen .NET-Programms, das er einmal unter .NET 3.5 und .NET 4 laufen ließ. Alleine schon der Umstieg von der älteren auf das brandneue Framework brachte beim Zeichnen des Labyrinths und dem anschließenden Finden des optimalen Wegs Zeitverbesserungen. Ganz zu Schweigen vom Unterschied zwischen dem seriell programmierten Programm und der Multicore-Variante mit mehreren Threads.</p>
<p>Abschließend startete Rami noch ein wenig den <a title="VTune Performance Analyzer" href="http://www.software-dev-blog.de/quellcode-schwachstellen-mit-intel-vtune-aufspuren/11/2008/">VTune Performance Analyzer</a>, um der anwesenden Zuhörerschaft zu demonstrieren, wie sich mit dem Intel-Tool in .NET-Anwendungen solch hässliche Dinge wie Bottlenecks und False-Sharing-Probleme aufspüren lassen. Und wenn die Zeit nicht auf einmal vorbei gewesen wäre, hätte Rami wohl weitere zwei Stunden damit zugebracht, VTune in all seinen Facetten und mit all seinen Möglichkeiten vorzuführen.</p>
<p>Und was Mario, Oliver und Bernd in petto hatten, erfahrt ihr im zweiten Teil meiner dotnet-Cologne-2010-Berichterstattung.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/dotnet-cologne-2010-war-ein-voller-erfolg/05/2010/&via=sw_devtwits&text=dotnet Cologne 2010 war ein voller Erfolg!&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/dotnet-cologne-2010-war-ein-voller-erfolg/05/2010/&via=sw_devtwits&text=dotnet Cologne 2010 war ein voller Erfolg!&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/dotnet-cologne-2010-war-ein-voller-erfolg/05/2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>dotnet Cologne 2010 inkl. Parallelprogrammierung</title>
		<link>http://www.software-dev-blog.de/dotnet-cologne-2010-inkl-parallelprogrammierung/05/2010/</link>
		<comments>http://www.software-dev-blog.de/dotnet-cologne-2010-inkl-parallelprogrammierung/05/2010/#comments</comments>
		<pubDate>Fri, 21 May 2010 15:28:06 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Konferenz]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1383</guid>
		<description><![CDATA[Auf dem IT-techBlog hab ich&#8217;s schon verraten: Nächste Woche bin ich so richtig auf Achse. Mit den Stationen Berlin, Hamburg und Köln komme ich ganz gut rum in der Republik. Hoffen wir mal, dass der isländische Vulkan nix dagegen hat (ok, einen Teil der Strecken fahre ich ohnehin Zug). In Köln bin ich, weil Intel [...]]]></description>
			<content:encoded><![CDATA[<p>Auf dem IT-techBlog hab ich&#8217;s <a title="MeeGo ist tatsächlich das Beste von Moblin und Maemo" href="http://www.it-techblog.de/meego-ist-tatsachlich-das-beste-von-moblin-und-maemo/05/2010/" target="_blank">schon verraten</a>: Nächste Woche bin ich so richtig auf Achse. Mit den Stationen Berlin, Hamburg und Köln komme ich ganz gut rum in der Republik. Hoffen wir mal, dass der isländische Vulkan nix dagegen hat (ok, einen Teil der Strecken fahre ich ohnehin Zug).</p>
<p>In Köln bin ich, weil Intel dort einen Teil des Sponsorings übernommen hat und ich live aus dem Holiday Inn berichten werde, in dem die dotnet Cologne 2010 stattfindet. Das Programm habe ich ja schon <a title="Dotnet Cologne 2010 nimmt Konturen an" href="http://www.software-dev-blog.de/dotnet-cologne-2010-nimmt-konturen-an/03/2010/">in großen Teilen vorgestellt</a>. Allerdings haben sich seitdem zwei Änderungen ergeben, die vor allem Intel betreffen. Und die will ich euch natürlich nicht vorenthalten.</p>
<p>Zum einen wird <a title="Microsoft und Intel zeigen paralleles Programmieren" href="http://www.software-dev-blog.de/microsoft-und-intel-zeigen-paralleles-programmieren/04/2009/">Mario Deilmann</a> nicht über <a href="http://www.software-dev-blog.de/isc09-parallele-programmierung-fur-den-mainstream/04/2009/">Intel Parallel Studio</a> mit .NET und Visual Studio sprechen, sondern im Rahmen einer Lunch-Session die bekanntesten <a href="http://www.dotnet-cologne.de/Vortraege.ashx#ParallelStudio" target="_blank">Windows-Modelle der Parallelprogrammierung</a> vorstellen. Dabei geht es sicherlich um <a title="Multithreading-Konzepte: OpenMP, APIs und Intel TBB" href="http://www.software-dev-blog.de/multithreading-konzepte-openmp-apis-und-intel-tbb/11/2008/">Multithreading-Konzepte</a> wie OpenMP, APIs und Intel TBB. Und sicherlich wird auch Parallel Studio seinen Platz finden, alleine schon wegen der <a title="Beta-Tester von Parallel Studio werden" href="http://www.software-dev-blog.de/beta-tester-von-parallel-studio-werden/04/2010/">Unterstützung seitens Visual Studio 2010</a>.</p>
<p>Zum anderen wird Kollege Rami Radi von Intel eine Stunde lang über Windows 7, .NET 4 und die Multicore-Programmierung sprechen. Wer sich hier schon länger tummelt, wird sich möglichweise daran erinnern, dass Rami diesen Vortrag <a href="http://www.software-dev-blog.de/videochat-wie-net-entwickler-von-multihreading-profitieren/11/2009/">schon mal gehalten hat</a>. Womit er allerdings nicht minder aktuell wäre, denn das Thema Parallelprogrammierung hat mit <a href="http://www.software-dev-blog.de/videochat-wie-net-entwickler-von-multihreading-profitieren/11/2009/">Visual Studio 2010 und .NET 4</a> ja schließlich gerade erst begonnen.</p>
<p>Für alle, die der dotnet Cologne 2010 leider nicht beiwohnen können, folgt hier die gute Nachricht: Ich werde für euch von dort einen ganzen Tag lang über die wichtigsten und interessantesten Sessions in Sachen Parallelprogrammierung berichten. Macht euch schon mal einen dicken, roten Kringel um den 28. Mai 2010!</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/dotnet-cologne-2010-inkl-parallelprogrammierung/05/2010/&via=sw_devtwits&text=dotnet Cologne 2010 inkl. Parallelprogrammierung&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/dotnet-cologne-2010-inkl-parallelprogrammierung/05/2010/&via=sw_devtwits&text=dotnet Cologne 2010 inkl. Parallelprogrammierung&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/dotnet-cologne-2010-inkl-parallelprogrammierung/05/2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dotnet Cologne 2010 nimmt Konturen an</title>
		<link>http://www.software-dev-blog.de/dotnet-cologne-2010-nimmt-konturen-an/03/2010/</link>
		<comments>http://www.software-dev-blog.de/dotnet-cologne-2010-nimmt-konturen-an/03/2010/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 11:10:40 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Konferenz]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1347</guid>
		<description><![CDATA[Wer sich für die Themen .NET, C#, Parallelprogrammierung und andere Dinge interessiert, sollte jetzt unbedingt weiterlesen (allen anderen empfehle ich diese Lektüre). Denn am 28. Mai 2010 findet in Köln die zweite Community-Konferenz Dotnet Cologne 2010 statt. Das Gute daran: Das Programm dieser Veranstaltung steht zu weiten Teilen schon. Und es sind viele interessante Vorträge [...]]]></description>
			<content:encoded><![CDATA[<p>Wer sich für die Themen <a href="http://www.software-dev-blog.de/tag/dotnet/">.NET</a>, C#, <a href="http://www.software-dev-blog.de/tag/openmp/">Parallelprogrammierung</a> und andere Dinge interessiert, sollte jetzt unbedingt weiterlesen (allen anderen empfehle ich <a href="http://www.it-techblog.de/take-3-iphone-developer-conference-2010-kommt/03/2010/" target="_blank">diese Lektüre</a>). Denn am 28. Mai 2010 findet in Köln die zweite Community-Konferenz <a href="http://www.dotnet-cologne.de/MainPage.ashx" target="_blank">Dotnet Cologne 2010</a> statt. Das Gute daran: <a href="http://www.dotnet-cologne.de/Agenda.ashx" target="_blank">Das Programm dieser Veranstaltung</a> steht zu weiten Teilen schon. Und es sind viele interessante Vorträge dabei. Kleiner Auszug gefällig?</p>
<ul>
<li>Funktionale Programmierung in C# 3.0 (<a href="http://www.dotnet-cologne.de/Sprecher.ashx" target="_blank">Oliver Sturm</a>)</li>
<li>Anpassbare Anwendungen mit Windows Workflow 4 (Dariusz Paris von Microsoft)</li>
<li><a href="http://www.software-dev-blog.de/aus-seriell-mach-parallel-intel-parallel-advisor-lite/03/2010/">Intel Parallel Studio</a> mit .NET und Visual Studio (Mario Deilmann von Intel)</li>
<li><a href="http://www.software-dev-blog.de/tag/debuggen/">Debugging</a> in Deep mit VS2010 und WinDbg (Gregor Biswanger)</li>
<li>Parallelprogrammierung mit der <a href="http://www.software-dev-blog.de/idf09-parallel-computing-mit-net-4-und-visual-studio-2010/09/2009/">TPL</a> (<a href="http://www.software-dev-blog.de/priopowerday-parallele-programmierung-unter-net-35/04/2009/">Bernd Marquardt</a>)</li>
<li>und viele andere</li>
</ul>
<p>Das ist nur das vorläufige Programm. Der ganze Tag besteht aus vier parallelen Teilen, in denen insgesamt 24 Vorträge plus Auftaktrede und fünf Lunch-Sessions stattfinden sollen. Da könnt ihr euch auf einiges gefasst machen.</p>
<p>Und damit der Tag nicht nur aus Arbeit besteht, beginnt um etwa halb sieben der unterhaltsame Teil der Dotnet Cologne mit Verlosung und anschließender Grillparty (hoffentlich passt das Wetter). Müst ihr da nicht dabei sein? <a title="Hier für die dotnet Cologne 2010 anmelden" href="http://www.dotnet-cologne.de/Anmeldung.ashx" target="_blank">Doch, ich finde schon</a>. Ihr solltet euch allerdings beeilen, denn so richtig viele Plätze gibt es nicht mehr (es ist von etwa 50 die Rede). Also, wir sehen uns, oder?!</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/dotnet-cologne-2010-nimmt-konturen-an/03/2010/&via=sw_devtwits&text=Dotnet Cologne 2010 nimmt Konturen an&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/dotnet-cologne-2010-nimmt-konturen-an/03/2010/&via=sw_devtwits&text=Dotnet Cologne 2010 nimmt Konturen an&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/dotnet-cologne-2010-nimmt-konturen-an/03/2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Buchrezension: Parallelprogrammierung unter dotNET</title>
		<link>http://www.software-dev-blog.de/buchrezension-parallelprogrammierung-unter-dotnet/12/2009/</link>
		<comments>http://www.software-dev-blog.de/buchrezension-parallelprogrammierung-unter-dotnet/12/2009/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 12:33:25 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Buchtipp]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1272</guid>
		<description><![CDATA[Das Thema Paralllel Computing beschäftigt mich hier auf diesem Blog schon seit mehr als einem Jahr. Und so kurz vor Weihnachten hab ich die perfekte Geschenkempfehlung für alle dotNET-Entwickler, die sich selbst oder andere in Form eines Buches eine Freude machen wollen. Sein Titel (also der des Buches): &#8220;Parallel Computing in .NET&#8221;. Sein Autor: Marc [...]]]></description>
			<content:encoded><![CDATA[<p>Das Thema Paralllel Computing beschäftigt mich hier auf diesem Blog schon seit mehr als einem Jahr. Und so kurz vor Weihnachten hab ich die perfekte Geschenkempfehlung für alle <a href="http://www.software-dev-blog.de/tag/dotnet/" target="_self">dotNET-Entwickler</a>, die sich selbst oder andere in Form eines Buches eine Freude machen wollen.</p>
<p>Sein Titel (also der des Buches): &#8220;Parallel Computing in .NET&#8221;. Sein Autor: <a href="http://www.sw-consultant.de/" target="_blank">Marc André Zhou</a>. Sein Umfang: rund 360 Seiten. Seine ISBN: 978-3-86802-038-0. Seine Mission: Wie mache ich dotNET-Entwicklern klar, dass sie von der sequentiellen Programmierung umsteigen sollten auf die parallele. So gesehen finde ich den Titel ein wenig unglücklich gewählt, wenngleich es in dem Buch natürlich auch um Parallel Computing geht. Doch zuvorderst sollen die Leser dieses gedruckten Leitfadens etwas über Multithreaden und Co. lernen.</p>
<p>Und hierfür hat der Autor wirklich sehr viel an Informationen zusammengetragen. Das beginnt mit einer kleinen Aufklärungsrunde in Sachen Parallel Computing (sic!), die sogar die parallelen Programmiermodelle betrachtet. Anschließend wird es ein wenig theoretisch, indem Zhou so Dinge wie das <a href="http://www.software-dev-blog.de/priopowerday-einfuhrung-in-die-parallele-programmierung/04/2009/" target="_self">Amdahlsche</a> und das Gustafson-Gesetz betrachtet. Das hilft auf jeden Fall für ein grundsätzliches Verständnis, wann die Parallelprogrammierung sinnvoll ist &#8211; und wann nicht.</p>
<p>Nach weiteren allgemeinen Informationen rund um die Regeln des Parallel Computing, aber auch des Projektmanagement und den Modellierungsmöglichkeiten geht es dann nahtlos über in das Basiswissen rund um <a href="http://www.software-dev-blog.de/videochat-wie-net-entwickler-von-multihreading-profitieren/11/2009/">Threads unter .NET</a>. Dies ist jedoch schon wieder fast veraltet, denn mit der <a href="http://www.software-dev-blog.de/videochat-mit-steve-teixeira-uber-parallelprogrammierung/11/2009/">Einführung von .NET 4.0</a> wird kein Mensch mehr von .NET-Threads und deren manuellem Erstellen reden.</p>
<p><span id="more-1272"></span>Dies weiß aber auch der Autor, und so betrachtet er natürlich auch die kommenden Techniken und Tools wie die <a href="http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-3/03/2009/">CLR-Threadpools</a>, die <a href="http://www.software-dev-blog.de/screencasts-zur-parallelen-programmierung-unter-net-4/06/2009/">Task Parallel Library</a>, <a href="http://www.software-dev-blog.de/idf09-parallel-computing-mit-net-4-und-visual-studio-2010/09/2009/">PLINQ</a>,  Parallel Computing/Programming mithilfe von <a href="http://www.software-dev-blog.de/interview-visual-studio-2010-und-seine-multicore-fahigkeiten/02/2009/">Visual Studio 2010</a> und die <a href="http://www.software-dev-blog.de/teched09-wie-die-ccr-net-entwicklern-bei-der-parallelprogrammierung-hilft/11/2009/">Concurrency and Coordination Runtime</a> im Detail. Und den Abschluss des Buches bildet eine genauere Betrachtung möglicher zukünftiger Programmiermodelle: <a href="http://msdn.microsoft.com/en-us/devlabs/dd795202.aspx" target="_blank">Axum</a> und <a href="http://social.msdn.microsoft.com/Forums/de-DE/stmdevlab/threads">Software Transaction Memory</a>.</p>
<p><em><strong>Fazit:</strong></em> &#8220;Parallel Computing in .NET&#8221; ist sicherlich eine gute Quelle für alle, die mehr wissen wollen zum Thema Parallelprogrammierung mithilfe des .NET-Frameworks. Es zeigt anschaulich und sehr detailliert, wohin die Reise gehen wird und was künftige Parallelprogrammierer erwartet, vor allem mit .NET 4.0. Anhand geeigneter Codebeispiele werden wohl selbst unerfahrene Multithread-Entwickler einen Zugang zu diesem nicht ganz trivialen Thema finden. Und für alle, die mehr wissen wollen zu diesem Buch, gibt es auf der <a href="http://www.entwickler-press.de/parallel/" target="_blank">zugehörigen Webseite</a> die passenden Infos.</p>
<p><em><strong>Surftipp:</strong></em> Falls ihr euch für die Quellcodebeispiele des Buches interessiert, solltet ihr mal <a title="Alle Sourcecode-Beispiele auf einen Klick" href="http://www.sw-consultant.de/KnowHow/PC_SourceCode.aspx" target="_blank">auf diesen Link klicken</a>.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/buchrezension-parallelprogrammierung-unter-dotnet/12/2009/&via=sw_devtwits&text=Buchrezension: Parallelprogrammierung unter dotNET&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/buchrezension-parallelprogrammierung-unter-dotnet/12/2009/&via=sw_devtwits&text=Buchrezension: Parallelprogrammierung unter dotNET&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/buchrezension-parallelprogrammierung-unter-dotnet/12/2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wie .NET-Entwickler mit VTune Bottlenecks finden können</title>
		<link>http://www.software-dev-blog.de/wie-net-entwickler-mit-vtune-bottlenecks-finden-konnen/11/2009/</link>
		<comments>http://www.software-dev-blog.de/wie-net-entwickler-mit-vtune-bottlenecks-finden-konnen/11/2009/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 11:20:15 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[teched09]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Workshop]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1248</guid>
		<description><![CDATA[Vergangene Woche auf der Microsoft TechEd Europe 2009 hatten wir die Gelegenheit, uns von Rami Radi zeigen zu lassen, wie .NET-Entwickler mithilfe des Profiling- und Samplingtools VTune Performance Analyzer Schwachstellen in ihren Anwendungen aufspüren und beheben können. Dabei geht es beispielsweise sehr oft um Schleifenkonstrukte, die unverhältnismäßig viel CPU-Zeit in Anspruch nehmen, was mit den [...]]]></description>
			<content:encoded><![CDATA[<p>Vergangene Woche auf der <a href="http://www.software-dev-blog.de/teched09-erste-videoeindrucke-aus-berlin/11/2009/">Microsoft TechEd Europe 2009</a> hatten wir die Gelegenheit, uns von <a href="http://www.software-dev-blog.de/videochat-wie-net-entwickler-von-multihreading-profitieren/11/2009/">Rami Radi</a> zeigen zu lassen, wie .NET-Entwickler mithilfe des Profiling- und Samplingtools <a href="http://www.software-dev-blog.de/quellcode-schwachstellen-mit-intel-vtune-aufspuren/11/2008/">VTune Performance Analyzer</a> Schwachstellen in ihren Anwendungen aufspüren und beheben können. Dabei geht es beispielsweise sehr oft um Schleifenkonstrukte, die unverhältnismäßig viel CPU-Zeit in Anspruch nehmen, was mit den richtigen Tricks gar nicht notwendig wäre. Für alle, die also in Zukunft mehr aus ihrer Software herausholen wollen, sei dieser Video-Workshop wärmstens empfohlen.</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="520" height="292" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/FGi5tzD5ihI&amp;hl=de_DE&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="520" height="292" src="http://www.youtube.com/v/FGi5tzD5ihI&amp;hl=de_DE&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/wie-net-entwickler-mit-vtune-bottlenecks-finden-konnen/11/2009/&via=sw_devtwits&text=Wie .NET-Entwickler mit VTune Bottlenecks finden können&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/wie-net-entwickler-mit-vtune-bottlenecks-finden-konnen/11/2009/&via=sw_devtwits&text=Wie .NET-Entwickler mit VTune Bottlenecks finden können&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/wie-net-entwickler-mit-vtune-bottlenecks-finden-konnen/11/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Screencasts zur Parallelprogrammierung unter .NET 4</title>
		<link>http://www.software-dev-blog.de/screencasts-zur-parallelprogrammierung-unter-net-4/07/2009/</link>
		<comments>http://www.software-dev-blog.de/screencasts-zur-parallelprogrammierung-unter-net-4/07/2009/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 12:39:16 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Screencast]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1110</guid>
		<description><![CDATA[Der Name Dariusz Parys ist regelmäßig wiederkehrenden Besuchern dieses Blogs ein bekannter Name: Entweder stellt er sich unseren Fragen oder veranstaltet gemeinsam mit Intel TechTalks oder nimmt Screencasts auf, die er zum Wohle aller online stellt. Und genau die haben es mir besonders angetan, da man in relativ kurzer Zeit eine Menge über das parallele [...]]]></description>
			<content:encoded><![CDATA[<p>Der Name Dariusz Parys ist regelmäßig wiederkehrenden Besuchern dieses Blogs ein bekannter Name: Entweder <a title="Interview mit Dariusz Parys" href="http://www.software-dev-blog.de/interview-visual-studio-2010-und-seine-multicore-fahigkeiten/02/2009/">stellt er sich unseren Fragen</a> oder <a title="Die TechTalks mit Intel und Microsoft als Videcast in voller Länge" href="http://www.software-dev-blog.de/videosessions-techtalks-mit-intel-und-microsoft/07/2009/">veranstaltet gemeinsam mit Intel TechTalks</a> oder nimmt <a title="Screencast von und mit Dariusz Parys" href="http://www.software-dev-blog.de/screencasts-zur-parallelen-programmierung-unter-net-4/06/2009/">Screencasts</a> auf, die er zum Wohle aller online stellt. Und genau die haben es mir besonders angetan, da man in relativ kurzer Zeit eine Menge über das parallele Programmieren unter .NET 4 mithilfe von Visual Studio 2010 lernen kann.</p>
<p>Daher hat&#8217;s mich sehr gefreut, dass ich heute Morgen zwei &#8220;neue&#8221; Screencasts&#8221; auf Channel 9 gefunden habe. <a title="Screencast von Dariusz Parys zum zum Thema &quot;Parallelisieren von Funktionen mit Parallel.Invoke&quot;" href="http://channel9.msdn.com/posts/Dariusz/Task-Parallel-Library-Parallel-Invoke/" target="_blank">Das erste beschäftigte sich mit der Frage</a>, wie sich die Klasse <em><strong>Parallel</strong></em> dazu nutzen lässt, mehrere Funktionsblöcke gleichzeitig auf mehreren Prozessorkernen ablaufen zu lassen. Hierzu stellt die Parallel-Klasse ein Methode zur Verfügung, die sich <em><strong>Invoke</strong></em> nennt.</p>
<p>Praktisch an dieser Form der Parallelisierung ist die Tatsache, das die gleichzeitig ablaufenden Funktionen nicht synchronisiert werden müssen. Der Mainthread wird nämlich erst dann fortgesetzt, wenn die parallelen Threads fertig sind. Darum kümmert sich die Concurrency Runtime.</p>
<p><a title="Task Parallel Library: Task Results " href="http://channel9.msdn.com/posts/Dariusz/Task-Parallel-Library-Task-Results/" target="_blank">Screencast Nummer 2</a> zeigt in nur sechs Minuten, wie sich Tasks definieren lassen, die einen Rückgabewert liefern. Auch das hat den großen Vorteil, dass der Mainthread nicht unnötig warten muss, bis ein oder mehrere parallel ablaufende Aufgaben fertig sind. Die Übergabe des Returnwertes sorgt nämlich für die Synchronisation des Programmablaufs. Schön daran ist zudem, dass sich auf diesem Weg mehrere Tasks verknüpfen lassen und so ein Folgetask mit dem Rückgabewert des Vorgängertasks &#8220;gefüttert&#8221; werden kann. Es lassen sich aber nicht nur einfache Werte, sondern auch Objekte übergeben.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/screencasts-zur-parallelprogrammierung-unter-net-4/07/2009/&via=sw_devtwits&text=Screencasts zur Parallelprogrammierung unter .NET 4&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/screencasts-zur-parallelprogrammierung-unter-net-4/07/2009/&via=sw_devtwits&text=Screencasts zur Parallelprogrammierung unter .NET 4&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/screencasts-zur-parallelprogrammierung-unter-net-4/07/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Screencasts zur Parallelen Programmierung unter .NET 4</title>
		<link>http://www.software-dev-blog.de/screencasts-zur-parallelen-programmierung-unter-net-4/06/2009/</link>
		<comments>http://www.software-dev-blog.de/screencasts-zur-parallelen-programmierung-unter-net-4/06/2009/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 14:39:17 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1080</guid>
		<description><![CDATA[Auf Channel 9 habe ich gerade drei sehr interessante Screencasts entdeckt, die Dariusz Parys dort eingestellt hat. Anhand sehr anschaulicher Beispiele zeigt Dariusz folgende Dinge: Task Parallel Library: Tasks In diesem Screencast geht es vor allem um eine Kernaussage: Vergesst Threads und denkt ab sofort in Tasks, also in einer abstrahierten Form von Threads. Warum [...]]]></description>
			<content:encoded><![CDATA[<p>Auf <a title="Channel 9, das Videoiportal von MSDN" href="http://channel9.msdn.com/" target="_blank">Channel 9</a> habe ich gerade drei sehr interessante Screencasts entdeckt, die <a title=" Interview: Visual Studio 2010 und seine Multicore-Fähigkeiten " href="http://www.software-dev-blog.de/interview-visual-studio-2010-und-seine-multicore-fahigkeiten/02/2009/">Dariusz Parys</a> dort eingestellt hat. Anhand sehr anschaulicher Beispiele zeigt Dariusz folgende Dinge:</p>
<div class="title">
<p><strong><a id="ctl00_MainPlaceHolder_Starter_TitleLink" href="http://channel9.msdn.com/posts/Dariusz/Task-Parallel-Library-Tasks/">Task Parallel Library: Tasks</a></strong></p>
<p>In diesem Screencast geht es vor allem um eine Kernaussage: Vergesst Threads und denkt ab sofort in Tasks, also in einer abstrahierten Form von Threads. Warum das so ist und welche Mechanismen der Threadpool des .NET-4-Frameworks hierfür bereithält, lernt ihr in dem Sechsminüter.</p>
<div class="title">
<p><strong><a id="ctl00_MainPlaceHolder_Starter_TitleLink" href="http://channel9.msdn.com/posts/Dariusz/Task-Parallel-Library-Task-Continuations/">Task Parallel Library: Task Continuations</a></strong></p>
<p>Dieser Screencast behandelt die Frage, wie sich einzelne Aufgaben (Tasks) mithilfe der Task-Klasse verketten lassen, um weitere Ereignisse möglichst einfach zu parallelisieren. Dies geschieht mithilfe des Aufrufs <em><strong>task.ContinueWith()</strong></em>.</p>
<div class="title">
<p><strong><a id="ctl00_MainPlaceHolder_Starter_TitleLink" href="http://channel9.msdn.com/posts/Dariusz/Task-Parallel-Library-Exception-Handling/">Task Parallel Library: Exception Handling</a></strong></p>
<p>In diesem Screencast geht es um die Fehlerbehandlung innerhalb von Tasks. Hierzu gibt es die Möglichkeit, per <em><strong>AggregateException</strong></em> mögliche Fehler zur Laufzeit abzufangen.</p>
<p>Ihr seht also: drei gute Gründe, euch die Screencasts anzusehen. Viel Spaß dabei!</p></div>
</div>
</div>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/screencasts-zur-parallelen-programmierung-unter-net-4/06/2009/&via=sw_devtwits&text=Screencasts zur Parallelen Programmierung unter .NET 4&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/screencasts-zur-parallelen-programmierung-unter-net-4/06/2009/&via=sw_devtwits&text=Screencasts zur Parallelen Programmierung unter .NET 4&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/screencasts-zur-parallelen-programmierung-unter-net-4/06/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zurück zum Multicore-Blogging: Post-Konferenzing</title>
		<link>http://www.software-dev-blog.de/zuruck-zum-multicore-blogging-post-konferenzing/04/2009/</link>
		<comments>http://www.software-dev-blog.de/zuruck-zum-multicore-blogging-post-konferenzing/04/2009/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 16:19:40 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Konferenz]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1029</guid>
		<description><![CDATA[Die vorige Woche stand ganz im Zeichen der Multicore-Konferenzen. Los ging&#8217;s am Montagabend in Salzburg bei Bier und Brez&#8217;n im Pitterkeller des ehrwürdigen Crown Plaza, wo ich mit netten Kollegen zusammensaß und über dies und das geplaudert habe. Das Dienstagsprogramm rankte sich dann um das Thema Multicore-Programmierung und Parallel Studio, aber auch um andere Dinge [...]]]></description>
			<content:encoded><![CDATA[<p>Die vorige Woche stand ganz im Zeichen der Multicore-Konferenzen. Los ging&#8217;s am Montagabend in Salzburg bei Bier und Brez&#8217;n im Pitterkeller des ehrwürdigen Crown Plaza, wo ich mit netten Kollegen zusammensaß und über dies und das geplaudert habe. Das Dienstagsprogramm rankte sich dann um das Thema <a title="Nach der Konferenz ist vor der Konferenz" href="http://www.software-dev-blog.de/nach-der-konferenz-ist-vor-der-konferenz/04/2009/">Multicore-Programmierung und Parallel Studio</a>, aber auch um andere Dinge wie das Nero-Engagement und Microsoft-Bemühungen.</p>
<p>Mittwoch ging es dann wieder nach München, damit ich am Donnerstag auch ja pünktlich auf der .NET-Multicore-Konferenz sein konnte, um von dort aus live zu bloggen. Was auch gut geklappt und zudem viel Spaß gemacht hat. Und es war nicht nur informativ, sondern auch sehr unterhaltsam, Ralf Westphal und Bernd Marquardt gemeinsam auf der Bühne zu erleben. Denn neben der geballten fachlichen Kompetenz konnten die zwei auch mit Entertainment-Qualitäten überzeugen. Stellenweise habe ich mich an meine Jugend erinnert gefühlt, in der Statler und Waldorf auf dem Muppet-Show-Balkon Ähnliches abgeliefert haben.</p>
<p><span id="more-1029"></span>Neben all der Unterhaltung stand natürlich das Fachliche im Vordergrund, und das war sehr fundiert. Es ging um wirklich spannende Dinge:</p>
<ul>
<li>Zunächst durfte Rami Radi von Intel die Konferenz <a title="prio.powerday: Multicore-Programmierung unter .NET" href="http://www.software-dev-blog.de/priopowerday-multicore-programmierung-unter-net/04/2009/">mit seiner Keynote</a> eröffnen. Sein Vortrag war (a) sehr folienlastig und (b) sehr informativ, wenngleich er dem ein oder anderen Zuhörer eine ganze Menge abverlangt hat. Mit Basics oder ähnlichem Ballast hat sich Rami erst gar nicht aufgehalten, sondern ging gleich in Medias Res. Wie gesagt: tough stuff!</li>
</ul>
<ul>
<li>Was dann kam, hätte ganz gut vor Ramis Grundsatzrede gepasst: Eine <a title="prio.powerday: Einführung in die parallele Programmierung" href="http://www.software-dev-blog.de/priopowerday-einfuhrung-in-die-parallele-programmierung/04/2009/">Einführung in das Thema Multicore-/Multithread-Programmierung</a>. Dort gingen Ralf und Bernd richtig interaktiv auf wichtige Fragen rund um die parallele Programmierung ein. Dazu gehören Latenzprobleme, der gemeinsame Zugriff auf Speicherressourcen, das Gesetz von Amdahl und der Umgang mit Threads.</li>
</ul>
<ul>
<li>Teil drei der Multicore-Konferenz brachte dann Statler und Waldorf, äh, Ralf und Bernd erneut gemeinsam auf die Bühne, damit sie über <a title="prio.powerday: Multithreading mit .NET-Bordmitteln" href="http://www.software-dev-blog.de/priopowerday-multithreading-mit-net-bordmitteln/04/2009/">Multithreading mit .NET-Bordmitteln</a> reden konnten (genauer: mit Bordmitteln des .NET-Frameworks). Dabei ging es um wichtige Aspekte wie die Steuerung von Threads, den .NET-Threadpool, asynchrone Methoden und atomare Anweisungen.</li>
</ul>
<ul>
<li>Nach der Mittagspause mussten dann Ralf und Bernd ohne ihre Alter Egos erneut &#8220;vors Mikro&#8221;, um über die <a title="prio.powerday: Parallele Programmierung unter .NET 3.5" href="http://www.software-dev-blog.de/priopowerday-parallele-programmierung-unter-net-35/04/2009/">parallele Programmierung unter .NET 3.5</a> einerseits und die <a title="prio.powerday: Microsoft Concurrency Coordination Runtime" href="http://www.software-dev-blog.de/priopowerday-concurrency-coordination-runtime/04/2009/">Microsoft Concurrency Coordination Runtime</a> anderseits zu referieren. Bernd erzählte unter anderem von der Schleifenparallelisierung, parallelen Aggregationen, von Task- und Future-Klassen und hatte sogar ein paar Tipps und Tricks dabei. Ralf seinerseits ging verstärkt auf das Thema Synchronisierung und das Warteschlangenprinzip der CCR ein.</li>
</ul>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/zuruck-zum-multicore-blogging-post-konferenzing/04/2009/&via=sw_devtwits&text=Zurück zum Multicore-Blogging: Post-Konferenzing&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/zuruck-zum-multicore-blogging-post-konferenzing/04/2009/&via=sw_devtwits&text=Zurück zum Multicore-Blogging: Post-Konferenzing&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/zuruck-zum-multicore-blogging-post-konferenzing/04/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>prio.powerday: Microsoft Concurrency Coordination Runtime</title>
		<link>http://www.software-dev-blog.de/priopowerday-concurrency-coordination-runtime/04/2009/</link>
		<comments>http://www.software-dev-blog.de/priopowerday-concurrency-coordination-runtime/04/2009/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 13:15:02 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Konferenz]]></category>
		<category><![CDATA[Liveblogging]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1026</guid>
		<description><![CDATA[Direkt nach Bernds Vortrag ist Ralf Westphal wieder dran und erzählt etwas zur Concurrency Coordination Runtime (CCR). Im Gegensatz zu Bernd geht es bei Ralfs Vortrag weniger um die Leistungssteigerung parallel programmierter Anwendungen als vielmehr um die optimale asynchrone Datenverarbeitung im parallelen .NET-Umfeld. Die CCR ermöglicht ein neues Programmiermodell für parallel laufende Anwendungen. Ein sehr [...]]]></description>
			<content:encoded><![CDATA[<p>Direkt nach <a title="prio.powerday: Parallele Programmierung unter .NET 3.5" href="http://www.software-dev-blog.de/priopowerday-parallele-programmierung-unter-net-35/04/2009/">Bernds Vortrag</a> ist Ralf Westphal wieder dran und erzählt etwas zur Concurrency Coordination Runtime (CCR). Im Gegensatz zu Bernd geht es bei Ralfs Vortrag weniger um die Leistungssteigerung parallel programmierter Anwendungen als vielmehr um die optimale asynchrone Datenverarbeitung im parallelen .NET-Umfeld.</p>
<p>Die CCR ermöglicht ein neues Programmiermodell für parallel laufende Anwendungen. Ein sehr schöner Ausspruch von Ralf lautet übrigens: &#8220;Vergesst Threads!&#8221;, da Threads synchronisiert werden müssen, was Ralf nicht wirklich mag. Um das besser verdeutlichen zu können, schreibt er in Echtzeit verschiedene kleinere Programme. Sehr schlau!</p>
<p>Das Besondere an der CCR ist das Warteschlangenprinzip: Jeder Befehl oder jedes Datum wird im Hintergrund aus der Warteschlange ausgelesen und verarbeitet, sobald eine Ressource frei ist. Damit müssen keine expliziten Threads erzeugt und wieder beendet werden, da sich die CCR automatisch darum kümmert. Hierfür steht die <a title="Infos zur DispatcherQueue-Klasse " href="http://msdn.microsoft.com/en-us/library/microsoft.ccr.core.dispatcherqueue.aspx" target="_blank">DispatcherQueue</a>-Klasse zur Verfügung.</p>
<p>Die CCR erlaubt sowohl den Einsatz des Standard-Threadpools als auch eigene Threadpools auf Dispatcher-Basis.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/priopowerday-concurrency-coordination-runtime/04/2009/&via=sw_devtwits&text=prio.powerday: Microsoft Concurrency Coordination Runtime&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/priopowerday-concurrency-coordination-runtime/04/2009/&via=sw_devtwits&text=prio.powerday: Microsoft Concurrency Coordination Runtime&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/priopowerday-concurrency-coordination-runtime/04/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>prio.powerday: Parallele Programmierung unter .NET 3.5</title>
		<link>http://www.software-dev-blog.de/priopowerday-parallele-programmierung-unter-net-35/04/2009/</link>
		<comments>http://www.software-dev-blog.de/priopowerday-parallele-programmierung-unter-net-35/04/2009/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 11:55:38 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Konferenz]]></category>
		<category><![CDATA[Liveblogging]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1024</guid>
		<description><![CDATA[Nach der Mittagspause ist Bernd Marquardt ohne sein Alter Ego an der Reihe. Sein Thema: Parallele Programmierung mithilfe des .NET-Frameworks 3.5, und zwar per TPL. Folgende Elemente kommen zum Einsatz: Parallele Erweiterungen für LINQ = PLINQ Schleifen parallelisieren: Die hierzu gehörige Klasse heißt System.Threading.Parallel. Schleifen werden auf mehrere Threads aufgeteilt werden, aber nur, wenn die [...]]]></description>
			<content:encoded><![CDATA[<p>Nach der Mittagspause ist Bernd Marquardt ohne sein Alter Ego an der Reihe. Sein Thema: Parallele Programmierung mithilfe des .NET-Frameworks 3.5, und zwar per TPL.</p>
<p>Folgende Elemente kommen zum Einsatz:</p>
<ul>
<li><strong>Parallele Erweiterungen</strong> für <a title="Multicore-Programmierung im .NET-Umfeld - Teil 3" href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-3/02/2009/">LINQ = PLINQ</a></li>
</ul>
<ul>
<li><strong>Schleifen parallelisieren:</strong> Die hierzu gehörige Klasse heißt <em><strong>System.Threading.Parallel</strong></em>. Schleifen werden auf mehrere Threads aufgeteilt werden, aber nur, wenn die einzelnen Schleifendurchläufe unabhängig voneinander sind. Dabei müssem die Indezies alle gleich sein. Am Ende der Schleife werden alle Threads synchronisiert. Fazit: Schleifenparallelisierung lohnt sich nur bei komplexen und großen Schleifen! Wichtig ist auch die richtige Verteilung einer Schleife auf die vorhandenen Prozessorressourcen. Dies gelingt, indem die einzelnen Schleifendurchläufe in kleinen Portionen verarbeitet werden.</li>
</ul>
<ul>
<li><strong>Aggregationen:</strong> Hierbei geht es um das Zusammenfassen von Ergebnissen. Dabei ist Locking meist erforderlich. Zwischenwerte werden über sogenannte ThreadLocateState weitergegeben. Der Ablauf sieht folgendes vor: Initialisierung, Zwischenspeichern der einzelnen Thread-Ergenisse und das abschließende Zusammenführen der Zwischenwerte inklusive Locking. Übrigens: Aufgrund des Zusammeführens der einzelnen Thread-Zwischenergebnisse kann ist bei der parallelen Ausführung zu Rundungsfehlern kommen und das Ergebnis weicht vom sequentiellen Programm ab.</li>
</ul>
<p><span id="more-1024"></span></p>
<ul>
<li><strong>Codeblöcke parallelisieren:</strong> Hier kommt die Invoke-Methode zum Einsatz.</li>
</ul>
<ul></ul>
<ul>
<li><strong>Die Task-Klasse:</strong> Diese funktioniert ähnlich wie die ThreadPool-Klasse und haben dieser gegenüber wesentliche Vorteile: Sie lassen sich mit <em><strong>wait() </strong></em>synchronisieren und abbrechen. Interessant an dieser Task-Klasse ist die Tatsache, dass dahinter ein spezieller Thread-Pool steckt, der deutlich schneller als der Standard-Threadpool arbeitet.</li>
</ul>
<ul>
<li><strong>Die Future-Klasse:</strong> Sie ist abgeleitet von der Task-Klasse und ermöglicht die asynchrone Berechnung von Daten. Dabei wird auf Daten, die noch berechnet werden, automatisch gewartet oder das Endergebnis sofort ausgegeben. Die Future-Klasse eignet sich übrigens dazu, die Bedienoberfläche von Hintergrundberechnungen zu entkoppeln und damit die Anwendungen performanter zu machen.</li>
</ul>
<ul>
<li><strong>Concurrent Exceptions:</strong> Im Gegensatz zu sequentiellen Anwendungen können in parallelisierten Applikationen zu einer bestimmten Zeit mehrere Exceptions ausgeworfen werden. Hierfür ist natürlich ein anderer Exception-Mechanismus erforderlich. So müssen zum Beispiel im Falle einer Exception mehrere Threads gleichzeitig angehalten werden.</li>
</ul>
<ul>
<li><strong>Synchronisierung:</strong> Hierfür sind diverse Klassen im .NET-Framework vorhanden wie Lazyinit und WriteOnce.</li>
</ul>
<p><strong>Tipps und Tricks: </strong></p>
<ul>
<li>Bei <em><strong>Parallel.For</strong></em> und <em><strong>Parallel.ForEach</strong></em> muss die (Anzahl der Durchläufe * Dauer) auf jeden Fall groß genug sein (beispielsweise schlägt bei der Matrix-Multiplikation die Parallelisierung erst bei sehr großen Matrizen voll durch).</li>
<li>Nur äußere Schleifen parallelisieren wegen der Abhängigkeiten der Variablen</li>
<li>Amdahl&#8217;s Gesetz berücksichtigen</li>
</ul>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/priopowerday-parallele-programmierung-unter-net-35/04/2009/&via=sw_devtwits&text=prio.powerday: Parallele Programmierung unter .NET 3.5&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/priopowerday-parallele-programmierung-unter-net-35/04/2009/&via=sw_devtwits&text=prio.powerday: Parallele Programmierung unter .NET 3.5&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/priopowerday-parallele-programmierung-unter-net-35/04/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>prio.powerday: Multithreading mit .NET-Bordmitteln</title>
		<link>http://www.software-dev-blog.de/priopowerday-multithreading-mit-net-bordmitteln/04/2009/</link>
		<comments>http://www.software-dev-blog.de/priopowerday-multithreading-mit-net-bordmitteln/04/2009/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 09:47:18 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Konferenz]]></category>
		<category><![CDATA[Liveblogging]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1022</guid>
		<description><![CDATA[Und weiter geht&#8217;s. Bernd und Ralf gehen jetzt näher auf das Thema Multithreading mit .NET-Bordmitteln ein. Hierbei gibt es verschiedene Aspekte: Statisches Threading birgt vor allem ein Problem: Es gibt statische Variablen, die von mehreren Threads gleichzeitig schreibend genutzt werden können. Threading mit instanzierten Klassen: Jeder Thread hat seine eigene Instanz, also zum Beispiel seine [...]]]></description>
			<content:encoded><![CDATA[<p>Und weiter geht&#8217;s. Bernd und Ralf gehen jetzt näher auf das Thema Multithreading mit .NET-Bordmitteln ein. Hierbei gibt es verschiedene Aspekte:</p>
<ul>
<li><strong>Statisches Threading</strong> birgt vor allem ein Problem: Es gibt statische Variablen, die von mehreren Threads gleichzeitig schreibend genutzt werden können.</li>
</ul>
<ul>
<li><strong>Threading mit instanzierten Klassen:</strong> Jeder Thread hat seine eigene Instanz, also zum Beispiel seine eigenen Variablen, was natürlich ein wenig mehr Ressourcen kostet.</li>
</ul>
<ul>
<li><strong>Steuerung von Threads:</strong> Hierbei geht es um die Priorisierung von Threads sowie das Starten, Pausieren und Stoppen von Threads. Die Herausforderung ist hier der jeweils richtige Zeitpunkt, ein Thread zu manipulieren. Außerdem muss man feststellen können, ob ein Thread gewollte beendet wurde. Dies kann per Bool&#8217;scher Variable erreicht werden.</li>
</ul>
<p><span id="more-1022"></span></p>
<ul>
<li><strong>.NET-Threadpool: </strong>Der Pool soll ein einfaches Arbeiten mit mehreren Threads ermöglichen. Diese Threads &#8220;leben&#8221; meist relativ lang oder werden regelmäßig wiederkehrend benötigt. Es gibt eine maximale Anzahl an Threads innerhalb eines Pools. Wir ein Pool-Thread 30 Sekunden nicht benötigt, wird der Thread aus dem Pool entfernt. Schwierig dabei kann auch sein, dass ein neuer Pool-Thread erst nach einer halben Sekunde erzeugt wird, wenn kein laufender Thread in dieser Zeit beendet wird. Und: Jeder Prozess hat seinen eigenen Thread-Pool.</li>
</ul>
<ul>
<li><strong>Asynchrone Methoden:</strong> Einzelne Aufgaben werden in eigenen Threads ausgeführt. Die hierzu benötigten Methoden heißen <em><strong>BeginInvoke</strong></em> und <em><strong>EndInvoke</strong></em>. Allerdings sind diese Methoden kaum sinnvoll anwendbar.</li>
</ul>
<ul>
<li><strong>BackgroundWorker:</strong> Besteht aus drei Klassen: DoWork, ProgressChanged und ReportProgress.</li>
</ul>
<ul>
<li><strong>Synchronisierung:</strong> Im .NET-Framework gibt es Klassen für die Synchronisierung von Objekten.</li>
</ul>
<ul>
<li><strong>Atomare Anweisungen:</strong> Viele Befehle dürfen nicht unterbrochen werden. Daher stellt die Interlocked-Klasse sicher, das Grundbefehle vollständig ausgeführt werden, wenn mehrere Threads auf die Variablen zugreifen können: Increment/Decrement, Exchange, CompareExchange, Read (new), Add (new). Dies ist zum Beispiel für Sortieralgorithmen wichtig.</li>
</ul>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/priopowerday-multithreading-mit-net-bordmitteln/04/2009/&via=sw_devtwits&text=prio.powerday: Multithreading mit .NET-Bordmitteln&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/priopowerday-multithreading-mit-net-bordmitteln/04/2009/&via=sw_devtwits&text=prio.powerday: Multithreading mit .NET-Bordmitteln&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/priopowerday-multithreading-mit-net-bordmitteln/04/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>prio.powerday: Einführung in die parallele Programmierung</title>
		<link>http://www.software-dev-blog.de/priopowerday-einfuhrung-in-die-parallele-programmierung/04/2009/</link>
		<comments>http://www.software-dev-blog.de/priopowerday-einfuhrung-in-die-parallele-programmierung/04/2009/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 08:28:56 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Konferenz]]></category>
		<category><![CDATA[Liveblogging]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1020</guid>
		<description><![CDATA[Jetzt sind mit kaum einer halben Stunde Verspätung Ralf Westphal und Bernd Marquardt dran. Sie wollen uns erst mal erzählen, was parallele Programmierung eigentlich bedeutet. Zunächst geht es um echte Basics wie Multithreading mit Single- und Multicores. Fakt ist: Multithreading allein bringt gar nichts, dafür sind mehrere Prozessoren und die Zerlegung eines Programms in parallel [...]]]></description>
			<content:encoded><![CDATA[<p>Jetzt sind mit kaum einer halben Stunde Verspätung Ralf Westphal und Bernd Marquardt dran. Sie wollen uns erst mal erzählen, was parallele Programmierung eigentlich bedeutet.</p>
<p>Zunächst geht es um echte Basics wie Multithreading mit Single- und Multicores. Fakt ist: Multithreading allein bringt gar nichts, dafür sind mehrere Prozessoren und die Zerlegung eines Programms in parallel zu verarbeitenden Bereiche notwendig.</p>
<p>Eine weitere Herausforderung sind Latenzzeiten, die sich aus asynchroner Prozessorverarbeitung ergeben. Das lässt sich mithilfe einer Kombination aus Multithreading und Multitasking auf mehreren Prozessoren optimieren.</p>
<p>Es gilt aber zugleich, den Durchsatz zu erhöhen. Dies gelingt ausschließlich auf Multicore-Systemen.</p>
<p>Es gibt ein grundsätzliches Problem bei der Parallelverarbeitung: den Zugriff auf gemeinsame Ressourcen. Diese Herausforderung meistern Zugriffskontrollen mithilfe explizierter Sperren. Hierfür sperren zum Beispiel einzelne Tasks gemeinsamen Speicher. Allerdings müssen die Zeitspannen und die Granularität dieser Sperren genau passen. Ein große Gefahr hierbei sind übrigens mögliche Deadlocks, die gerade bei parallel programmierten Anwendungen erst zur Laufzeit auftreten. Deadlocks lassen sich durch dieselbe Sperrreihenfolge vermeiden.</p>
<p><span id="more-1020"></span>Jetzt redet Bernd über Data Races, die immer dann entstehen, wenn mehrere Threads auf dieselbe Ressource wie eine Variable schreibend zugreifen. Und das ist leider nicht vorhersehbar, da der schnellere Thread meist &#8220;gewinnt&#8221;.</p>
<p>Abschließend geht Bernd noch auf das <a title="Multicore-Programmierung im .NET-Umfeld - Teil 1" href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-1/01/2009/">Gesetz von Amdahl</a> ein. Das hat mit dem Aspekt zu tun, dass die meisten Anwendungen nicht vollständig parallelisiert werden können bzw. sollen. Daher ist die Temposteigerung von seriellen Programmen, die parallelisiert werden, meist nicht optimal. Und das bedeutet laut Amdahl, dass der sequenzielle Teil einer Anwendung maßgeblich für die Temposteigerung zuständig ist.</p>
<p>Eine weitere Einschränkung bei der Geschwindigkeitssteigerung sind limitierende Faktoren wie das Erzeugen und Zerstören von Threads, Cache-Synchronisierungen und so fort. Die Erzeugung eines Threads dauert zum Beispiel so lang wie die Addition von 1.000 Integer-Zahlen. Abhilfe schaffen <a title="Workshop: Alles über .NET-Threads - Teil 3" href="http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-3/03/2009/"><strong>Threadpools</strong></a>, mit deren Hilfe ein Thread einmal erzeugt wird und dann immer wieder zur Verfügung steht. Wichtig ist aber auch die Granularität der Threads, damit die vorhandenen Ressourcen optimal genutzt werden.</p>
<p><strong>Fazit:</strong> Es gibt je nach Rechendauer und -aufwand einen optimalen Parallelisierungsgrad. Und Threadpools helfen, parallelisierte Anwendungen zu beschleunigen.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/priopowerday-einfuhrung-in-die-parallele-programmierung/04/2009/&via=sw_devtwits&text=prio.powerday: Einführung in die parallele Programmierung&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/priopowerday-einfuhrung-in-die-parallele-programmierung/04/2009/&via=sw_devtwits&text=prio.powerday: Einführung in die parallele Programmierung&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/priopowerday-einfuhrung-in-die-parallele-programmierung/04/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>prio.powerday: Multicore-Programmierung unter .NET</title>
		<link>http://www.software-dev-blog.de/priopowerday-multicore-programmierung-unter-net/04/2009/</link>
		<comments>http://www.software-dev-blog.de/priopowerday-multicore-programmierung-unter-net/04/2009/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 07:24:18 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Konferenz]]></category>
		<category><![CDATA[Liveblogging]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1018</guid>
		<description><![CDATA[Kaum dass ich aus Salzburg zurück bin, sitze ich hier im Konferenzhaus in der Lazarettstraße, München, und nehme an der Multicore-Konferenz für .NET-Entwickler teil, die im Rahmen der prio.powerdays stattfindet. Den Anfang macht Rami Radi von Intel, der die Einführungsrede hält und die Anwesenden auf das Thema Multicore einstimmen will. Rami beginnt seinen Vortrag mit [...]]]></description>
			<content:encoded><![CDATA[<p>Kaum dass ich <a title="Nach der Konferenz ist vor der Konferenz" href="http://www.software-dev-blog.de/nach-der-konferenz-ist-vor-der-konferenz/04/2009/">aus Salzburg zurück bin</a>, sitze ich hier im Konferenzhaus in der Lazarettstraße, München, und nehme an der <a title="F# und Co: prio.powerday “Multicore im .NET-Umfeld”" href="http://www.software-dev-blog.de/f-und-co-priopowerday-multicore-im-net-umfeld/03/2009/">Multicore-Konferenz für .NET-Entwickler</a> teil, die im Rahmen der prio.powerdays stattfindet.</p>
<p>Den Anfang macht Rami Radi von Intel, der die Einführungsrede hält und die Anwesenden auf das Thema Multicore einstimmen will.</p>
<p>Rami beginnt seinen Vortrag mit Hardware, nicht mehr Software. Namentlich spricht er über den <a title="Mehr Multithread-Leistung mit dem Intel Core i7 Prozessor " href="http://www.software-dev-blog.de/mehr-multithread-leistung-mit-dem-intel-core-i7-prozessor/11/2008/">Core i7-Prozessor</a>, der ja im höchsten Maße multithreading-tauglich ist. Core i7 verarbeitet nämlich pro Prozessorkern zwei Threads simultan.</p>
<p>Die nächste Folie zeigt die ganze Vielfalt der <a title="Software-Projekte mit Intel-Tools optimieren" href="http://www.software-dev-blog.de/software-projekte-mit-intel-tools-optimieren/10/2008/">Intel-Entwicklertools</a>, über die ich hier schon ausführlich berichtet habe, also über <a title="Infos zu Intel Compilern" href="http://www.software-dev-blog.de/optimierte-compiler-helfen-beim-parallelisieren/12/2008/">Compiler</a>, <a title="VTune Performance Analyzer" href="http://www.software-dev-blog.de/quellcode-schwachstellen-mit-intel-vtune-aufspuren/11/2008/">VTune</a> etc.</p>
<p>So, jetzt wird&#8217;s ernst. Rami spricht über die <a title="Workshop: Alles über .NET-Threads - Teil 1" href="http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-1/03/2009/">Parallelprogrammierung im .NET-Umfeld</a>, was seiner Meinung nach nicht einfach ist (wären wir sonst hier?). Zu den Herausforderungen gehören unter anderem falsch genutzter Speicher, zu viele und zu wenige Threads, gemeinsam genutzte Speicherbereiche, Load Balancing und viele andere. Wie gut, dass es für diese &#8220;Issues&#8221; die passenden Tools gibt wie den VTune Performance Analyzer.</p>
<p><span id="more-1018"></span>Aber es gibt laut Rami auch genug Fälle, in denen parallelisierte Anwendungen langsamer laufen als serielle. Das hat diverse Gründe: Der serielle Code nimmt immer noch zu viel Raum ein, die kritischen Pfade sind nicht vernünftig parallelisiert oder die Speicherbandbreite reicht nicht aus.</p>
<p>Die nächste Folie zum Thema .NET-Konstrukte wirkt auf den ersten Blick ein wenig überfrachtet. Zum Glück will sich Rami auf die wirklich wichtigen Aspekte konzentrieren. Dazu gehören<strong> <a title="Mehr Infos zu Thread-Pools und Co." href="http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-3/03/2009/">Thread-Pools.</a></strong> Rami zeigt ein kleines Beispiel anhand einer kleinen Fotoverwaltung, die in C# geschrieben ist.</p>
<p>Der Vorteil von Thread-Pools ist in diesem Fall, dass nicht ein, sondern zwei oder mehr Bilder gleichzeitig aus der SQL-Datenbank ausgelesen werden können, die die Bilder aufbewahrt. Der Trick hierbei ist übrigens, die Thread-Parameter in die For-Schleife zu packen. Außerdem muss ein Wait-Signal eingebaut werden, damit die Anwendung am Ende weiß, dass alle Bilder angezeigt worden sind. Darüber hinaus ist ein Lock-Befehl einzufügen, der die SQL-Zugriffe synchronisiert.</p>
<p>Interessant: Innerhalb des .NET-Umfelds kann nativer Code eingesetzt werden, um <a title="Software-Projekte mit Multicore-Bibliotheken optimieren" href="http://www.software-dev-blog.de/software-projekte-mit-multicore-bibliotheken-optimieren/12/2008/">leistungsfähige Bibliotheken</a> zu nutzen.</p>
<p>Jetzt gibt&#8217;s noch ein paar nützliche Tipps, mit denen man multithread-optimierten Code noch besser machen kann. Dazu gehören das Auslesen der vorhandenen Prozessorressourcen, das Zusammenfassen mehrerer Funktionen zu einem einzigen Thread, das Cachen von häufig benutzen Daten und das Benutzen von parallelen Datenbankverbindungen.</p>
<p>Schließlich gibt es noch eine kleine Einführung in <a title="VTune Performance Analyzer" href="http://www.software-dev-blog.de/quellcode-schwachstellen-mit-intel-vtune-aufspuren/11/2008/">VTune</a>, mit dem sich Anwendungen prima analysieren lassen.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/priopowerday-multicore-programmierung-unter-net/04/2009/&via=sw_devtwits&text=prio.powerday: Multicore-Programmierung unter .NET&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/priopowerday-multicore-programmierung-unter-net/04/2009/&via=sw_devtwits&text=prio.powerday: Multicore-Programmierung unter .NET&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/priopowerday-multicore-programmierung-unter-net/04/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>F# und Co: prio.powerday &#8220;Multicore im .NET-Umfeld&#8221;</title>
		<link>http://www.software-dev-blog.de/f-und-co-priopowerday-multicore-im-net-umfeld/03/2009/</link>
		<comments>http://www.software-dev-blog.de/f-und-co-priopowerday-multicore-im-net-umfeld/03/2009/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 10:34:14 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Konferenz]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=962</guid>
		<description><![CDATA[Zugegeben, das wird jetzt kein Final Call, dafür ist es noch zu früh. Aber der prio.powerday &#8220;Multicore-Programmierung für .NET-Entwickler&#8221; wirft bereits seine Schatten voraus, und daher will ich die Gelegenheit nutzen, über ein paar Details zu reden. Im Gegensatz zum letzten Blogeintrag steht mittlerweile fest, wer die Keynote-Rede halten wird. Es ist Rami Radi, Senior [...]]]></description>
			<content:encoded><![CDATA[<p>Zugegeben, das wird jetzt kein Final Call, dafür ist es noch zu früh. Aber der <a title="Webpage des prio.powerday" href="http://www.priopowerday.de/25.0.html" target="_blank">prio.powerday &#8220;Multicore-Programmierung für .NET-Entwickler&#8221;</a> wirft bereits seine Schatten voraus, und daher will ich die Gelegenheit nutzen, über ein paar Details zu reden.</p>
<p>Im Gegensatz <a title=" Multicore-Powerday: Preise und weitere Infos " href="http://www.software-dev-blog.de/multicore-powerday-preise-und-weitere-infos/01/2009/">zum letzten Blogeintrag</a> steht mittlerweile fest, wer die Keynote-Rede halten wird. Es ist Rami Radi, Senior Software Application Engineer bei der Software und Services Group von Intel. Rami wird unter anderem den Irrglauben vieler .NET-Entwickler zerschlagen, dass ihre Anwendungen automatisch mit den aktuellen Hardware-Plattformen skalieren. Daher wird Rami zeigen, welche Schritte notwendig sind, um .NET-Software für Multicore-Plattformen wie den <a title=" Mehr Multithread-Leistung mit dem Intel Core i7 Prozessor " href="http://www.software-dev-blog.de/mehr-multithread-leistung-mit-dem-intel-core-i7-prozessor/11/2008/">Core i7 von Intel</a> zu analysieren, zu optimieren und fein abzustimmen.</p>
<p>Anschließend werden Bernd Marquardt und Ralf Westphal gemeinsam einen ersten Einblick in die Welt der Parallelverarbeitung und -programmierung gewähren. Das Auditorium wird also eine Menge über die Terminologie der Multicore-Programmierung erfahren. Zudem stehen die Konzepte des Multithreadings sowie deren Herausforderungen auf Bernds und Ralfs Agenda.</p>
<p>Nach einer kurzen Kaffeepause geht es dann ans Eingemachte: &#8220;Parallelverarbeitung mit .NET Bordmitteln&#8221;. Was bietet das .NET-Framework, um die eigenen Softwareprojekte für Core i7 und Co. zu optimieren. Ein kleiner Tipp: Hierzu gibt es auf diesem Blog <a title=" Multicore-Programmierung im .NET-Umfeld - Teil 1 " href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-1/01/2009/">eine</a> <a title=" Multicore-Programmierung im .NET-Umfeld - Teil 2 " href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-2/01/2009/">ganze</a> <a title=" Multicore-Programmierung im .NET-Umfeld - Teil 3 " href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-3/02/2009/">Menge</a> nachzulesen. Wer die Infos dazu findet, darf sie behalten!</p>
<p><span id="more-962"></span>Am Nachmittag finden dann drei weitere Vorträge statt: &#8220;Parallele Algorithmen: Die Parallel Fx Library&#8221;, &#8220;Parallele Architekturen: Die Concurrency Coordination Runtime&#8221; und &#8220;Chances for parallel programming with the functional programming language F#&#8221;. Speziell die letzte Präsentation, die von F#-Guru <a title="Don Symes Weblog" href="http://blogs.msdn.com/dsyme/default.aspx" target="_blank">Don Syme</a> gehalten wird, birgt ein hohes Informationspotenzial. Denn es geht bei F# um einen ganz neuen Denkansatz für die parallele Programmierung, der auch dringend notwendig sein wird. Spätestens dann, wenn <a title=" Interview: Visual Studio 2010 und seine Multicore-Fähigkeiten " href="http://www.software-dev-blog.de/interview-visual-studio-2010-und-seine-multicore-fahigkeiten/02/2009/">Visual Studio 2010</a> mit all seinen parallelen Möglichkeiten auf den Markt kommen wird &#8211; inklusive F#.</p>
<p><strong>Ach ja:</strong> Um dem Thema F# und der funktionalen Programmierung einen gebührenden Rahmen zu geben, gibt es eine <a title="Mehr Infos zum F#-Nighttalk" href="http://www.priopowerday.de/272.0.html" target="_blank">Warm-up-Veranstaltung</a> zu diesem Thema. Don Syme, Bernd Marquardt und Ralf Westphal werden sich zwischen 17.30 und 21.30 Uhr drei volle Stunden Zeit nehmen, um mit euch über F# und die Parallelprogrammierung im .NET-Framework zu diskutieren.</p>
<p><em><strong>Frühbucherrabatt-Tipp:</strong></em> Wer sich jetzt noch <a title="Hier geht's zur Anmeldung für den prio.powerday" href="http://www.priopowerday.de/anmeldung.0.html" target="_blank">ganz schnell anmeldet</a> (und zwar bis zum nächsten Montag, den 23.3.) kann satte 100 Euro für die Teilnahme am prio.powerday sparen (390 Euro statt 490 Euro). Das gilt natürlich auch für die Kombination aus F#-Nighttalk und .NET-Multicore-Konferenz. Also, worauf wartet ihr noch?!</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/f-und-co-priopowerday-multicore-im-net-umfeld/03/2009/&via=sw_devtwits&text=F# und Co: prio.powerday "Multicore im .NET-Umfeld" &related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/f-und-co-priopowerday-multicore-im-net-umfeld/03/2009/&via=sw_devtwits&text=F# und Co: prio.powerday "Multicore im .NET-Umfeld" &related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/f-und-co-priopowerday-multicore-im-net-umfeld/03/2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Workshop: Alles über .NET-Threads &#8211; Teil 4</title>
		<link>http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-4/03/2009/</link>
		<comments>http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-4/03/2009/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 17:06:09 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Basics]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=958</guid>
		<description><![CDATA[Eine neue Woche beginnt, und im selben Atemzug endet meine vierteilige Serie zum Thema .NET-Threads. So habe ich im ersten Kapitel über das Erzeugen von Threads geschrieben, im zweiten Teil mich über das Verwalten derselben ausgelassen, und am letzten Donnerstag war der ThreadPool und dessen Möglichkeiten dran. Und heute?! Nun, heute geht es um die [...]]]></description>
			<content:encoded><![CDATA[<p>Eine neue Woche beginnt, und im selben Atemzug endet meine vierteilige Serie zum Thema .NET-Threads. So habe ich <a title="Teil eins der .NET-Thread-Serie" href="http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-1/03/2009/">im ersten Kapitel</a> über das Erzeugen von Threads geschrieben, <a title="Teil zwei der .NET-Thread-Serie" href="http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-2/03/2009/">im zweiten Teil</a> mich über das Verwalten derselben ausgelassen, und am letzten Donnerstag war der <a title="Teil drei der .NET-Thread-Serie" href="http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-3/03/2009/">ThreadPool</a> und dessen Möglichkeiten dran. Und heute?! Nun, heute geht es um die Synchronisierung mehrerer Threads und atomare Aktionen.</p>
<p>Zunächst einmal kann man festhalten, dass die Thread-Synchronisierung im .NET-Framework ähnlich funktioniert wie im Win32- oder Pthreads-Umfeld. Es geht also um den gegenseitigen Ausschluss sowie um atomare Aktionen auf spezielle Variablen. Wie bei der von C# bekannten Methode <em><strong>lock</strong></em> wird ein Codeabschnitt mithilfe der geschweiften Klammern geblockt, sodass zu dieser Zeit nur ein einziger Thread darauf zugreifen kann. Hierfür bietet das .NET-Framework eine ähnliche Konstrukte:</p>
<p><em><strong>Monitor.Enter ( this )<br />
try<br />
{<br />
<span style="color: #ffffff;">&#8230;&#8230;. </span>shared_var = other_shared_var +1;<br />
<span style="color: #ffffff;">&#8230;&#8230;. </span>other_shared_var = 0;<br />
}<br />
finally<br />
{<br />
<span style="color: #ffffff;">&#8230;&#8230; </span> Monitor.Exit ( this )<br />
}</strong></em></p>
<p>Mit der Klasse <em><strong>Monitor</strong></em> wird der entsprechende Codeabschnitt blockiert. Mit <em><strong>Enter()</strong></em> wird der Abschnitt gesperrt und mit <em><strong>Exit()</strong></em> wieder freigegeben. Praktisch an Monitor ist auch dessen Möglichkeit, Datenstrukturen als Parameter zu übergeben.</p>
<p>Bei Monitor.Enter() geschehen übrigens zwei Dinge: Erstens wird eine Warteschlange eingerichtet, die auf diejenigen Threads verweist, die gesperrt werden sollen und eine zweite Queue mit Threads, die darüber informiert werden wollen, wenn eine Speere verfügbar ist. <em><strong>Monitor.Exit()</strong></em> sorgt dafür, dass der erste verfügbare Thread in Warteschlange #1 gesperrt wird.</p>
<p><span id="more-958"></span>Darüber hinaus hält die Klasse Monitor eine weitere Methode bereit: So lässt sich mit <em><strong>Monitor.Wait()</strong></em> die Sperre eines Threads auf einen anderen Thread übertragen, um die Sperre später wieder zurückzuverlangen. Ein Impuls benachrichtigt hierbei den ursprünglichen Thread darüber, dass die Sperre wieder aufgehoben wurde.</p>
<p>Neben den Monitor-Methoden lassen sich unter .NET auch Mutexe für das Sperren und Freigeben von Threads verwenden. Im Gegensatz zu der Monitor-Klasse werden Mutexe in Verbindung mit Handles eingesetzt und können zudem zudem für mehrere Sperren eingesetzt werden, die dann natürlich genauso oft wieder freigegeben werden.</p>
<p><em><strong>private static Mutex mutx = new Mutex();<br />
&#8230;</strong></em></p>
<p><em><strong>private static void UseResource()<br />
{<br />
<span style="color: #ffffff;">&#8230;&#8230;</span>//Warten, um in den Sperrcode einzutreten<br />
<span style="color: #ffffff;">&#8230;&#8230;</span>mutx.WaitOne();</strong></em></p>
<p><em><strong><span style="color: #ffffff;">&#8230;&#8230;</span>Console.WriteLine( &#8221; im gesperrten Modus &#8220;);</strong></em></p>
<p><em><strong><span style="color: #ffffff;">&#8230;&#8230;</span>Thread.Sleep( 100 ); // 100 Millisekunden warten</strong></em></p>
<p><em><strong><span style="color: #ffffff;">&#8230;&#8230;</span>Console.WriteLine( &#8221; den gesperrten Modus wieder verlassen &#8220;);</strong></em></p>
<p><em><strong><span style="color: #ffffff;">&#8230;&#8230;</span>// Mutex wieder freigeben<br />
<span style="color: #ffffff;">&#8230;&#8230;</span>mutx.ReleaseMutex();</strong></em></p>
<p><em><strong>}</strong></em></p>
<p><strong>Atomare Aktionen</strong><br />
Unter atomaren Aktionen versteht man landläufig unteilbare Maschinenanweisungen, wie sie beispielsweise für Datenbankoperationen eingesetzt werden. Dabei ist es von essenzieller Wichtigkeit, dass mehrere dieser Teilschritte zurückgenommen werden können, falls der gesamte Schritt nicht beendet werden kann. Bei Threads verhält es sich ganz ähnlich: Variablen werden verändert und gleichzeitig geht beim Programmablauf etwas schief. Die Folge: Das System ist im schlimmsten Fall beschädigt oder Daten korrupt.</p>
<p>Um so etwas auszuschließen, hat Microsoft in das .NET-Framework die Klasse <strong><em>Interlock</em></strong> eingebaut, die drei wesentliche Methoden vorsieht: <em><strong>Decrement</strong></em>, <em><strong>Increment</strong></em> und <em><strong>Exchange</strong></em>. Diese sollten vor allem dann eingesetzt werden, wenn eine bestimmte Variable von mehreren Threads parallel genutzt wird:</p>
<p><em><strong>int intCounter = 0;<br />
&#8230;</strong></em></p>
<p><em><strong>Interlocked.Exchange( ref usingResource, 6 ); // Setze den Wert von intCounter auf 6</strong></em></p>
<p><em><strong>Interloced.Decrement( ref intCounter ); // Reduziere den Wert von intCounter auf 5</strong></em></p>
<p><em><strong>Interlocked.Increment( ref intCounter ); // Erhöhe den Wert von intCounter wieder auf 6</strong></em></p>
<p>Beachtenswert ist die Tatsache, dass mit Increment und Decrement nicht die Variable selbst, sondern nur der Verweis darauf verändert wird (da es sich dank des Zusatzes <em><strong>ref</strong></em> um eine Art Zeiger handelt). Und Exchange ändert nicht die Werte, sondern initialisiert lediglich einen Wert mit einem anderen.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-4/03/2009/&via=sw_devtwits&text=Workshop: Alles über .NET-Threads - Teil 4&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-4/03/2009/&via=sw_devtwits&text=Workshop: Alles über .NET-Threads - Teil 4&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-4/03/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Workshop: Alles über .NET-Threads &#8211; Teil 3</title>
		<link>http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-3/03/2009/</link>
		<comments>http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-3/03/2009/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 14:03:42 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Basics]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=957</guid>
		<description><![CDATA[Teil eins und Teil zwei meines Minispecials zum Thema .NET-Threads stehen bereits online, und heute folgt sehr chronologisch der dritte Abschnitt. Dieser handelt von den Thread-Pools, mit deren Hilfe eine größere Anzahl von notwendigen Threads mithilfe des .NET-Frameworks verwaltet werden können. Zunächst einmal sollte man sich klar machen, dass das Erzeugen und Verwalten von .NET-Threads [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Workshop: Alles über .NET-Threads - Teil 1" href="http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-1/03/2009/">Teil eins</a> und <a title="Workshop: Alles über .NET-Threads - Teil 2" href="http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-2/03/2009/">Teil zwei</a> meines Minispecials zum Thema .NET-Threads stehen bereits online, und heute folgt sehr chronologisch der dritte Abschnitt. Dieser handelt von den <strong>Thread-Pools</strong>, mit deren Hilfe eine größere Anzahl von notwendigen Threads mithilfe des .NET-Frameworks verwaltet werden können.</p>
<p>Zunächst einmal sollte man sich klar machen, dass das <a title="Das Erzeugen von Threads" href="http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-1/03/2009/">Erzeugen</a> und <a title="Das Verwalten von .NET-Threads" href="http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-2/03/2009/">Verwalten</a> von .NET-Threads mit einem immensen administrativen Aufwand verbunden ist: Lokaler Thread-Speicher muss angelegt und die Systemstrukturen für die Thread-Verwaltung müssen eingerichtet werden. Darüber hinaus nimmt die Komplexität des Quellcodes deutlich zu, sobald mehrere Threads mit Bordmitteln verwaltet werden sollen.</p>
<p>Aus diesem Grund hat Microsoft dem .NET-Framework ein Ressource spendiert, die sich <em><strong>ThreadPool</strong></em> nennt. Dabei wird zunächst eine bestimmte Anzahl von Threads generiert, außerdem wird eine Art Arbeitswarteschlange erstellt. Sobald eine auszuführende Aufgabe in diese Warteschlange befördert wird, wird ein Thread für diesen Task aktiviert und ihm die Aufgabe zugewiesen. Dies erledigt das .NET-Framework automatisch. Allerdings ist dabei zu beachten, dass der ThreadPool nur dann sinnvoll eingesetzt werden kann, wenn ein Programm aus mehreren Threads besteht, die immer wieder benötigt werden.</p>
<p><span id="more-957"></span>Der Pool wird mithilfe der Anweisung <em><strong>ThreadPool.QueueUserWorkItem (new WaitCallback ( DELEGAT ) )</strong></em> erzeugt, sobald die erste Aufgabe an die Warteschlange übergeben wird. Die Anzahl der im Pool erzeugbaren Threads ist unter .NET auf 25 pro Hardware-Prozessor begrenzt. Allerdings kann man mithilfe der Methoden <em><strong>GetMinThreads()</strong></em> und <em><strong>SetMinThreads()</strong></em> die minimale Anzahl von Threads abfragen bzw. erzwingen. Mit <em><strong>GetMaxThreads()</strong></em> lässt sich die maximale Anzahl von Threads bestimmen.</p>
<p>Mit den ThreadPools in .NET lassen sich aber nicht nur Aufgaben parallel ausführen, sondern auch asynchrones Warten erzwingen. So kann beispielsweise auf einen Datenanfrage innerhalb des Netzwerks reagiert werden. Hierfür ist eine sogenannte Callback-Funktion erforderlich, die beim Eintreten eines zu erwartenden Ereignisses aufgerufen wird. Eine dieser Funktionen nennt sich <em><strong>RegisterWaitForSingleObjekct()</strong></em>, die die Angabe einer maximalen Wartezeit erlaubt. Die Callback-Funktion wird aufgerufen, wenn das Ereignis eintritt oder die definierte Wartezeit abgelaufen ist.</p>
<p>Aber nicht nur einzelne Ereignisse können Threads starten, sondern auch eine ganze Reihe davon. Hierfür existieren die Methoden <em><strong>WaitHandle.WaitAll()</strong></em> und <em><strong>WaitHandle.WaitAny()</strong></em>, die ausgeführt werden, wenn alle Ereignisse oder irgendein Ereignis eintreten. Zudem lassen sich diese manuell mithilfe der Methode <em><strong>ManualResetEvent()</strong></em> zurücksetzen.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-3/03/2009/&via=sw_devtwits&text= Workshop: Alles über .NET-Threads - Teil 3&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-3/03/2009/&via=sw_devtwits&text= Workshop: Alles über .NET-Threads - Teil 3&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-3/03/2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Workshop: Alles über .NET-Threads &#8211; Teil 2</title>
		<link>http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-2/03/2009/</link>
		<comments>http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-2/03/2009/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 12:10:53 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Basics]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=956</guid>
		<description><![CDATA[Meine kleine .NET-Serie zum Thema Threads geht heute in die zweite Runde. Nachdem es gestern um das Erzeugen von Threads ging, handelt Teil zwei von der Thread-Verwaltung. Dabei unterscheidet man zwischen Beenden, Warten, Anhalten und Fortsetzen. Beenden von Threads: Dies geschieht am einfachsten, indem ein Thread ganz regulär während des Programmablaufs verlassen wird und die [...]]]></description>
			<content:encoded><![CDATA[<p>Meine kleine .NET-Serie zum Thema Threads geht heute in die zweite Runde. Nachdem es gestern um das <a title="Teil 1 der Miniserie &quot;Alles über .NET-Threads&quot; und deren Erzeugung" href="http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-1/03/2009/">Erzeugen von Threads</a> ging, handelt Teil zwei von der <strong>Thread-Verwaltung</strong>. Dabei unterscheidet man zwischen Beenden, Warten, Anhalten und Fortsetzen.</p>
<p><strong>Beenden von Threads:</strong> Dies geschieht am einfachsten, indem ein Thread ganz regulär während des Programmablaufs verlassen wird und die Anwendung wieder zum Masterthread zurückkehrt. Dies gibt der Common Language Runtime (CLR) die Möglichkeit, die notwendigen Aufräumarbeiten durchzuführen. Allerdings muss manchmal ein anderer als der gerade laufende Thread beendet werden. Daher hat Microsoft den .NET-Thread-APIs eine Methode spendiert, die sich <em><strong>Abort()</strong></em> nennt, mit deren Hilfe ein laufender Thread abgebrochen werden kann. Beim Aufruf von Abort() wird automatisch eine ThreadAbortException ausgelöst.</p>
<p>Der Aufruf von Abort() zieht übrigens eine Reihe verschiedener Dinge nach sich. Dazu gehört die Fähigkeit des Threads, den eigenen Abbruch zu vereiteln, indem er innerhalb des Exception-Handlers die Methode <em><strong>System.Threading.Thread.ResetAbort</strong></em> aufruft. Daneben besteht die Möglichkeit, innerhalb eines Codeblocks mithilfe von <em><strong>finally</strong></em> weiteren Quellcode ausführen zu lassen, was im ungünstigsten Fall eine beachtliche Verzögerung des Thread-Abbruchs nach sich zieht. Aus diesen beiden Gründen sollte man zur Laufzeit überprüfen, ob ein bestimmter Thread auch vollständig abgebrochen wurde. Hierfür steht die <em><strong>Join</strong></em>-Methode zur Verfügung.</p>
<p><span id="more-956"></span></p>
<p><strong>Auf einen Thread warten:</strong> Die parallele Ausführung mehrerer Threads innerhalb eines Programmes bringt es zwangsläufig mit sich, dass Threads immer wieder aufeinander warten müssen. Um dies zu erreichen, hat Microsoft dem .NET-Framework die Thread-Methode <em><strong>Join()</strong></em> verpasst, was ein Zusammenführen zweier Threads bedeutet. In der Konsequenz heißt das, dass ein Thread mit seiner Fortsetzung so lange wartet, bis ein vorhergehender Thread fertig ist. Da dies zu unliebsamen Nebeneffekten führen kann (Stichwort: Dead Lock), besteht die Möglichkeit, Join() einen Parameter zu übergeben, der einen Integerwert darstellt. Dieser Wert besagt, wie lange gewartet werden soll, bis der Vorgänger-Thread (voraussichtlich) beendet wird. Das Ergebnis von Join() ist ein boolscher Wert, der <em><strong>true</strong></em> (Thread beendet) oder <em><strong>false</strong></em> (Thread nicht beendet) annehmen kann.</p>
<p><strong>Threads anhalten und fortsetzen: </strong>Im Gegensatz zur Methode <em><strong>Sleep()</strong></em>, mit der ein Thread für eine festgelegte Zeitdauer angehalten und automatisch fortgesetzt wird, besteht eine weitere Möglichkeit, einen Thread auf unbestimmte Zeit zu stoppen und zu einem späteren Zeitpunkt wieder aufzunehmen. Die hierfür zuständigen Methoden nennen sich <em><strong>Suspend()</strong></em> und <em><strong>Resume()</strong></em>. Beiden Methoden kann kein Argument übergeben werden und beide liefern auch keinen Rückgabewert.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-2/03/2009/&via=sw_devtwits&text= Workshop: Alles über .NET-Threads - Teil 2&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-2/03/2009/&via=sw_devtwits&text= Workshop: Alles über .NET-Threads - Teil 2&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-2/03/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Workshop: Alles über .NET-Threads &#8211; Teil 1</title>
		<link>http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-1/03/2009/</link>
		<comments>http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-1/03/2009/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 15:41:12 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Basics]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=955</guid>
		<description><![CDATA[Ende Januar, im Anschluss an die OOP 2009, habe ich hier eine kleine Miniserie mit dem Titel &#8220;Multicore-Programmierung im .NET-Umfeld&#8221; veröffentlicht. Was dabei ein wenig zu kurz kam sind die technischen Aspekte, die daraus resultieren. Wie beispielsweise Threads mithilfe des .NET-Frameworks erzeugt, verwaltet und synchronisiert werden. Und über die vorhandenen Thread-Pools habe ich ebenfalls zu [...]]]></description>
			<content:encoded><![CDATA[<p>Ende Januar, im Anschluss an die <a title=" Multicore-Programmierung auf der OOP 2009" href="http://www.software-dev-blog.de/multicore-programmierung-auf-der-oop-2009/01/2009/">OOP 2009</a>, habe ich hier <a title=" Multicore-Programmierung im .NET-Umfeld - Teil 1 " href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-1/01/2009/">eine kleine Miniserie</a> mit dem Titel &#8220;Multicore-Programmierung im .NET-Umfeld&#8221; veröffentlicht. Was dabei ein wenig zu kurz kam sind die technischen Aspekte, die daraus resultieren. Wie beispielsweise Threads mithilfe des .NET-Frameworks erzeugt, verwaltet und synchronisiert werden. Und über die vorhandenen Thread-Pools habe ich ebenfalls zu wenig erzählt.</p>
<p>Das alles werde ich ab heute in Form einer Miniserie mit der Überschrift &#8220;Alles über .NET Threads&#8221; nachholen. Der erste Teil beschäftigt sich mit dem Thema &#8220;Threads erzeugen&#8221;.</p>
<p>Da die .NET-APIs etwas &#8220;schlanker&#8221; sind als ihre Win32-Brüder und -Schwestern, gestaltet sich das Erzeugen eines .NET-Threads relativ einfach. Dies sieht wie folgt aus:</p>
<p><em><strong>using System.Threading;</strong></em></p>
<p><em><strong>[Definition von Variablen]</strong></em></p>
<p><em><strong>Thread t = new Thread( new ThreadStart( ThreadFunc ));</strong></em></p>
<p>Der Aufruf von <strong><em>ThreadStart()</em></strong> erzeugt einen neuen Thread. Der Parameter ist eine Delegat namens <em><strong>ThreadFunc</strong></em>. Übrigens: In C# ist ein Delegat identisch mit der Adresse einer Funktion in C. Der Thread endet dann an der Stelle, sobald ThreadFunc() endet. Doch damit nicht genug. Für eine fehlerfreie Ausführung des Threads muss weiterer Code implementiert werden:</p>
<p><em><strong>t.Start()</strong></em> &#8212; Dies startet den Thread unter .NET explizit (was z. B. unter Win32 nicht erforderlich ist).</p>
<p><em><strong>Thread.Sleep( 40 ) </strong></em>&#8212; Dies unterbricht den (seriellen) Hauptthread für die Dauer der Zeiteinheit in der Klammer, die in Millisekunden angegeben wird. Dies kann in der Praxis jedoch erheblich von der tatsächlich benötigten Zeit abweichen.</p>
<p><em><strong>[aufzurufende Funktion]</strong></em> &#8212; Diese Funktion wird parallel auf den vorhandenen Prozessorkernen ausgeführt.</p>
<p><em><strong>Thread.Sleep( 0 ) </strong>&#8212; </em>Dies beendet den parallelen Thread und reaktiviert den &#8220;schlafenden&#8221; Hauptthread.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-1/03/2009/&via=sw_devtwits&text=Workshop: Alles über .NET-Threads - Teil 1&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-1/03/2009/&via=sw_devtwits&text=Workshop: Alles über .NET-Threads - Teil 1&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/workshop-alles-uber-net-threads-teil-1/03/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Infos rund ums Parallele Programmieren auf MSDN</title>
		<link>http://www.software-dev-blog.de/infos-rund-ums-parallele-programmieren-auf-msdn/03/2009/</link>
		<comments>http://www.software-dev-blog.de/infos-rund-ums-parallele-programmieren-auf-msdn/03/2009/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 16:24:37 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Basics]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=954</guid>
		<description><![CDATA[Heute Morgen habe ich nicht schlecht gestaunt, als mich Google Alert darüber informiert hat, dass es eine externe Verlinkung zu einem meiner Blogbeiträge gibt. Dabei handelt es sich um einen Workshop, der sich mit den Methoden der parallelen Programmierung mithilfe von OpenMP beschäftigt. Besonders bemerkenswert daran fand ich übrigens die Seite, die den Beitrag verlinkt [...]]]></description>
			<content:encoded><![CDATA[<p>Heute Morgen habe ich nicht schlecht gestaunt, als mich Google Alert darüber informiert hat, dass es eine externe Verlinkung zu einem meiner Blogbeiträge gibt. Dabei handelt es sich um einen <a title=" Workshop: parallel Programmieren mit OpenMP " href="http://www.software-dev-blog.de/parallel-programmieren-mit-openmp/02/2009/">Workshop</a>, der sich mit den Methoden der parallelen Programmierung mithilfe von OpenMP beschäftigt.</p>
<p>Besonders bemerkenswert daran fand ich übrigens die Seite, die den Beitrag verlinkt hat: Es handelt sich um niemand geringeres als <a title="Parallele Programmierung auf MSDN" href="http://msdn.microsoft.com/de-de/concurrency/default.aspx" target="_blank">MSDN</a>, also das Entwicklerportal von Microsoft, die dem Thema Parallele Programmierung eine eigene Webseite spendiert haben. Und genau dort findet man den Link auf meinen OpenMP-Beitrag. Daneben gibt es noch weitere interessante Einstiege in die Welt der Multithreading-Entwicklung. Da erfährt man eine Menge über die Grundlagen der Parallelprogrammierung, aber auch Tools und Downloads werden dort vorgestellt.</p>
<p>Des Weiteren können interessierte Entwickler nützliche Artikel abgreifen, Webcasts und Videos angucken und Blogs lesen. Und klar, dass es auf der Webseite auch um die Themen <a title="Multicore-Programmierung unter .NET auf dem prio Powerday 2009" href="http://www.software-dev-blog.de/multicore-powerday-preise-und-weitere-infos/01/2009/">Paralleles Programmieren mit .NET</a> geht. Besonders bemerkenswert finde ich auch die Tatsache, dass MSDN für Intel eine eigene Sektion mit Namen &#8220;Intel Developer Network&#8221; spendiert hat. Dort findet man Wissenswertes zum Parallel Studio und zu anderen Themen.</p>
<p><em><strong>Fazit:</strong></em> Parallel Computing auf MSDN ist eine bookmark-taugliche Webseite, wenn man in Sachen Parallele Programmierung auf dem Laufenden bleiben will.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/infos-rund-ums-parallele-programmieren-auf-msdn/03/2009/&via=sw_devtwits&text=Infos rund ums Parallele Programmieren auf MSDN&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/infos-rund-ums-parallele-programmieren-auf-msdn/03/2009/&via=sw_devtwits&text=Infos rund ums Parallele Programmieren auf MSDN&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/infos-rund-ums-parallele-programmieren-auf-msdn/03/2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Interview: Visual Studio 2010 und seine Multicore-Fähigkeiten</title>
		<link>http://www.software-dev-blog.de/interview-visual-studio-2010-und-seine-multicore-fahigkeiten/02/2009/</link>
		<comments>http://www.software-dev-blog.de/interview-visual-studio-2010-und-seine-multicore-fahigkeiten/02/2009/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 12:23:12 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Interview]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=779</guid>
		<description><![CDATA[Während der OOP 2009 gab es die Möglichkeit, mit Microsoft zusammenzusitzen und ein wenig über Visual Studio 2010 und das zugehörige .NET Framework 4.0 zu plaudern. So der Plan! Leider kam es anders, was dazu führte, dass ich am vorigen Mittwoch via Festnetz mit einem der Technikgurus, Dariusz Parys, über diverse Aspekte der Parallelprogrammierung mithilfe [...]]]></description>
			<content:encoded><![CDATA[<p>Während der <a title="Multicore-Programmierung auf der OOP 2009" href="http://www.software-dev-blog.de/multicore-programmierung-auf-der-oop-2009/01/2009/">OOP 2009</a> gab es die Möglichkeit, mit Microsoft zusammenzusitzen und ein wenig über <a title="Multicore-Programmierung im .NET-Umfeld" href="Multicore-Programmierung im .NET-Umfeld - Teil 1 ">Visual Studio 2010</a> und das zugehörige .NET Framework 4.0 zu plaudern. So der Plan! Leider kam es anders, was dazu führte, dass ich am vorigen Mittwoch via Festnetz mit einem der Technikgurus, <a title="Das Blog von Dariusz Parys" href="http://blogs.msdn.com/dparys/default.aspx" target="_blank">Dariusz Parys</a>, über diverse Aspekte der Parallelprogrammierung mithilfe des .NET-Framework in der Version 4.0 sprach. Und das ist dabei herausgekommen.</p>
<p><em><strong>Wie unterstützt das .NET Framework 4.0 die parallele Programmierung?</strong></em><strong><br />
</strong>Hierfür gibt es diverse Komponenten. Es wird sowohl für den Bereich &#8220;Managed Applications&#8221; &#8211; also C# und Konsorten &#8211; als auch für  native Programmiersprachen (Fortran, C++ etc.) Bibliotheken und ähnliche Dinge geben. Für beide Programmiermodelle wurde die Concurrency Runtime entsprechend aufgebohrt.</p>
<p>Für die .NET-Entwickler gibt es dann zwei neue Modelle, und zwar die <a title=" Multicore-Programmierung im .NET-Umfeld" href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-2/01/2009/">Task Parallel Library</a> (TPL) und PLING. Mit der TPL lassen sich Aufgaben abstrahieren, was unter der Oberfläche und mithilfe der Concurrency Runtime zu Threads führt, um deren Verteilung auf die einzelnen Prozessorkerne sich der Entwickler nicht mehr kümmern muss. PLINQ stellt eine parallelisierte Erweiterung von LINQ dar. Und LINQ wiederum ist &#8220;eine Komponente von Microsofts .NET-Framework, mit der SQL-, XLink- und XQuery-Anfragen direkt in .NET-Programmiersprachen wie C# 3.0 oder <span class="mw-redirect">VB.Net</span> 9.0 als Code statt als String eingebunden werden können&#8221; (Quelle: Wikipedia).</p>
<p>Aber auch bei den nativen Sprachen gibt es neue Ansätze bezüglich der Concurrency Runtime: Dies ist zum einen die Parallel Pattern Library, die sich mit den <a title="Intel Threading Building Blocks" href="http://www.software-dev-blog.de/mit-intel-threading-building-blocks-parallel-programmieren/12/2008/">Intel Threading Building Blocks</a> vergleichen lässt. Zum anderen bietet Visual Studio 2010 eine Agent Library für C++ und Co, die bestimmte Aufgaben verwalten und ausführen kann.</p>
<p><em><strong>Was sagen Sie Entwicklern, wenn Sie mit ihnen über die parallele Programmierung reden?</strong></em><br />
Das hängt davon ab, mit wem ich spreche. Entwickler, die sich zum Beispiel schon länger mit serviceorientierten Anwendungen beschäftigen, in denen separate Aufgaben durch Dienste erledigt werden, verstehen das Konzept der parallelen Programmierung oft schneller als Programmierer, die nur die rein serielle Entwicklung kennen. Wichtig dabei ist die Erkenntnis, dass es in den meisten Anwendungen Programmteile gibt, die man loslösen kann von der restlichen Programmlogik. Ein Beispiel hierfür ist die parallele Speicherung von Daten.</p>
<p><span id="more-779"></span>Für viele Entwickler stellt aber die Parallelisierung von Bedieneroberflächen ein großes Problem dar, da hier vieles noch vom Betriebssystem mithilfe von Nachrichtenschlangen verwaltet wird. Hierfür wird es in .NET 4.0 entsprechende Bibliotheken geben, die diese Aufgaben automatisch übernehmen.</p>
<p><em><strong>Welche Anwendungsgruppen werden von der Parallelisierung hauptsächlich profitieren?</strong></em><br />
Da sind zum einen die algorithmus-basierten Anwendungen zu nennen (<a title="Optimierte Filter von Nik Software" href="http://www.software-dev-blog.de/skalierende-filter-nik-software-setzt-auf-multicore/01/2009/">Bildbearbeitung</a>, <a title="Darum skaliiert DivX 7 besonders gut auf Multicore-Plattformen" href="http://www.software-dev-blog.de/how-to-deshalb-skaliert-divx-7-auf-multicore-plattformen/01/2009/">Encoder</a> etc.), aber auch klassische Geschäftsanwendungen wie CRM-Systeme bergen viel paralleles Potenzial. Hier können beispielsweise Anfragen an das Backend simultan ausgeführt werden, was die Wartezeiten auf das Ergebnis verkürzt. Allerdings liegt allen parallelisierten Anwendungen eine bestimmte Arbeit <strong><em>vor</em></strong> dem eigentlichen Kodieren zugrunde: Welche Programmbereiche kann ich logisch zusammenfassen und daraus einzelne Aufgaben machen, die als Tasks abstrahiert werden können und sich dann von der Concurrency Runtime als separate Threads ausführen lassen.</p>
<p><em><strong>Wie unterstützt Microsoft die Community in Sachen Visual Studio 2010, .NET 4.0 und Parallelprogrammierung?</strong></em><br />
Neben den kommerziellen Konferenzen wie der <a title="Infos und Videos rund um die Microsoft Tech-Ed" href="http://www.software-dev-blog.de/tag/tech-ed/">Microsoft Tech-Ed</a> oder dem <a title="Intel auf dem Tech Summit 2008" href="http://www.software-dev-blog.de/intel-auf-der-microsoft-technical-summit-2008/11/2008/">Tech Summit</a> gibt es beispielsweise die Möglichkeit, über Microsoft in ein Early-Adopter-Programm hineinzukommen, um auf diesem Weg Betatester zu werden. Darüber hinaus kann man <a title="So kommt man an die Techgurus von Microsoft heran" href="http://www.microsoft.com/germany/msdn/kontakt/devevangelists.mspx" target="_blank">uns auch direkt</a> auf gewünschte Workshops und ähnliche Dinge ansprechen. Und natürlich nutzen wir die gesamte Online-Vielfalt wie <a title="MSDN ist die zentrale Anlaufstelle für Entwickler" href="http://msdn.microsoft.com/de-de/default.aspx">Webcasts und Blogs</a>, um unsere Themen zu kommunizieren. Aber auch viele Microsoft-nahe Communities stehen derlei Themen offen gegenüber. Dort trägt Microsoft an und ab selbst zur Aufklärung in Sachen Multicore und ähnlichen Dingen bei.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/interview-visual-studio-2010-und-seine-multicore-fahigkeiten/02/2009/&via=sw_devtwits&text=Interview: Visual Studio 2010 und seine Multicore-Fähigkeiten&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/interview-visual-studio-2010-und-seine-multicore-fahigkeiten/02/2009/&via=sw_devtwits&text=Interview: Visual Studio 2010 und seine Multicore-Fähigkeiten&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/interview-visual-studio-2010-und-seine-multicore-fahigkeiten/02/2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Multicore-Programmierung im .NET-Umfeld &#8211; Teil 3</title>
		<link>http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-3/02/2009/</link>
		<comments>http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-3/02/2009/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 13:37:08 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Basics]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=734</guid>
		<description><![CDATA[Nach den Teilen eins und zwei folgt heute der dritte Abschnitt unserer Mini-Serie &#8220;Multicore-Programmierung im .NET-Umfeld&#8221;. Es geht um Tasks und Futures, um das Parallelisieren von Methoden, um parallele Schleifen, um einen Taskmanager und um PLINQ. Tasks sind die zentralen Elemente der Parallel Extensions, also dedizierte Aufgaben, Funktionen, Schleifenkonstrukte oder ähnliche Dinge. Eine Task führt [...]]]></description>
			<content:encoded><![CDATA[<p>Nach den <a title="Erster Teil der Mini-Serie &quot;Multicore-Programmierung im .NET-Umfeld&quot;" href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-1/01/2009/">Teilen eins</a> und <a title="Zweiter Teil der Mini-Serie &quot;Multicore-Programmierung im .NET-Umfeld&quot;" href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-2/01/2009/">zwei</a> folgt heute der dritte Abschnitt unserer Mini-Serie &#8220;Multicore-Programmierung im .NET-Umfeld&#8221;. Es geht um Tasks und Futures, um das Parallelisieren von Methoden, um parallele Schleifen, um einen Taskmanager und um PLINQ.</p>
<p><strong>Tasks</strong> sind die zentralen Elemente der Parallel Extensions, also dedizierte Aufgaben, Funktionen, Schleifenkonstrukte oder ähnliche Dinge. Eine Task führt stets eine Funktion oder ein anderes Konstrukt innerhalb eines Threads aus, um so eine optimale Ausnutzung der Systemressourcen zu erzielen.</p>
<p>Das Besondere daran sind die <strong>Call-Back-Funktionen</strong>, die es ermöglichen, bestimmte Dinge zu übergeben, die in einem separaten Thread ausgeführt werden sollen. Mithilfe der Tasks müssen Anwendungsprogrammierer also nicht mehr in Threads denken, da diese von den .NET-Tools automatisch erzeugt, verwaltet und auf die vorhandenen Ressourcen verteilt werden.</p>
<p>Daneben gibt es <strong>Futures</strong>, also Tasks mit Rückgabewerten. Solch ein Future-Konstrukt führt beispielsweise in einem eigenen Task eine Funktion aus, deren Ergebnis an das Hauptprogramm übergeben wird, das währenddessen weiterrechnen kann. Zwar muss das Programm an einer bestimmten Stelle auf das Ergebnis warten, kann aber trotzdem parallel andere Aufgaben ausführen. Eine weitere simultane Ausführungsoption ist die Methode <strong><em>Parallel_Invoke()</em></strong>, die einen ganzen Satz von Methoden zugleich abarbeiten kann, sofern diese voneinander unabhängig sind.</p>
<p><span id="more-734"></span>Aber auch <a title="Schleifenkonstrukte sind auch in anderen Programmiermethoden sehr beliebte Objekte der Parallelisierung" href="http://www.software-dev-blog.de/mit-intel-threading-building-blocks-parallel-programmieren/12/2008/">Schleifenkonstrukte</a> bieten sich für die parallele Programmierung an, da hier gerechnet wird, was mithilfe einer parallelen Ausführung erheblich beschleunigt werden kann. Der große Vorteil von parallelen Schleifenkonstrukten ist deren fehlende Abhängigkeit von globalen oder lokalen Variablen, die bei der sequenziellen Ausführung entstehen. Ebnenso eignet sich der parallele Datenzugriff (beispielsweise bei Datenbankanwendungen) sich bestens zum Parallelisieren.</p>
<p>Als Beispiel dient eine Matrixoperation, die mit drei Variablen arbeitet, die bei der sequenziellen Programmierung mithilfe eines dreifach-verschalteten Schleifenkonstrukts das Ergebnis der Matrixberechnung ermittelt. Bei der parallelen Schleife <em><strong>Parallel.For() </strong></em>hingegen wird nur die äußere Schleife initiiert, die zwei inneren Schleifen werden per Methode übergeben. Im Hintergrund werden dann die zwei &#8220;inneren Schleifen&#8221; auf zwei parallele Threads verteilt. Die Daten werden dann am Schluss automatisch zusammengeführt. Und so sieht der Quellcode dazu aus:</p>
<p><em><img class="aligncenter size-full wp-image-742" style="margin: 5px 10px;" title="Matrixoperation mithilfe der Parallel.For-Methode" src="http://www.software-dev-blog.de/wp-content/images/2009/02/parallel_for1.jpg" alt="Matrixoperation mithilfe der Parallel.For-Methode" width="500" /></em>Eine weitere Kernfunktion des .NET-4.0-Frameworks ist die <strong>Taksmanager-Klasse</strong>, die sich um die optimale Auslastung der Systemressourcen, sprich Prozessoren und CPU-Kerne, kümmert. Hierfür versucht der Taskmanager stets, die notwendigen WorkerThreads gleichmäßig mit Tasks zu bestücken. Das geht sogar so weit, dass &#8220;unterbeschäftigte&#8221; WorkerThreads einzelne Tasks von &#8220;überbeschäftigten&#8221; WorkerThreads erhalten, um so ein optimal ausgelastetes System zu garantieren. Die Strategie dahinter nennt sich &#8220;Work Stealing&#8221;. Der Taskmanager ist übrigens beliebig konfigurierbar und ermittelt unter anderem die vorhandene Anzahl an Prozessoren.</p>
<p>Aber nicht nur die Parallelisierung von Berechnungen, sondern auch der <strong>simultane Datenzugriff</strong> wird bei .NET 4.0 im Vordergrund stehen. Hierfür wird die seit .NET 3.5 verfügbare Spracherweiterung LINQ (Language Integrated Query) parallelisiert, woraus <strong>PLINQ</strong> entsteht. Mit PLINQ kann man typsicher auf bestimmte Behälterklassen zugreifen, also auf Arrays, Listen, Queues oder Hashtabellen. Diese Datenzugriffe erinnern an die Abfragekonstrukte von relationalen Datenbanken.</p>
<p>Mit SQL-ähnlichen Abfragen und Konstrukten lässt sich beispielsweise möglichst schnell und simultan nach einem bestimmten Namen suchen. Dies gilt zumindest für große Datensätze. Sind nämlich nur wenigen Daten vorhanden, entpuppt sich die Parallelisierung oft als kontraproduktiv, da der notwendige Overhead die Berechnung eher ausbremst als beschleunigt.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-743" style="margin: 5px 10px;" title="Mit der Methode AsParallel() können in großen Datensätze simultan nach bestimmten Daten gesucht werden" src="http://www.software-dev-blog.de/wp-content/images/2009/02/plinq_as_parallel.jpg" alt="Mit der Methode AsParallel() können in großen Datensätze simultan nach bestimmten Daten gesucht werden" width="500" /></p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-3/02/2009/&via=sw_devtwits&text= Multicore-Programmierung im .NET-Umfeld - Teil 3&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-3/02/2009/&via=sw_devtwits&text= Multicore-Programmierung im .NET-Umfeld - Teil 3&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-3/02/2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Multicore-Programmierung im .NET-Umfeld &#8211; Teil 2</title>
		<link>http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-2/01/2009/</link>
		<comments>http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-2/01/2009/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 15:37:43 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Basics]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=713</guid>
		<description><![CDATA[Wie ich gestern versprochen habe, folgt heute der zweite Teil meines Mini-OOP-Specials zum Thema Multicore-Programmierung in der .NET-Welt. Im einleitenden Teil habt ihr unter anderem erfahren &#8230; &#8230; warum es mittlerweile mehr Anstrengungen erfordert, bestehende oder neue Anwendungen auf vorhandenen Computerplattformen schneller zu machen, &#8230; was die Gesetze von Amdahl und Gustafson für die parallele [...]]]></description>
			<content:encoded><![CDATA[<p>Wie ich <a title=" Multicore-Programmierung im .NET-Umfeld - Teil 1 " href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-1/01/2009/">gestern versprochen habe</a>, folgt heute der zweite Teil meines Mini-OOP-Specials zum Thema Multicore-Programmierung in der .NET-Welt.</p>
<p>Im einleitenden Teil habt ihr unter anderem erfahren &#8230;</p>
<p>&#8230; warum es mittlerweile mehr Anstrengungen erfordert, bestehende oder neue Anwendungen auf vorhandenen Computerplattformen schneller zu machen,</p>
<p>&#8230; was die Gesetze von Amdahl und Gustafson für die parallele Programmierung bedeuten</p>
<p>&#8230; und auf welchen Elementen moderne Programmarchitekturen basieren.</p>
<p>Im heutigen zweiten Teil geht es ans Eingemachte: Welche Hürden sind bei der Multicore-Programmierung im .NET-Umfeld zu überwinden? Welche Tools gibt es bereits dafür? Und was kommt auf die Entwickler in den nächsten Monaten noch alles zu?</p>
<p>Die gute Nachricht: Multithreading wird mittlerweile von den nativen Programmiersprachen wie C++ und Fortran bestens unterstützt. Hierfür gibt es auch diverse Tools wie <a title="Mit Intel Threading Building Blocks parallel programmieren" href="../12-thesen-und-antithesen-zur-multicore-programmierung/01/mit-intel-threading-building-blocks-parallel-programmieren/12/2008/">Threading Building Blocks</a>, <a title="Fehler im Multithread-Code aufspüren: Thread Checker" href="../12-thesen-und-antithesen-zur-multicore-programmierung/01/fehler-im-multithread-code-aufspuren-thread-checker/11/2008/">Thread Checker</a> und <a title="Infos zu OpenMP und Intel TBB" href="../multithreading-konzepte-openmp-apis-und-intel-tbb/11/2008/">OpenMP</a>, die Entwickler für die Parallelprogrammierung einsetzen können. In Sachen C#, Java und Python sieht es zwar (noch) nicht ganz so gut aus, aber es gibt bereits einige Methoden, Multithreading in .NET-Applikationen zu realisieren. Dabei handelt es sich um Konstrukte zum Erzeugen und Synchronisieren von Threads, aber auch zum Sperren von gemeinsamen Ressourcen (Speicher) und zum Verwalten von Threadpools.</p>
<p><span id="more-713"></span>Nichtsdestotrotz gibt es beim Multithreading diverse Probleme, mit denen sich Programmierer ohne die passende Unterstützung durch Tools oder das Framework herumschlagen müssen. Hierzu zählen unter anderem <a title="Von Deadlocks, Race Conditions und anderen Laufzeitfehlern" href="http://www.software-dev-blog.de/fehler-im-multithread-code-aufspuren-thread-checker/11/2008/">Race-Conditions, Deadlocks</a> und ein inkonsistentes Sperren von gemeinsamen Ressourcen. Die Performance leidet ebenfalls unter unzureichendem oder falschem Multithreading. Dies betrifft zum Beispiel das übertriebene Sperren von gemeinsamen Speicherbereichen sowie die vernünftige Lastverteilung auf die vorhandenen Prozessoren. Stichwort automatische Skalierung von Anwendungen auf unterschiedlichen Plattformen.</p>
<p>Doch zurück zur guten Nachricht: Es gibt Methoden, um in .NET-Umgebungen Multicore-Anwendungen mit relativ wenig Aufwand zu schreiben. Das Zauberwort: ThreadPool-Klassen. Diese eignen sich vor allem für asynchrone Aufgaben, die mithilfe der BackgroundWorker-Klasse auf einen eigenen Thread, sprich Prozessorkern, ausgelagert werden können. Ein Beispiel hierfür ist die Benutzeroberfläche, die einem dedizierten Thread zugeordnet wird. Parallel dazu läuft das Programm weiter, ohne dass es zu Leistungseinbußen kommt.</p>
<p>So viel zur Gegenwart. Die Zukunft sieht aber noch viel mehr vor. Denn eines ist klar: An der Multithread-Programmierung werden .NET-Entwickler bald nicht mehr vorbeikommen. Aus diesem Grund wurde die <a title="Mehr Infos zur Parallelprogrammierung powered by Microsoft auf MSDN" href="http://msdn.microsoft.com/en-us/concurrency/default.aspx" target="_blank">Microsoft Parallel Computing Initiative</a> ins Leben gerufen, die ein klares Ziel verfolgt:</p>
<blockquote><p>Vereinfachte Entwicklung paralleler Programme auf der Microsoft Windows Plattform, die korrekt, effizient und wartbar sind, für alle Software-Entwickler.</p></blockquote>
<p>Daraus sollen drei Dinge resultieren:</p>
<ul>
<li>Software-Entwickler können .NET-Programme einfacher parallelisieren, um sich besser auf die eigentliche Problemlösung zu konzentrieren.</li>
</ul>
<ul>
<li>Die Effizienz und Skalierbarkeit paralleler Anwendungen kann gesteigert werden.</li>
</ul>
<ul>
<li>Der Entwurf und Test paralleler Programme wird vereinfacht.</li>
</ul>
<p>All diese Forderungen münden in den Parallel Extensions (auch PFX genannt), die in das .NET-Framework Version 4.0 implementiert sein werden. Die PFX-Erweiterung zeichnet sich durch folgenden Merkmale aus:</p>
<ul>
<li>Die Parallel Extensions stellen eine Bibliothek dar, erfordern also keine Modifikationen am jeweiligen Compiler.</li>
</ul>
<ul>
<li>Sie sind sehr &#8220;leichtgewichtig&#8221;, da sie im Benutzermodus laufen.</li>
</ul>
<ul>
<li> Es wird deklaratives und imperatives Parallelisieren unterstützt. Für die imperative <a title="Programmiermethoden: Daten- und Aufgabenparallelität" href="http://www.software-dev-blog.de/programmiermethoden-daten-und-aufgabenparallelitat/12/2008/">Aufgabenparallelität</a> ist die Task Parallel Library zuständig, um die deklarative Datenparallelität kümmert sich <a title="Mehr Infos zu PLINQ" href="http://msdn.microsoft.com/de-de/magazine/cc163329.aspx" target="_blank">PLINQ</a>.</li>
</ul>
<ul>
<li>Es wird ein gemeinsames Exception-Handling-Modell geben, da die Ausnahmebehandlungen bei parallelen Programmen anders aussehen als bei seriellem Quellcode.</li>
</ul>
<p>Und was bringt das Ganze? Nun, PFX bietet eine überschaubare Anzahl von Konzepten und reduziert zudem die Komplexität paralleler Programmierung. Denn das erklärte Ziel ist es ja, Anwendungsprogrammierern den Zugang zur Multithreading-Entwicklung so einfach wie möglich zu machen. Für bessere parallelisierte Programme.</p>
<p><strong>Übrigens:</strong> Wer sich Visual Studio 2010 und das zugehörige .NET-Framework 4.0 schon mal ansehen will, kann sich auf eigene Gahr die <a title="VS 2010 und .NET 4.0 auf den PC laden" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&amp;displaylang=en" target="_blank">CTP-Version auf seinen Rechner laden</a>. Und wer noch mehr zum Thema paralleles Programmieren unter .NET wissen will, sollte <a title="Dritter Teil der Mini-Serie &quot;Multicore-Programmierung im .NET-Umfeld&quot;" href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-3/02/2009/">am Montag</a> hier wieder vorbeikommen &#8230;</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-2/01/2009/&via=sw_devtwits&text= Multicore-Programmierung im .NET-Umfeld - Teil 2&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-2/01/2009/&via=sw_devtwits&text= Multicore-Programmierung im .NET-Umfeld - Teil 2&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-2/01/2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Multicore-Programmierung im .NET-Umfeld &#8211; Teil 1</title>
		<link>http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-1/01/2009/</link>
		<comments>http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-1/01/2009/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 16:03:04 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Basics]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=708</guid>
		<description><![CDATA[Gestern war ich auf der zweiten Multicore-Session der OOP 2009 (am Dienstag wohnte ich dem Vortrag von Professor Tichy der Uni Karlsruhe bei). Die Mittwoch-Veranstaltung trug den Titel &#8220;Programmierung für Multicore-CPUs&#8221;, die sich im Speziellen an .NET-Entwickler richtete. Warum Klaus Bode nicht auf native Programmiersprachen wie C++ eingegangen ist, erklärte er mir im Anschluss an [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern war ich auf der zweiten Multicore-Session der <a title="Mehr Infos zur OOP 2009" href="http://www.software-dev-blog.de/multicore-programmierung-auf-der-oop-2009/01/2009/">OOP 2009</a> (am Dienstag wohnte ich dem <a title=" 12 Thesen und Antithesen zur Multicore-Programmierung " href="http://www.software-dev-blog.de/12-thesen-und-antithesen-zur-multicore-programmierung/01/2009/">Vortrag von Professor Tichy</a> der Uni Karlsruhe bei). Die Mittwoch-Veranstaltung trug den Titel &#8220;Programmierung für Multicore-CPUs&#8221;, die sich im Speziellen an .NET-Entwickler richtete. Warum Klaus Bode nicht auf native Programmiersprachen wie C++ eingegangen ist, erklärte er mir im Anschluss an seinen Vortrag; das ist aber eine andere Geschichte.</p>
<p>Die Session gliederte sich in vier Abschnitte: Einleitung, Parallelisierung durch Multithreading, neue Konzepte in .NET 4.0 und Ausblick. Die Zusammenfassung verschweige ich einfach mal.</p>
<p>Der erste Teil <strong>&#8220;Einleitung&#8221;</strong> beschäftigte sich vor allem mit der Frage, warum das kostenlose Mittagessen vorbei ist. Dies ist die zugegebenermaßen schwachsinnige Übersetzung <a title="Der englischsprachige Artikel &quot;The free lunch is over&quot;" href="http://www.gotw.ca/publications/concurrency-ddj.htm" target="_blank">eines englischsprachigen Artikels</a>, der sich mit der Tatsache beschäftigt, dass Prozessoren seit Jahren nicht mehr schneller werden (sondern eher langsamer) und man daher als Entwickler keine Geschwindigkeitszuwächse mehr erwarten kann, die quasi kostenlos für mehr Leistung sorgen, ohne dass man hierfür am Quellcode herumschrauben muss. Das heißt dann im Umkehrschluss, dass sich Programmierer in Zukunft intensiv mit dem Thema Parallelprogrammierung <a title=" In der Parallelprogrammierung steckt die Zukunft" href="http://www.software-dev-blog.de/in-der-parallelprogrammierung-steckt-die-zukunft/01/2009/">auseinandersetzen</a> müssen, um aus den künftigen Multicore-Prozessoren das Optimum herauszuholen.</p>
<p>Um die möglichen Schwierigkeiten der Parallelprogrammierung zu verdeutlichen, wies Rohe zunächst auf die Architektur des Core 2 Duo Prozessors von Intel hin, der aus zwei Kernen mit einem eigenem L1-Cache besteht, aber zudem über einen gemeinsamen L2-Cache verfügt. Und genau das stellt eine der wesentlichen Herausforderungen der Parallelprogrammierung dar: der gemeinsame Speicherzugriff mit all seinen <a title="Von Deadlocks, Race Conditions und anderen Laufzeitfehlern" href="http://www.software-dev-blog.de/fehler-im-multithread-code-aufspuren-thread-checker/11/2008/">unvorhersehbaren Verklemmungen</a> und Problemen!</p>
<p><span id="more-708"></span>Über die Grenzen der Parallelisierung sprach Rohe natürlich auch, und zwar mithilfe des <a title="Wiki-Info zum Amdahlschen Gesetz" href="http://de.wikipedia.org/wiki/Amdahlsches_Gesetz" target="_blank">Amdahlschen Gesetzes</a>, das eher pessimistisch ausgelegt ist. Tenor von Amdahl, einem amerikanischen Computerarchitekten: Je höher der Anteil an sequenziellem Quellcode innerhalb einer Anwendung ist, desto weniger profitiert eine Anwendung von der Parallelisierung. Dies kann laut Amdahl so weit gehen, dass selbst eine große Zahl an Prozessorkernen keinen nennenswerten Geschwindigkeitszuwachs mit sich bringt &#8211; allen Parallelisierungsanstrengungen zum Trotz.</p>
<p>Aber es gibt auch <a title="Wiki-Infos zum Gesetz von Gustafson" href="http://en.wikipedia.org/wiki/Gustafson%27s_law" target="_blank">das Gesetz von Gustafson</a>, das viel optimistischer als das von Amdahl ausgelegt ist. Gustafson kam im Zuge seiner Studien zu dem Schluss, dass die Parallelisierung von der verfügbaren Zahl der Prozessorkerne abhängt. Ergo: Je mehr CPUs vorhanden sind, desto besser skaliert die parallelisierte Anwendung.</p>
<p>Seine Einleitung schloss Rohe mit der Unterscheidung von Agenten, <a title=" Programmiermethoden: Daten- und Aufgabenparallelität " href="http://www.software-dev-blog.de/programmiermethoden-daten-und-aufgabenparallelitat/12/2008/">Aufgaben und Daten</a>, auf denen jede Programmarchitektur basiert. Das Wissen um diese drei Programmpfeiler ist für das Verständnis der parallelen Programmierung von elementarer Wichtigkeit.</p>
<p><strong>Programmhinweis:</strong> Die Teile <a title="Zweiter Teil der Mini-Serie &quot;Multicore-Programmierung im .NET-Umfeld&quot;" href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-2/01/2009/">zwei</a> und <a title="Dritter Teil der Mini-Serie &quot;Multicore-Programmierung im .NET-Umfeld&quot;" href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-3/02/2009/">drei</a> sowie die Zusammenfassung gibt es morgen hier auf diesem Kanal. So, stay tuned. Am besten, ihr abonniert das Blog einfach als <a title="Das Software Dev Blog als RSS-Feed" href="http://www.it-techblog.de/feed/" target="_blank">RSS-Feed</a>. Oder lasst euch neue Beiträge via Feedburner in die Inbox eures Mailprogramms schicken.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-1/01/2009/&via=sw_devtwits&text=Multicore-Programmierung im .NET-Umfeld - Teil 1&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-1/01/2009/&via=sw_devtwits&text=Multicore-Programmierung im .NET-Umfeld - Teil 1&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-1/01/2009/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Multicore-Programmierung auf der OOP 2009 [Upd]</title>
		<link>http://www.software-dev-blog.de/multicore-programmierung-auf-der-oop-2009/01/2009/</link>
		<comments>http://www.software-dev-blog.de/multicore-programmierung-auf-der-oop-2009/01/2009/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 08:27:24 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Interview]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=670</guid>
		<description><![CDATA[Seit gestern läuft eine der größten Entwicklerkonferenzen im deutschsprachigen Raum, die OOP 2009. Dort geht es um vielfältige Softwarethemen und natürlich auch um die Multicore-Programmierung. Aus diesem Grund werde ich mich heute und morgen Nachmittag im Messezentrum München herumtreiben und diesbezügliche Informationen zusammentragen. So treffe ich unter anderem die Leute der Dotnetpro, die auf der [...]]]></description>
			<content:encoded><![CDATA[<p>Seit gestern läuft eine der größten Entwicklerkonferenzen im deutschsprachigen Raum, die <a title="Entwicklergemeinde trifft sich auf der OOP 2009" href="http://www.software-dev-blog.de/entwicklergemeinde-trifft-sich-auf-der-oop-2009/01/2009/">OOP 2009</a>. Dort geht es um vielfältige Softwarethemen und natürlich auch um die Multicore-Programmierung.</p>
<p>Aus diesem Grund werde ich mich heute und morgen Nachmittag im Messezentrum München herumtreiben und diesbezügliche Informationen zusammentragen. So treffe ich unter anderem die Leute der <a title="Webseite der dotnetpro" href="http://www.dotnetpro.de/" target="_blank">Dotnetpro</a>, die auf der OOP mit einem eigenem Stand vertreten sein werden. Eines ihrer Themen wird die erste deutschsprachige <a title="Münchner Multicore-Powerday: Preise und weitere Infos" href="http://www.software-dev-blog.de/munchner-multicore-powerday-preise-und-weitere-infos/01/2009/">Multicore-Konferenz</a> sein, die am 23. April diesen Jahres ebenfalls in München stattfindet.</p>
<p>Am Dotnetpro-Stand hoffe ich die Hauptredner des Multicore-Powerday zu treffen, <a title="Webseite von Ralf Westphal" href="http://www.ralfw.de/default.html" target="_blank">Ralf Westphal</a> und <a title="Profil von Bernd Marquardt auf codezone.de" href="http://www.codezone.de/DetailPage.Codezone?GUID=b1fe4d6f-69d6-435c-beb4-8558a9f0defb" target="_blank">Bernd Marquardt</a>. Mit beiden plane ich kurze Interviews, in denen sie mir hoffentlich ein wenig mehr über ihre Sessions auf der <a title="Multicore-Powerday 2009 am 23. April in München" href="http://www.software-dev-blog.de/multicore-powerday-2009-am-23-april-in-munchen/01/2009/">Eintagesveranstaltung</a> im April erzählen werden.</p>
<p>Nach diesen Interviews treffe ich mich mit einer weiteren Koryphäe der Multicore-Programmierung: Walter F. Tichy von der Uni Karlsruhe, der um 17:45 Uhr mit seinem Vortrag <a title="12 Thesen und Antithesen zur Multicore-Programmierung " href="http://www.software-dev-blog.de/12-thesen-und-antithesen-zur-multicore-programmierung/01/2009/">&#8220;Herausforderung Mehrkernsysteme&#8221;</a> dran ist. Im Gespräch mit ihm werde ich versuchen, die scheinbaren Widersprüche aufzulösen, die in seinem <a title="In der Parallelprogrammierung steckt die Zukunft!" href="http://www.software-dev-blog.de/in-der-parallelprogrammierung-steckt-die-zukunft/01/2009/">Gastbeitrag</a> zu stecken scheinen, den er für die Online-Ausgabe der <em>Computerzeitung </em>geschrieben hat. <a title="Mehr Infos zu Walter F. Tichys Vortrag auf der OOP 2009" href="http://www.sigs-datacom.de/sd/kongresse/oop_2009/program.php?cat=session&amp;ID=51" target="_blank">In seinem Vortrag</a> scheint er ebenfalls ein, zwei diskussionswürdige Thesen zu vertreten:</p>
<blockquote><p>Der Vortrag skizziert die gegenwärtige Hardwareentwicklung und geht dann auf erste Erfahrungen mit der Parallelisierung nicht-numerischer Anwendungen ein. Insbesondere werden einige der üblichen Parallelisierungsempfehlungen als Mythen entlarvt.</p></blockquote>
<p>Wie dem auch sei, ich bin schon sehr gespannt, was die Herren Westphal, Marquardt und Tichy zu erzählen haben. Und was sonst noch alles auf der OOP 2009 los ist, sehe ich mir ebenfalls an und werde darüber live und in Farbe berichten. <a title="Verfolgen kann man das auch via Twitter" href="http://www.twitter.com/mhuelskoetter" target="_blank">So, stay tuned &#8230;</a></p>
<p><strong>Update:</strong> Ich habe während der OOP 2009 zwei Vorträge zum Thema Multicore-Programmierung besucht. Daraus sind <a title="12 Thesen und Antithesen zur Multicore-Programmierung " href="http://www.software-dev-blog.de/12-thesen-und-antithesen-zur-multicore-programmierung/01/2009/">12 Thesen zur Multithread-Entwicklung</a> enstanden sowie eine mehrteilige Mini-Serie zum Thema Multicore-Programmierung (<a title="Erster Teil der Mini-Serie &quot;Multicore-Programmierung im .NET-Umfeld&quot;" href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-1/01/2009/">Teil 1</a>, <a title="Zweiter Teil der Mini-Serie &quot;Multicore-Programmierung im .NET-Umfeld&quot;" href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-2/01/2009/">Teil 2</a>, <a title="Dritter Teil der Mini-Serie &quot;Multicore-Programmierung im .NET-Umfeld&quot;" href="http://www.software-dev-blog.de/multicore-programmierung-im-net-umfeld-teil-3/02/2009/">Teil 3</a>).</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/multicore-programmierung-auf-der-oop-2009/01/2009/&via=sw_devtwits&text=Multicore-Programmierung auf der OOP 2009 [Upd]&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/multicore-programmierung-auf-der-oop-2009/01/2009/&via=sw_devtwits&text=Multicore-Programmierung auf der OOP 2009 [Upd]&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/multicore-programmierung-auf-der-oop-2009/01/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multicore-Powerday: Preise und weitere Infos</title>
		<link>http://www.software-dev-blog.de/multicore-powerday-preise-und-weitere-infos/01/2009/</link>
		<comments>http://www.software-dev-blog.de/multicore-powerday-preise-und-weitere-infos/01/2009/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 13:35:20 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Agenda]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Konferenz]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=662</guid>
		<description><![CDATA[Sodala, jetzt bekommt die Entwicklerkonferenz &#8220;Multicore-Programmierung für .NET-Entwickler&#8221;, die am 23. April im Münchner Konferenzzentrum stattfindet, ein Gesicht. Und zwar in Form einer Webseite, auf der man schon eine ganze Menge über die Veranstaltung lernen kann. Da wäre zum einen der Schauplatz zu nennen: Das Konferenzzentrum befindet sich in unmittelbarer Nähe der FH München, also [...]]]></description>
			<content:encoded><![CDATA[<p>Sodala, jetzt bekommt die Entwicklerkonferenz &#8220;Multicore-Programmierung für .NET-Entwickler&#8221;, die am 23. April im <a title="Mehr Infos zum Veranstaltungsort" href="http://www.priopowerday.de/ort.0.html" target="_blank">Münchner Konferenzzentrum</a> stattfindet, ein Gesicht. Und zwar <a title="Multicore-Powerday-Webseite" href="http://www.priopowerday.de/home.html" target="_blank">in Form einer Webseite</a>, auf der man schon eine ganze Menge über die Veranstaltung lernen kann.</p>
<p>Da wäre zum einen der Schauplatz zu nennen: Das Konferenzzentrum befindet sich in unmittelbarer Nähe der FH München, also dort, wo unter anderem die Software-Entwickler von morgen ausgebildet werden. Ich habe auf jeden Fall gerade eine Mail an eine meiner Ex-Professorinnen abgeschickt; vielleicht wird ja dort an der Hochschule für angewandte Wissenschaften auch das Thema Multicore gelehrt (nix mehr FH!).</p>
<p>Zum anderen geht es auf der Webseite natürlich auch um die Inhalte der Konferenz, die zum Großteil schon feststehen. Diese ranken sich <a title="Multicore-Powerday 2009 am 23. April in München" href="http://www.software-dev-blog.de/multicore-powerday-2009-am-23-april-in-munchen/01/2009/">wie bereits berichtet</a> um folgende Themen:</p>
<p><strong>Um 9 Uhr</strong> findet zunächst einmal die Keynote-Präsentation statt. Wer diese halten wird, ist noch offen. Zumindest findet sich in der Agenda noch kein Name.</p>
<p><strong>Ab 9:45 Uhr</strong> gibt es eine Einführung in das Thema Parallelverarbeitung. Es geht um <a title="Deadlock und Race Conditions mit dem Thread Checler vermeiden" href="http://www.software-dev-blog.de/fehler-im-multithread-code-aufspuren-thread-checker/11/2008/">Deadlocks, Race Conditions</a>, Latenzen, Kanäle und <a title="Beliebte Fehler bei der Parallelprogrammierung " href="http://www.software-dev-blog.de/beliebte-fehler-bei-der-parallelprogrammierung/12/2008/">andere Dinge</a>.</p>
<p>Nach der Kaffeepause geht es <strong>ab 11.15 Uhr</strong> einen Schritt weiter: <a title="Infos zu Bernd Marquardt" href="http://www.codezone.de/DetailPage.Codezone?GUID=b1fe4d6f-69d6-435c-beb4-8558a9f0defb">Bernd Marquardt</a> und  <a title="Webseite von Ralf Westphal" href="http://www.ralfw.de/default.html" target="_blank">Ralf Westphal</a> erläutern, wie man mit .NET-Bordmitteln parallel programmierte Anwendungen erstellt. Sie behandeln also Begriffe wie ThreadPool, BackgroundWorker, WaitHandle und mehr. Grundwissen für Programmierer.</p>
<p><span id="more-662"></span>Nach dem Mittagessen <strong>(14:00)</strong> wird es dann ernst: Bernd zeigt den Anwesenden, wie sich die .NET-Bordmittel um höhere Abstraktionen erweitern lassen: Er spricht über Parallel Fx, PLinq und die Task Parallel Library (TPL), die Parallelprogrammierern bei ihrer Arbeit helfen sollen.</p>
<p><strong>Ab 15:15 Uhr</strong> ist Zeit für den Blick aufs &#8220;Große Ganze&#8221;, sprich auf das Synchronisieren einzelner Aufgaben und Funktionen zu einem skalierenden Quellcode. Außerdem geht es um die Parallelität auf Architekturebene, wofür Microsoft die Concurrency Coordination Runtime (CCR) entwickelt hat.</p>
<p><strong>Um 16:45 Uhr</strong> wird das große Finale eingeläutet: Bernd und Ralf stellen die funktionale Programmiersprache F# aus dem Hause Microsoft vor, mit der vor allem Synchronisierungsprobleme einfacher handhabbar sein sollen. F# bietet aber auch ganz neue Ansätze der Parallelprogrammierung. Nicht umsonst steckt Microsoft eine Menge an Arbeit und Geld in F# (und nicht zu vergessen die Anstrengungen rund um <a title="Videointerview mit Steve Teixeira zu VS 2010 und mehr" href="http://www.software-dev-blog.de/videochat-mit-steve-teixeira-microsoft-parallel-guru/11/2008/">Visual Studio 2010</a>).</p>
<p><strong>Ach ja:</strong> Für die Multicore-Konferenz kann man sich ab sofort <strong>anmelden</strong>. Die Tageskarte kostet regulär 490 Euro, bis zum 23. März 2009 allerdings nur 390 Euro. Um diese 100 Euro Rabatt einstreichen zu können, müsst ihr bei der Anmeldung den Rabattcode <strong>PPMC9SDB</strong> eingeben.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/multicore-powerday-preise-und-weitere-infos/01/2009/&via=sw_devtwits&text=Multicore-Powerday: Preise und weitere Infos&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/multicore-powerday-preise-und-weitere-infos/01/2009/&via=sw_devtwits&text=Multicore-Powerday: Preise und weitere Infos&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/multicore-powerday-preise-und-weitere-infos/01/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multicore-Powerday 2009 am 23. April in München [Upd]</title>
		<link>http://www.software-dev-blog.de/multicore-powerday-2009-am-23-april-in-munchen/01/2009/</link>
		<comments>http://www.software-dev-blog.de/multicore-powerday-2009-am-23-april-in-munchen/01/2009/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 10:22:37 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Konferenz]]></category>
		<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=631</guid>
		<description><![CDATA[Jetzt ist es tatsächlich soweit: Die Neue Mediengesellschaft Ulm (Dotnetpro, Database pro und PHP Journal) veranstaltet gemeinsam mit Penton Media den ersten Multicore-Powerday. Die Subheadline sagt im Grunde schon alles: &#8220;Multicore-Programmierung für .NET-Entwickler&#8221;. Und dieser &#8220;Krafttag&#8221; wird es wohl in sich haben. Es geht unter anderem um folgende Fragen: Wie nutze ich aktuelle und zukünftige [...]]]></description>
			<content:encoded><![CDATA[<p>Jetzt ist es tatsächlich soweit: Die Neue Mediengesellschaft Ulm (<a title="Webseite der dotnetpro" href="http://www.dotnetpro.de/" target="_blank">Dotnetpro</a>, <a title="Webseite der database pro" href="http://www.databasepro.de/" target="_blank">Database pro</a> und <a title="Webseite des PHP Journal" href="http://www.phpjournal.eu/" target="_blank">PHP Journal</a>) veranstaltet gemeinsam mit Penton Media den ersten Multicore-Powerday. Die Subheadline sagt im Grunde schon alles: &#8220;Multicore-Programmierung für .NET-Entwickler&#8221;.</p>
<p>Und dieser &#8220;Krafttag&#8221; wird es wohl in sich haben. Es geht unter anderem um folgende Fragen:</p>
<ul>
<li>Wie nutze ich aktuelle und zukünftige Multicore-Prozessoren optimal für meine Anwendungen?</li>
</ul>
<ul>
<li>Welche <a title="Multithreading-Konzepte: OpenMP und Intel TBB" href="http://www.software-dev-blog.de/multithreading-konzepte-openmp-apis-und-intel-tbb/11/2008/">Konzepte</a> und <a title="Mit diesen Tools lassen sich Anwendungen multi-threaden" href="http://www.software-dev-blog.de/software-projekte-mit-intel-tools-optimieren/10/2008/">Werkzeuge</a> der Parallelprogrammierung gibt es?</li>
</ul>
<ul>
<li>Was ist die Concurrency Coordination Runtime und welche Aufgaben übernimmt sie?</li>
</ul>
<ul>
<li>Welche Bedeutung haben die Parallel Extensions für das .NET-Framework und wie setze ich sie am besten ein?</li>
</ul>
<ul>
<li>Wie erstelle mithilfe von F# parallel programmierte Anwendungen?</li>
</ul>
<p>Diese und viele weitere Fragen werden auf der großen .NET-Konferenz beantwortet. Und zwar von bekannten Größen der Branche wie <a title="Webseite von Ralf Westphal" href="http://www.ralfw.de/default.html" target="_blank">Ralf Westphal</a> und <a title="Profil von Bernd Marquardt auf codezone.de" href="http://www.codezone.de/DetailPage.Codezone?GUID=b1fe4d6f-69d6-435c-beb4-8558a9f0defb" target="_blank">Bernd Marquardt</a>, beide ihres Zeichens Microsoft MVP.</p>
<p>Falls Sie also zu den .NET-Entwicklern gehören, die unbedingt mehr wissen wollen (oder müssen) zum Thema Multicore-Programmierung, sollten Sie den 23. April schon mal <strong>ganz fett und dick</strong> im Kalender markieren.</p>
<p><em>Spartipp:</em> Geben Sie bei der Anmeldung zum Multicore-Powerday einfach den Gutscheincode <strong>PPMC9SDB</strong> ein und schon sparen Sie 100 Euro. Ist das nix?!</p>
<p><strong>Update:</strong> Sodala, jetzt ist auch die <a title="Webseite des Multicore-Powerday 2009" href="http://www.priopowerday.de/home.html" target="_blank">zugehörige Webseite</a> online.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/multicore-powerday-2009-am-23-april-in-munchen/01/2009/&via=sw_devtwits&text=Multicore-Powerday 2009 am 23. April in München [Upd]&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/multicore-powerday-2009-am-23-april-in-munchen/01/2009/&via=sw_devtwits&text=Multicore-Powerday 2009 am 23. April in München [Upd]&related=:&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.software-dev-blog.de/multicore-powerday-2009-am-23-april-in-munchen/01/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

