<?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; TBB</title>
	<atom:link href="http://www.software-dev-blog.de/tag/tbb/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.software-dev-blog.de</link>
	<description>Multicore-Programmierung, Multithreading &#38; Visual Computing</description>
	<lastBuildDate>Fri, 03 Feb 2012 09:35:23 +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>Intel Cilk Plus nun als Open Source-Version verfügbar</title>
		<link>http://www.software-dev-blog.de/intel-cilk-plus-nun-als-open-source-version-verfugbar/09/2011/</link>
		<comments>http://www.software-dev-blog.de/intel-cilk-plus-nun-als-open-source-version-verfugbar/09/2011/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 13:21:55 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Cilk Plus]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenMP]]></category>
		<category><![CDATA[TBB]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1758</guid>
		<description><![CDATA[Intel gibt den Cilk Plus Compiler und die Runtime (Linux) als Open Source zur allgemeinen, kostenlosen Nutzung frei. Sämtliche Cilk-Plus Source-Files und Libraries können Sie ab sofort von dieser Seite downloaden. Sollten Sie Fragen zu Cilk Plus haben, auf Fehler oder Probleme bei der Bedienung stoßen, wenden Sie sich bitt an das Intel Cilk Plus [...]]]></description>
			<content:encoded><![CDATA[<p>Intel gibt den <a href="http://software.intel.com/en-us/articles/intel-cilk-plus-open-source/" target="_blank">Cilk Plus Compiler und die Runtime (Linux) als Open Source</a> zur allgemeinen, kostenlosen Nutzung frei. Sämtliche <a href="http://gcc.gnu.org/svn/gcc/branches/cilkplus" target="_blank">Cilk-Plus Source-Files und Libraries</a> können Sie ab sofort <a href="http://gcc.gnu.org/svn/gcc/branches/cilkplus" target="_blank">von dieser Seite downloaden</a>.</p>
<p>Sollten Sie Fragen zu Cilk Plus haben, auf Fehler oder Probleme bei der Bedienung stoßen, wenden Sie sich bitt an das <a href="http://software.intel.com/en-us/forums/intel-cilk-plus/" target="_blank">Intel Cilk Plus Forum</a>. Dort finden Sie auch Hinweise zu aktuellen Patches wie dem <a href="http://software.intel.com/en-us/forums/showthread.php?t=85266&amp;o=a&amp;s=lr" target="_blank">aktuellen Cilk Plus Patch for gcc 4.7 </a>vom 31.8.2011.</p>
<p>Damit festigt Intel das Ziel, allen Programmierern auf Basis von C/C++ eine gleichermaßen einfache und effektive Programmiersprache beziehungsweise Extensions an die Hand zu geben, die dabei hilft, parallelen Code zu entwickeln. Seit 2009 hat Intel die Cilk-Technologie in eigene Produkte integriert und zu Cilk Plus weiterentwickelt, um sein Portfolio mit <a href="http://www.software-dev-blog.de/openmp-3-1-mit-neuen-features-und-funktionen/07/2011/" target="_blank">OpenMP</a> und den <a href="http://software.intel.com/en-us/articles/intel-tbb/" target="_blank">Threading Building Blocks</a> abzurunden.</p>
<p>Ähnlich wie bei OpenMP kennt Cilk Plus so genannte Keywords (<strong>spawn, sync, inlet, abort</strong>), mit deren Hilfe sich ein seriell programmierter Quellcodeabschnitt in ein parallel ablaufendes Konstrukt verwandelt. Ein beliebtes und oft verwendetes Beispiel ist die rekursive Berechnung von Fibonacci-Zahlen. Hier ein Code-Sample:</p>
<p>01 cilk int fib (int n)<br />
02 {<br />
03     if (n &lt; 2) return n;<br />
04     else<br />
05     {<br />
06             int x, y;<br />
07<br />
08             x = spawn fib (n-1);<br />
09             y = spawn fib (n-2);<br />
10<br />
11              sync;<br />
12<br />
13              return (x+y);<br />
14     }<br />
15 }</p>
<p>Die entscheidenden Schlüsselwörter lauten <strong>spawn</strong> (Zeile 8 und 9) und <strong>sync</strong> (Zeile 11). Diese Keywords sorgen dafür, dass die Funktion parallel auf zwei oder mehreren Prozessorkernen ausgeführt wird. Den Rest übernimmt die Runtime von Cilk Plus, die sich um das Erstellen von Threads kümmert, um das Synchronisieren derselben und um das richtige Beenden der parallel laufenden Threads. Dies ist auch der große Unterschied zu OpenMP.</p>
<p>Einen sehr guten Grundlagenartikel zu den Unterschieden zwischen OpenMP und Cilk liefert Michaels Beitrag vom Juli 2010: <a href="(http://www.software-dev-blog.de/infos-aus-erster-hand-zu-cilk/07/2010/" target="_blank">Infos aus erster Hand zu Cilk</a>.</p>
<p>Zudem empfehle ich James Reinders&#8217; Blog-Beitrag <a href="http://software.intel.com/en-us/blogs/2011/08/09/parallelism-as-a-first-class-citizen-in-c-and-c-the-time-has-come/" target="_blank">Parallelism as a First Class Citizen in C and C++, the time has come</a>, in dem er die Bedeutung von Task-Parallelisierung und Daten-Parallelisierung verdeutlicht und zeigt, wie sich beide Programmieraufgaben mit Cilk Plus realisieren 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/intel-cilk-plus-nun-als-open-source-version-verfugbar/09/2011/&via=sw_devtwits&text=Intel Cilk Plus nun als Open Source-Version verfügbar&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/intel-cilk-plus-nun-als-open-source-version-verfugbar/09/2011/&via=sw_devtwits&text=Intel Cilk Plus nun als Open Source-Version verfügbar&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/intel-cilk-plus-nun-als-open-source-version-verfugbar/09/2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Live-Berichterstattung von der dotnet Cologne 2011 – Teil 3</title>
		<link>http://www.software-dev-blog.de/live-berichterstattung-von-der-dotnet-cologne-2011-%e2%80%93-teil-3/05/2011/</link>
		<comments>http://www.software-dev-blog.de/live-berichterstattung-von-der-dotnet-cologne-2011-%e2%80%93-teil-3/05/2011/#comments</comments>
		<pubDate>Fri, 06 May 2011 15:11:44 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[ArBB]]></category>
		<category><![CDATA[Cilk]]></category>
		<category><![CDATA[dnc11]]></category>
		<category><![CDATA[Liveblogging]]></category>
		<category><![CDATA[TBB]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1593</guid>
		<description><![CDATA[Und nun zu den Developer-Tools, die jeder Parallel-Programmierer kennen sollte. Zumindest deren Unterschiede, Stärken und Schwächen, denn so fällt es nicht nur leichter, sich für das richtige Werkzeug zu entscheiden, sondern auch Fehler im Code zu minimieren. Aber natürlich lassen sich die Tools im Einsatz auch kombinieren. Merken Sie sich auf jeden Fall diesen Namen: [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1594" class="wp-caption alignleft" style="width: 160px"><a href="http://www.software-dev-blog.de/wp-content/images/2011/05/bild_2.png"><img class="size-thumbnail wp-image-1594" title="Intel-Ausstellungsbereich mit Florian und Monika" src="http://www.software-dev-blog.de/wp-content/images/2011/05/bild_2-150x150.png" alt="Intel-Ausstellungsbereich mit Florian und Monika" width="150" height="150" /></a><p class="wp-caption-text">Intel-Ausstellungsbereich mit Florian und Monika</p></div>
<p>Und nun zu den Developer-Tools, die jeder Parallel-Programmierer kennen sollte. Zumindest deren Unterschiede, Stärken und Schwächen, denn so fällt es nicht nur leichter, sich für das richtige Werkzeug zu entscheiden, sondern auch Fehler im Code zu minimieren. Aber natürlich lassen sich die Tools im Einsatz auch kombinieren.</p>
<p>Merken Sie sich auf jeden Fall diesen Namen: <a href="http://software.intel.com/en-us/articles/intel-parallel-building-blocks/" target="_blank">Parallel Building Blocks</a>. Denn diese Toolsuite vereint drei der wichtigsten Werkzeuge für Parallel-Programmierer: <a href="http://software.intel.com/en-us/articles/intel-cilk-plus/" target="_blank">Cilk Plus</a>, <a href="http://software.intel.com/en-us/articles/intel-tbb/" target="_blank">Threading Building Blocks</a> (TBB) und die neuen <a href="http://software.intel.com/en-us/articles/intel-array-building-blocks/" target="_blank">Intel Array Building Blocks </a>(ArBB), die derzeit noch in der Beta-Phase sind.</p>
<p>Cilk und Intel Array Building Blocks (ArBB) werde ich hier näher vorstellen.</p>
<h4>Cilk Plus</h4>
<p>Cilk Plus ist unbestritten das einfachste Tool und auch für Einsteiger sicher gut geeignet. Streng genommen sind sich Cilk und <a title="AVX mit Visual Studio 2010 und OpenMP optimal einsetzen" href="http://www.software-dev-blog.de/avx-mit-visual-studio-2010-und-openmp-optimal-einsetzeni/01/2011/">OpenMP</a> recht ähnlich. Beide produzieren schnellen, parallelen Code ohne viel Overhead. Und beide werden von Intel Compilern unterstützt. Das gilt im Übrigen auch für OpenMP in der Version 3. Es gibt aber auch gravierende Unterschiede, die Cilk für Entwickler deutlich attraktiver machen als OpenMP.</p>
<p>Das beginnt schon bei der Bedienung. Wer sich jemals mit Cilk auseinandergesetzt hat, wird sich an das Schlüsselwörter-Prinzip erinnern. Mit den drei Kommandos <em>cilk_spawn</em>, <em>cilk_sync</em>, <em>cilk_for</em> erledigen Sie die wichtigsten Aufgaben im Code. Dabei kontrolliert die Cilk Plus Runtime die Threads und deren zeitliche Ausführung. Gerade dieser sehr zuverlässige Cilk Runtime Scheduler hebt sich wohltuend von OpenMP ab. Die Zahl der Threads im Code wird hierbei automatisch den vorhandenen Prozessorkernen angepasst. Der Entwickler kann dies aber auch korrigieren, wenn er das möchte.</p>
<p>Auch auf <a title="Know-How und Programmiertipps: Data Races" href="http://www.software-dev-blog.de/know-how-und-programmiertipps-data-races/02/2011/">Data Races</a> hat Cilk Plus eine Antwort. Natürlich lassen sich Variablen auch mit der Mutex-Methode schützen, aber Cilk Plus geht hier deutlich eleganter vor, indem es Hyperobjects nutzt. Das sorgt für eine deutliche bessere Performance.</p>
<p>Herauszuheben sind last but not least die Array Notations in Cilk Plus. Darüber freut sich der Compiler, der Vektoranweisungen viel besser verarbeiten kann als Schleifen. Weitere Infos gibt es übrigens auf der sehr guten Seite <a href="http://www.cilk.com/" target="_blank">www.cilk.com</a>.</p>
<h4>Intel Threading Building Blocks (TBB)</h4>
<p>Die <a href="http://software.intel.com/en-us/articles/intel-tbb/" target="_blank">Intel Threading Building Blocks</a> (TBB) bieten eine C++-Laufzeitbibliothek und sind als Open Source oder per Compiler verfügbar. Sie sind plattform- und sprachenunabhängig und adressieren vor allem fortgeschrittene Developer. Mit anfängertauglichen Parallelfunktionen wie „parallel_for“ statt „for“ werden die TBB aber auch zunehmend für Einsteiger interessant.</p>
<h4>Intel Array Building Blocks (ArBB)</h4>
<p>Die jüngste Sprössling der Parallel Building Blocks heißt Intel Array Building Blocks (ArBB).<br />
Vereinfacht ausgedrückt erledigen die ArBB folgenden Job für Code in C++: Sie parallelisieren und optimieren nativen Code, und zwar genau für die Hardware, für die er konzipiert wurde und geben den Code an den Compiler zurück.</p>
<p>Vorteil für den Entwickler: Er muss den Code auch für unterschiedliche Pattformen nur ein einziges Mal schreiben, kann ihn mit ArBB neu kompilieren und dann automatisch auf die Ziel-Hardware ausrichten. Wer es selber ausprobieren möchte: <a href="http://software.intel.com/en-us/forums/intel-array-building-blocks/" target="_blank">ArBB steht als Beta zum kostenlosen Download bereit</a>.</p>
<p>So, das war’s aus Köln. In der nächsten Woche werde ich wieder live berichten – dann vom <a href="http://www.software-dev-blog.de/entwickler-event-am-10-mai-in-munchen-know-how-interessante-kontakte-und-leckeres-essen-gratis/04/2011/">ISN Black Belt Event in München</a>. Schönes Wochenende!</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/live-berichterstattung-von-der-dotnet-cologne-2011-%e2%80%93-teil-3/05/2011/&via=sw_devtwits&text=Live-Berichterstattung von der dotnet Cologne 2011 – 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/live-berichterstattung-von-der-dotnet-cologne-2011-%e2%80%93-teil-3/05/2011/&via=sw_devtwits&text=Live-Berichterstattung von der dotnet Cologne 2011 – 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/live-berichterstattung-von-der-dotnet-cologne-2011-%e2%80%93-teil-3/05/2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iSTEP-Rückblick, Intel Array Building Blocks und 100 Videos</title>
		<link>http://www.software-dev-blog.de/istep-ruckblick-intel-array-building-blocks-und-100-videos/05/2011/</link>
		<comments>http://www.software-dev-blog.de/istep-ruckblick-intel-array-building-blocks-und-100-videos/05/2011/#comments</comments>
		<pubDate>Thu, 05 May 2011 08:02:05 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Intel Array Building Blocks]]></category>
		<category><![CDATA[ISTEP]]></category>
		<category><![CDATA[Parallel Building Blocks]]></category>
		<category><![CDATA[PBB]]></category>
		<category><![CDATA[TBB]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1582</guid>
		<description><![CDATA[Rückblickend auf die Intel Software Developer Conference 2011 möchten wir an dieser Stelle auch auf das sehr detaillierte Reporting unseres Kollegen Marcus Bäckmann verweisen, der das deutsche C++ Forum betreut. Marcus bietet auf seinen Seiten eine sehr gute Zusammenfassung der wichtigsten Vorträge aus dem Blickwinkel eines C++-Programmierers. In Teil 1 seines Reports widmet er sich [...]]]></description>
			<content:encoded><![CDATA[<p>Rückblickend auf die <a href="http://www.software-dev-blog.de/?s=Intel+Software+Developer+Conference+2011+&amp;x=0&amp;y=0">Intel Software Developer Conference 2011</a> möchten wir an dieser Stelle auch auf das sehr detaillierte Reporting unseres Kollegen Marcus Bäckmann verweisen, der das deutsche <a href="http://www.c-plusplus.de/cms/index.php" target="_blank">C++ Forum</a> betreut.</p>
<p>Marcus bietet auf seinen Seiten eine sehr gute Zusammenfassung der wichtigsten Vorträge aus dem Blickwinkel eines C++-Programmierers. In <a href="http://magazin.c-plusplus.de/artikel/Intel%20ISTEP%202011%20Software%20Conference%20%28Teil%20I%29" target="_blank">Teil 1 seines Reports</a> widmet er sich unter anderem detailliert den <a href="http://software.intel.com/en-us/articles/intel-tbb/" target="_blank">Intel Threading Building Blocks</a> und den <a href="http://software.intel.com/en-us/articles/intel-parallel-building-blocks/" target="_blank">Parallel Building Blocks</a>. <a href="http://magazin.c-plusplus.de/artikel/Intel%20ISTEP%202011%20Software%20Conference%20%28Teil%20II%29" target="_blank">Teil 2</a> behandelt die Themen Code-Tuning, Analysen mit dem <a title="Dem Speicherfehler auf der Spur: Intel Inspector XE 2011" href="http://www.software-dev-blog.de/dem-speicherfehler-auf-der-spur-intel-inspector-xe-2011/02/2011/">Intel Inspector XE </a>und Embedded Systems. Klasse geschrieben und sehr empfehlenswert!</p>
<p>Apropos Parallel Building Blocks: Die bekommen mit den <a href="http://software.intel.com/en-us/articles/intel-array-building-blocks/" target="_blank">Intel Array Building Blocks (Intel ArBB)</a> „Nachwuchs“.  Die Intel Array Buidling Blocks liegen derzeit als Beta-Version vor. Nach Ihrer Registrierung können Sie die Software kostenlos downloaden.</p>
<p>Die Intel Array Building Blocks bieten ein flexibles, vektorbasiertes Parallel-Programmier-Modell für Multicore- und Many-Core Architekturen. Sie bieten C++-Bibliotheken und produzieren skalierbaren, portablen Programmcode und sind damit ideal für Anwendungen, die daten- und ressourcenintensive mathematische Berechnungen durchführen müssen, beispielsweise wissenschaftliche Programme, Finanzanalysen, Datenbanken oder Animationen.</p>
<p>Die Intel Array Building Blocks sind eine Kombination aus Intels Ct-Technologie und der RapidMind Technologie. Nach dem Start der Beta-Phase liegt nun der erste Bug-Report vor. An dieser Stelle vielen Dank an die vielen, weltweiten Beta-Tester, die dazu beitragen, dass das fertige Produkt schlussendlich Ihren Erwartungen entspricht. Die <a href="http://software.intel.com/en-us/articles/intel-arbb-10-beta-bug-fixes/" target="_blank">komplette Liste</a> lässt sich hier abrufen.</p>
<p>Sie wollen die Parallel Building Blocks genauer kennenlernen? Dann empfehlen wir Ihnen die Sammlung von insgesamt <a href="http://software.intel.com/en-us/articles/100-blogs-and-videos-about-pbb/" target="_blank">100 Videos, Trainings und Blogposts zum Thema PBB</a>, die jetzt auf ISN veröffentlich wurde. Die amerikanischen Kollegen haben eine beeindruckende Auswahl an technisches Trainings, Videos und Background-Artikeln zusammengetragen, die sowohl Einsteiger als auch Experten adressieren. Keine Session dauert länger als 15 Minuten. Und die Liste wird täglich aktualisiert, deswegen dürfen Sie auch gerne mehrmals wöchentlich reinschauen!</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/istep-ruckblick-intel-array-building-blocks-und-100-videos/05/2011/&via=sw_devtwits&text=iSTEP-Rückblick, Intel Array Building Blocks und 100 Videos&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/istep-ruckblick-intel-array-building-blocks-und-100-videos/05/2011/&via=sw_devtwits&text=iSTEP-Rückblick, Intel Array Building Blocks und 100 Videos&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/istep-ruckblick-intel-array-building-blocks-und-100-videos/05/2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intel TBB 3.0 mit neuen Funktionen und VS2010-Support</title>
		<link>http://www.software-dev-blog.de/intel-tbb-3-0-mit-neuen-funktionen-und-vs2010-support/05/2010/</link>
		<comments>http://www.software-dev-blog.de/intel-tbb-3-0-mit-neuen-funktionen-und-vs2010-support/05/2010/#comments</comments>
		<pubDate>Tue, 04 May 2010 14:20:00 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[TBB]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1374</guid>
		<description><![CDATA[Schon letzte Woche erreichte mich eine E-Mail, in der die aktualisierte Version der Intel Threading Building Blocks angekündigt wurde. Tja, und da genau heute Intels Bibliothekensammlung für C und C++ offiziell vorgestellt wird, gibt es dazu natürlich auch einen entsprechenden Blogbeitrag. Auf den ersten Blick bietet Intel TBB 3.0 zwei wesentliche Verbesserungen: die volle Kompatibilität [...]]]></description>
			<content:encoded><![CDATA[<p>Schon letzte Woche erreichte mich eine E-Mail, in der die aktualisierte Version der <a title="Intel Threading Building Blocks" href="http://www.software-dev-blog.de/neue-version-der-intel-threading-building-blocks/08/2009/">Intel Threading Building Blocks</a> angekündigt wurde. Tja, und da genau heute Intels Bibliothekensammlung für C und C++ offiziell vorgestellt wird, gibt es dazu natürlich auch einen entsprechenden Blogbeitrag.</p>
<p>Auf den ersten Blick bietet Intel TBB 3.0 zwei wesentliche Verbesserungen: die volle Kompatibilität mit Visual Studio 2010 und .NET 4 sowie die Unterstützung des künftigen ISO/ANSI-Standards für C++, der noch unter dem Arbeitsnamen C++0x geführt wird. Aber auch andere Features wie eine neue Containerklasse und verbesserte Debugger-Merkmale flossen in die neue Version der Intel TBB 3.0 ein. Im Detail sieht das wie folgt aus:</p>
<p><strong>Optionaler C++0x-Support<br />
</strong></p>
<ul>
<li>die neue Funktion <em>parallel_pipeline()</em> verbessert die alte Warteschlange-Funktion mithilfe von Lambda-Support und anderen Features</li>
<li>TBB_USE_CAPTURED_EXCEPTION() verbessert das Exception Handling</li>
<li>verbesserte Synchronisierung auf Basis konditioneller Variablen</li>
</ul>
<p><strong>Handbuch &#8220;Pattern </strong><strong>Design&#8221;</strong><br />
Dieses von TBB-Entwickler Arch Robison geschriebene Handbuch zeigt, wie Pattern Design funktioniert</p>
<p><strong>Kompatibel mit Microsoft Visual Studio 2010</strong></p>
<ul>
<li>Support der <a href="http://www.software-dev-blog.de/teched09-wie-die-ccr-net-entwicklern-bei-der-parallelprogrammierung-hilft/11/2009/">Concurrency Runtime</a></li>
<li>kompatibel mit der <a href="http://www.software-dev-blog.de/interview-visual-studio-2010-und-seine-multicore-fahigkeiten/02/2009/">Parallel Pattern Library</a></li>
<li>kompatibel mit <em>reader_writer_lock()</em> and <em>critical_section_lock()</em></li>
</ul>
<p><strong>Neue Container-Klasse<br />
</strong><em>concurrent_unordered_map()</em> (natürlich C++ 0x-kompatibel)</p>
<p><strong>Verbessertes Debuggen</strong></p>
<ul>
<li>Task Scheduling, Vorhersagen und Reaktionszeiten wurden verbessert</li>
<li>voneinander unabhängiges Verwalten von Tasks für mehrere Masterthreads</li>
<li>verbesserte Vermeidung von Deadlocks</li>
<li>weiterentwickelte Hinweise für <a href="http://www.software-dev-blog.de/isc’09-intel-parallel-amplifier-im-detail/04/2009/">Parallel Amplifier</a> und <a href="http://www.software-dev-blog.de/multicore-turbo-fur-visual-studio-intel-parallel-studio/10/2008/">Parallel Inspector</a></li>
</ul>
<p><strong>Scheduler-Support (task::enqueue)<br />
</strong></p>
<ul>
<li>unterstützt FIFO-Warteschlagen</li>
<li>nützlich für das  Emulieren von Task-Prioritäten und die Interaktion mit GUI-basierten Threads</li>
</ul>
<p><strong>Leistungsverbesserungen<br />
</strong></p>
<ul>
<li>Beschleunigung der Funktion <em>numerable_thread_specific()</em> und Kombinationen davon</li>
<li>verbesserte Speicherverteilung bei großen Speicherblöcken</li>
</ul>
<p>und einiges mehr.</p>
<p>Wer mit Intel Threading Building Blocks Software entwickeln und parallelisieren möchte, kann dies in zweierlei Hinsicht tun: entweder bezahlt man 299 Dollar für die Windows- oder Linux-Variante und erwirbt damit das <a href="http://www.threadingbuildingblocks.com" target="_blank">kommerzielle Paket von TBB 3.0</a>. Dazu gehört auch ein professioneller Support seitens Intel. Oder man begibt sich auf <a href="http://www.threadingbuildingblocks.org" target="_blank">www.threadingbuildingblocks.org</a>, besorgt sich die Open-Source-Variante des Pakets und bekommt damit eine GPLv2-Lizenz. Diese ist natürlich kostenlos.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/intel-tbb-3-0-mit-neuen-funktionen-und-vs2010-support/05/2010/&via=sw_devtwits&text=Intel TBB 3.0 mit neuen Funktionen und VS2010-Support&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/intel-tbb-3-0-mit-neuen-funktionen-und-vs2010-support/05/2010/&via=sw_devtwits&text=Intel TBB 3.0 mit neuen Funktionen und VS2010-Support&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/intel-tbb-3-0-mit-neuen-funktionen-und-vs2010-support/05/2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Von Intel TBB 2.1 auf Version 2.2 unfallfrei umsteigen</title>
		<link>http://www.software-dev-blog.de/von-intel-tbb-21-auf-version-22-unfallfrei-umsteigen/08/2009/</link>
		<comments>http://www.software-dev-blog.de/von-intel-tbb-21-auf-version-22-unfallfrei-umsteigen/08/2009/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 12:16:26 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[TBB]]></category>
		<category><![CDATA[Tool]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1115</guid>
		<description><![CDATA[Erst am Dienstag hat Intel seine neueste Version der Threading Building Blocks vorgestellt. Und gerade mal einen Tag später hat Terry Wilmarth von Intel ein Rezept online gestellt, mit dessen Hilfe der Umstieg von 2.1 auf 2.2 halbwegs unfallfrei gelingen sollte. Zu den wichtigsten Empfehlungen zählen: Da die parallel arbeitenden Warteschlangen mit der Version 2.2 [...]]]></description>
			<content:encoded><![CDATA[<p>Erst am Dienstag hat Intel seine <a title="Mehr Infos zu Intel TBB 2.2" href="http://www.software-dev-blog.de/neue-version-der-intel-threading-building-blocks/08/2009/">neueste Version der Threading Building Blocks</a> vorgestellt. Und gerade mal einen Tag später hat Terry Wilmarth von Intel <a title="Der Umstieg von Intel TBB 2.1 auf Version 2.2" href="http://software.intel.com/en-us/blogs/2009/08/05/transitioning-from-intel-tbb-21-to-22/" target="_blank">ein Rezept online gestellt</a>, mit dessen Hilfe der Umstieg von 2.1 auf 2.2 halbwegs unfallfrei gelingen sollte. Zu den wichtigsten Empfehlungen zählen:</p>
<ul>
<li>Da die parallel arbeitenden Warteschlangen mit der Version 2.2 sowohl begrenzt (bounded) als auch unbegrenzt (unbounded) arbeiten, sollten Programmierer möglichst die begrenzten Warteschlangen benutzen.</li>
</ul>
<ul>
<li>Da sich die Rückgabewerte der Vektor-Funktionen <em>grow_by</em>, <em>grow_to_at_least </em>und<em> push_back</em> geändert haben, ist der Funktionsaufruf ein wenig einfacher geworden. So wird aus <em><strong>std::copy(begin, end, x.begin()+x.grow_by(end-begin));</strong></em> jetzt <em><strong>std::copy(begin, end, x.grow_by(end-begin));</strong></em></li>
</ul>
<ul>
<li>In Intel TBB 2.2 ist <em><strong>auto_partitioner()</strong></em> als Standard gesetzt und löst damit <strong><em>simple_partitioner()</em> </strong>ab.</li>
</ul>
<ul>
<li>Der Begriff der Task-Tiefe spielt in TBB 2.2 keine Rolle mehr. Daher sind <em><strong>depth_type</strong></em> und die Methoden <em><strong>depth()</strong></em>, <em><strong>set_depth()</strong></em> und <em><strong>add_to_depth()</strong></em>.</li>
</ul>
<p>Mehr Infos und weitere Codebeispiele sind <a title="Mehr Beispiele und Infos zum Umstieg von Intel TBB 2.1 auf 2.2" href="http://software.intel.com/en-us/blogs/2009/08/05/transitioning-from-intel-tbb-21-to-22/" target="_blank">im angegebenen Blogbeitrag</a> erhältlich.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/von-intel-tbb-21-auf-version-22-unfallfrei-umsteigen/08/2009/&via=sw_devtwits&text=Von Intel TBB 2.1 auf Version 2.2 unfallfrei umsteigen&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/von-intel-tbb-21-auf-version-22-unfallfrei-umsteigen/08/2009/&via=sw_devtwits&text=Von Intel TBB 2.1 auf Version 2.2 unfallfrei umsteigen&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/von-intel-tbb-21-auf-version-22-unfallfrei-umsteigen/08/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neue Version der Intel Threading Building Blocks</title>
		<link>http://www.software-dev-blog.de/neue-version-der-intel-threading-building-blocks/08/2009/</link>
		<comments>http://www.software-dev-blog.de/neue-version-der-intel-threading-building-blocks/08/2009/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 16:00:51 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[TBB]]></category>
		<category><![CDATA[Tool]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=1112</guid>
		<description><![CDATA[Intel hat heute anlässlich der Siggraph 2009 die neueste Version 2.2 seiner C++-Bibliothek Threading Building Blocks vorgestellt. Die wesentlichen Verbesserungen im Vergleich zur Vorgängerversion 2.1 sind zwei Dinge: Lambda-Funktionen gemäß des künftigen C++0x-Standards werden jetzt vollständig unterstützt, und das Lizenzmodell wurde erheblich vereinfacht. Das soll vor allem Software-Entwicklern die Möglichkeit geben, Intel TBB bei der [...]]]></description>
			<content:encoded><![CDATA[<p>Intel hat heute anlässlich der <a title="Intel @ Siggraph 2009" href="http://software.intel.com/en-us/articles/intel-software-network-at-siggraph-2009/" target="_blank">Siggraph 2009</a> die neueste Version 2.2 seiner C++-Bibliothek <a title="Mehr Infos zu Intel TBB" href="http://www.software-dev-blog.de/mit-intel-threading-building-blocks-parallel-programmieren/12/2008/">Threading Building Blocks</a> vorgestellt. Die wesentlichen Verbesserungen im Vergleich zur Vorgängerversion 2.1 sind zwei Dinge: Lambda-Funktionen gemäß des <a title="Heise Developer Online über C++0x" href="http://www.heise.de/newsticker/C-0x-fruehestens-2010-und-ohne-Concepts--/meldung/142523" target="_blank">künftigen C++0x-Standards</a> werden jetzt vollständig unterstützt, und das Lizenzmodell wurde erheblich vereinfacht.</p>
<p>Das soll vor allem Software-Entwicklern die Möglichkeit geben, Intel TBB bei der Programmierung und Optimierung von Multithread-Sourcecode von Anfang an einsetzen zu können. So umfasst beispielsweise die Unreal Engine von Epic Games ab sofort eine kommerzielle Lizenz der Intel TBB, Autodesk stellt in Maya Intel TBB standardmäßig zur Verfügung.</p>
<p>Neben diesen Neuerungen gibt es weitere Dinge, die hinsichtlich mehr Leistung optimiert wurden:</p>
<ul>
<li>Der Taks-Scheduler wurde erheblich überarbeitet, sodass optimierte Anwendungen auf Multicore-Plattformen besser skalieren. Dazu gehören eine automatische Initialisierung bei paralleler Ausführung bestimmter Codeabschnitte und das Zusammenfassen mehrerer Tasks zu einer Gruppe.</li>
</ul>
<ul>
<li>Der Memory Allocator wurde ebenfalls verbessert, was den standardmäßigen Allocator des Betriebssystems ersetzen kann. Folge: bessere Skalierbarkeit der vorhandenen Speicherressourcen und weniger Datenkollisionen.</li>
</ul>
<ul>
<li>Darüber hinaus gibt es neue und verbesserte Konstrukte. Neu sind <em><strong>parallel_invoke</strong></em> and <em><strong>parallel_for_each, </strong></em>mit deren Hilfe sich parallele Konstrukte noch einfacher erstellen lassen. Zudem wurde das Erstellen der häufig benutzten parallel_for-Konstrukts vereinfacht.</li>
</ul>
<p>Ach ja: Für ein besseres Verständnis, was es mit den optimierten Lambda-Funktionen auf sich hat, empfehle ich zwei Blogposts (<a title="&quot;Hello Lambdas&quot; C++ 0x, a quick guide to Lambdas in C++" href="http://software.intel.com/en-us/blogs/2009/08/03/hello-lambdas-c-0x-a-quick-guide-to-lambdas-in-c/" target="_blank">Nummer 1</a> und <a title="parallel_for is easier with lambdas, Intel Threading Building Blocks" href="http://software.intel.com/en-us/blogs/2009/08/03/parallel_for-is-easier-with-lambdas-intel-threading-building-blocks/" target="_blank">Nummer 2</a>) des Kollegen Reinders, in denen er sehr anschaulich erklärt, was es bringt und was sich dadurch ändert.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/neue-version-der-intel-threading-building-blocks/08/2009/&via=sw_devtwits&text=Neue Version der Intel Threading Building Blocks&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/neue-version-der-intel-threading-building-blocks/08/2009/&via=sw_devtwits&text=Neue Version der Intel Threading Building Blocks&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/neue-version-der-intel-threading-building-blocks/08/2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimierte Parallel-Programmiersprachen braucht das Land</title>
		<link>http://www.software-dev-blog.de/optimierte-parallel-programmiersprachen-braucht-das-land/12/2008/</link>
		<comments>http://www.software-dev-blog.de/optimierte-parallel-programmiersprachen-braucht-das-land/12/2008/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 08:17:13 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[TBB]]></category>
		<category><![CDATA[Tool]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=523</guid>
		<description><![CDATA[Gerade habe ich auf Technologyreview.com einen sehr interessanten Artikel zum Thema Multicore gefunden. Bereits sein Untertitel zeigt, worunter die Multicore-Programmierer derzeit am meisten leiden: We need languages that take full advantage of multicore processing Genau darum geht es heute. Nicht die Hardware ist der Hemmschuh, sondern die Software, sprich die Programmiersprachen, die derzeit zur Verfügung [...]]]></description>
			<content:encoded><![CDATA[<p>Gerade habe ich auf Technologyreview.com einen <a title="via technologyreview.com" href="http://www.technologyreview.com/computing/21822/?a=f" target="_blank">sehr interessanten Artikel</a> zum Thema Multicore gefunden. Bereits sein Untertitel zeigt, worunter die Multicore-Programmierer derzeit am meisten leiden:</p>
<blockquote><p>We need languages that take full advantage of multicore processing</p></blockquote>
<p>Genau darum geht es heute. Nicht die Hardware ist der Hemmschuh, sondern die Software, sprich die Programmiersprachen, die derzeit zur Verfügung stehen. Oder wie es der Autor passend formuliert:</p>
<blockquote><p>Computer evolution, however, is now headed down an entirely new path: instead of simply becoming faster, our computer processors are being conjoined to work together. That new computer architecture requires a serious evolution in computer programming. Without it, we can only scratch the surface of what multicore computing can really do.</p></blockquote>
<p>Das ist die Kernthese, mit der sich auch dieses Blog immer wieder beschäftigt, denn die Zeiten der GHz-Spirale sind endgültig vorbei, und eine neue Ära des &#8220;Parallel Computing&#8221; ist angebrochen – sogar im Mainstream-Markt. Denn was die <a title="HPC by Intel" href="http://www.intel.com/cd/products/services/emea/deu/server/hpc/405548.htm" target="_blank">HPC-Gemeinde</a> seit Jahren vormacht, ist auf dem gemeinen Desktop-PC und Notebook jetzt auch möglich, wird nur zu selten richtig eingesetzt.</p>
<p>Eine weitere interessante These stellt der TR-Artikel in Sachen &#8220;Umdenken&#8221; auf: So wie seinerzeit diverse Software-Entwickler den Trend der objektorientierten Programmierung verschlafen haben, droht heute die Gefahr erneut, da das Schreiben von parallel-orientiertem Sourcecode ebenfalls einen völlig neuen Denkansatz erfordert. Dies betrifft vor allem den <a title=" Programmiermethoden: Daten- und Aufgabenparallelität " href="http://www.software-dev-blog.de/programmiermethoden-daten-und-aufgabenparallelitat/12/2008/">gemeinsamen Zugriff auf Daten</a>, dessen Koordinierung in parallelen Systemen bedeutend anspruchsvoller ist als im seriellen Universum.</p>
<p><span id="more-523"></span>Aber es gibt laut Paul Tyma, dem Autor des zitierten Beitrags, auch gute Nachrichten: Denn Sprachen wie C++ und Java, die von ihrer Anlage her ja seriell sind, haben große Änderungen erfahren und sind mittlerweile durchaus in der Lage, in Multicore-Umgebungen zu skalieren. Dies machen Tools wie die <a title=" Mit Intel Threading Building Blocks parallel programmieren " href="http://www.software-dev-blog.de/mit-intel-threading-building-blocks-parallel-programmieren/12/2008/">Intel Threading Building Blocks</a> oder die <a title=" Optimierte Compiler helfen beim Parallelisieren " href="http://www.software-dev-blog.de/optimierte-compiler-helfen-beim-parallelisieren/12/2008/">Intel C++ Compiler</a> deutlich, in denen ein ganze Menge an Multithread-Potenzial steckt. Mit diesen Hilfsmitteln gelingt auch weniger erfahrenen Parallel-Programmierern der Einstieg in die Multicore-Welt. Was die Entwickler allerdings nicht davon abhalten sollte, ihre Software-Projekte in Zukunft akribisch vorzubereiten und über bestimmte Dinge <a title=" Fünf Multicore-Programmierregeln auf einen Blick " href="http://www.software-dev-blog.de/funf-multicore-programmierregeln-auf-einen-blick/11/2008/">gründlich nachzudenken</a>.</p>
<p>Fazit: Mit den gegebenen Tools könnte der Wechsel von der seriellen zur parallelen Programmierung bald in großem Maßstab gelingen. Oder wie es Paul Tyma zusammenfasst:</p>
<blockquote><p>With these new languages and programmers&#8217; development of new skills, the acceleration of computing power that we&#8217;ve almost come to take for granted will soon be back on track.</p></blockquote>
<p>Übrigens: Paul war früher bei Google, hat sich dort intensiv mit dem Thema Multicore-Programmierung beschäftigt. Er sollte also wissen, worüber er spricht &#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/optimierte-parallel-programmiersprachen-braucht-das-land/12/2008/&via=sw_devtwits&text=Optimierte Parallel-Programmiersprachen braucht das Land&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/optimierte-parallel-programmiersprachen-braucht-das-land/12/2008/&via=sw_devtwits&text=Optimierte Parallel-Programmiersprachen braucht das Land&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/optimierte-parallel-programmiersprachen-braucht-das-land/12/2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mit Intel Threading Building Blocks parallel programmieren</title>
		<link>http://www.software-dev-blog.de/mit-intel-threading-building-blocks-parallel-programmieren/12/2008/</link>
		<comments>http://www.software-dev-blog.de/mit-intel-threading-building-blocks-parallel-programmieren/12/2008/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 18:43:44 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[TBB]]></category>
		<category><![CDATA[Tool]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=450</guid>
		<description><![CDATA[Über die Intel Threading Building Blocks haben wir schon das ein oder andere Mal berichtet, aber eine gründliche Betrachtung stand bisher noch aus. Bisher! Die Intel TBB lassen sich in sechs fundamentale Einzelteile zerlegen: 1. Algorithmen 2. Container 3. Memory Allocator 4. Mutual Exclusion 5. Timer 6. Task Scheduler 1. Die TBB-Algorithmen richten sich vor [...]]]></description>
			<content:encoded><![CDATA[<p>Über die Intel Threading Building Blocks haben wir schon <a title="Intel TBB parallel_for mithilfe von C++0x-Lambda-Ausdrücken implementieren" href="http://www.software-dev-blog.de/intel-tbb-parallel_for-mithilfe-von-c0x-lambda-ausdrucken-implementieren/05/2011/">das ein</a> oder <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/" target="_self">andere Mal berichtet</a>, aber eine gründliche Betrachtung stand bisher noch aus. Bisher!</p>
<p>Die Intel TBB lassen sich in sechs fundamentale Einzelteile zerlegen:</p>
<p>1. Algorithmen<br />
2. Container<br />
3. Memory Allocator<br />
4. Mutual Exclusion<br />
5. Timer<br />
6. Task Scheduler</p>
<p>1. Die <strong>TBB-Algorithmen</strong> richten sich vor allem an parallel ausführbare Schleifenkonstrukte, aber auch Sortieralgorithmen lassen sich mithilfe der TBB recht problemlos parallelisieren. Die zugehörigen Funktionen nennen sich <em>parallel_for</em>, <em>parallel_reduce</em>, <em>parallel_scan</em>, <em>parallel_while</em>, <em>parallel_pipeline</em> und <em>parallel_sort</em>. Eine genauere Betrachtung dieser Funktionen findet auf dem Software Dev Blog in einem späteren Beitrag statt.</p>
<p>2. Die Intel TBB setzen sich aus <strong>drei Containern</strong> zusammen: <em>queue</em>, <em>vector</em> und <em>hash table</em>. Diese Container findet man zwar auch in den Standard Template Libraries von C++ und Fortran, diese sind allerdings weniger thread-sicher als die der Intel TBB.</p>
<p>3. Der <strong>Memory Allocator</strong> der Intel TBB ist äußerst skalierbar und daher in der Lage, gemeinsam genutzten Speicher auf mehrere Threads so zu verteilen, dass sich diese nicht gegenseitig behindern. Damit kümmert sich der Allocator der TBB um das gleichzeitige Ausführen der wichtigsten Funktionen wie <em>malloc</em>, <em>new</em> und <em>delete</em>.</p>
<p>4. Die <strong>Mutual Exclusions</strong> der Intel TBB kümmern sich um konsistente Daten bei der Ausführung paralleler Funktionen. Es geht also um das Sperren und Freigeben von Daten (Lock und Unlock) während der Ausführung verschiedener Threads. Somit ist gewährleistet, dass sich Threads bei der Manipulation von Daten nicht ins Gehege kommen, was zu richtigen Ergebnissen führen soll.</p>
<p>5. Die in den Intel TBB implementierte <strong>Timing-Funktion</strong> &#8211; also das Ermitteln der Programmdauer per Subtraktion zweier Uhrzeiten &#8211; ist für viele Entwickler ein wichtiger Aspekt. Von Bedeutung dabei ist aber auch ein Ergebnis, auf das man sich selbst dann verlassen kann, wenn der zugehörige Thread auf mehreren Prozessorkernen parallel ausgeführt wird.</p>
<p>6. Eine Kernfunktion der Intel TBB ist der <strong>Task Scheduler</strong>, der die Vielzahl unterschiedlicher Aufgaben, die mithilfe der Algorithmen aus Punkt 1 definiert werden, auf die vorhandenen Threads, also Prozessorkerne, optimal verteilt. Um dies zu garantieren, beherrscht der Task Scheduler das Load Balancing, was dazu führt, dass parallele Aufgaben möglichst effizient von den vorhandenen CPU-Cores ausgeführt werden. Folge: Maximale Performance der Anwendung!</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/mit-intel-threading-building-blocks-parallel-programmieren/12/2008/&via=sw_devtwits&text=Mit Intel Threading Building Blocks parallel programmieren&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/mit-intel-threading-building-blocks-parallel-programmieren/12/2008/&via=sw_devtwits&text=Mit Intel Threading Building Blocks parallel programmieren&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/mit-intel-threading-building-blocks-parallel-programmieren/12/2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software-Projekte mit Multicore-Bibliotheken optimieren</title>
		<link>http://www.software-dev-blog.de/software-projekte-mit-multicore-bibliotheken-optimieren/12/2008/</link>
		<comments>http://www.software-dev-blog.de/software-projekte-mit-multicore-bibliotheken-optimieren/12/2008/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 15:32:39 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Bibliothek]]></category>
		<category><![CDATA[Optimieren]]></category>
		<category><![CDATA[TBB]]></category>
		<category><![CDATA[Tool]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=387</guid>
		<description><![CDATA[Gerade auf Entwickler von Multimediaanwendungen wartet ein großes Optimierungspotenzial in Sachen Multicore-Programmierung. Ein gutes Beispiel sind Videoschnittprogramme wie PowerDirector 7 von CyberLink, in denen ein hohes Maß an Datenparallelität steckt, da beispielsweise beim Rendern sämtliche Bildpunkte simultan manipuliert werden können. Wie gut, dass es für die Parallelisierung solcher Anwendungen die passenden Tools gibt, die Intel [...]]]></description>
			<content:encoded><![CDATA[<p>Gerade auf Entwickler von Multimediaanwendungen wartet ein großes Optimierungspotenzial in Sachen <a title="Fünf Regeln der Multicore-Programmierung" href="http://www.software-dev-blog.de/funf-multicore-programmierregeln-auf-einen-blick/11/2008/">Multicore-Programmierung</a>. Ein gutes Beispiel sind Videoschnittprogramme wie <a title="PowerDirector 7 ist für Multicore-Plattformen " href="http://www.software-dev-blog.de/powerdirector-7-ist-fur-core-i7-prozessor-optimiert/12/2008/">PowerDirector 7</a> von CyberLink, in denen ein hohes Maß an <a title="Programmiermethoden: Daten- und Aufgabenparallelität" href="http://www.software-dev-blog.de/programmiermethoden-daten-und-aufgabenparallelitat/12/2008/">Datenparallelität</a> steckt, da beispielsweise beim Rendern sämtliche Bildpunkte simultan manipuliert werden können.</p>
<p>Wie gut, dass es für die Parallelisierung solcher Anwendungen die passenden Tools gibt, die Intel unter dem Begriff „Performance Libraries“, also Hochleistungsbibliotheken, anbietet. Dazu gehören die schon besprochenen <a title="Multithreading-Konzepte: OpenMP und Intel TBB" href="http://www.software-dev-blog.de/multithreading-konzepte-openmp-apis-und-intel-tbb/11/2008/">Intel Threading Building Blocks</a>, aber auch spezielle C++-Bibliotheken namens Intel Integrated Performance Primitives (<a title="Mehr Infos zu Intel IPP" href="http://www.intel.com/cd/software/products/asmo-na/eng/perflib/302910.htm" target="_blank">Intel IPP</a>) und Intel Math Kernel Library (<a title="Mehr Infos zu Intel MKL" href="http://www.intel.com/cd/software/products/asmo-na/eng/perflib/307757.htm" target="_blank">Intel MKL</a>).</p>
<p>Die Intel IPP wenden sich an all diejenigen, die programmierseitig viel mit En- und Dekodern für Audio- und Videoinhalte zu tun haben, aber auch mit Datenkompression, Spracherkennung und Bildbearbeitung. Für all diese (und weitere) Anwendungen bieten die Intel IPP nämlich die passenden Bibliotheken, die sich mit wenig Aufwand in das eigene Softwareprojekt integrieren lassen. Man muss ja schließlich das Rad nicht jedes Mal neu erfinden. Außerdem kann man sicher sein, dass die IPP in höchstem Maße multithreaded sind.</p>
<p><span id="more-387"></span>Aber auch die Intel MKL bietet vorgefertigte Bibliotheken, Funktionen und Konstrukte, die sich mit wenigen Anpassungen in eigene Projekte einbinden lassen. Dies betrifft vor allem Wissenschafts-, Entwickler- und Finanzanwendungen. Die Intel MKL setzt hierfür unter anderem auf hoch parallelisierte Fast-Fourier-, Statistik- und LAPACK-Routinen.</p>
<p>Intel IPP und Intel MKL unterstützen Windows, Linux und Mac OS X und lassen sich problemlos in Visual Studio 2003, 2005 und 2008 integrieren. Beide Toolsets sind zudem Teil der <a title="Mehr Infos zu der Intel C++ Compiler Pro Edition für Windows" href="http://www.intel.com/cd/software/products/asmo-na/eng/279578.htm" target="_blank">Intel C++-Compiler Professional Edition</a>. Außerdem können die Multicore-Bibliotheken zu <a title="Intel Evaluationscenter" href="http://www.intel.com/cd/software/products/asmo-na/eng/219690.htm" target="_blank">Evaluationszwecken</a> ausgiebig getestet werden. Hierfür muss man sich nur einmal für die <a title="Via Evaluationscenter bekommt man zu Testzwecken das Intel-Tool seiner Wahl" href="http://www.intel.com/cd/software/products/asmo-na/eng/219690.htm" target="_blank">jeweilige Software anmelden</a>, was kostenfrei ist.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/software-projekte-mit-multicore-bibliotheken-optimieren/12/2008/&via=sw_devtwits&text=Software-Projekte mit Multicore-Bibliotheken optimieren&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/software-projekte-mit-multicore-bibliotheken-optimieren/12/2008/&via=sw_devtwits&text=Software-Projekte mit Multicore-Bibliotheken optimieren&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/software-projekte-mit-multicore-bibliotheken-optimieren/12/2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmiermethoden: Daten- und Aufgabenparallelität</title>
		<link>http://www.software-dev-blog.de/programmiermethoden-daten-und-aufgabenparallelitat/12/2008/</link>
		<comments>http://www.software-dev-blog.de/programmiermethoden-daten-und-aufgabenparallelitat/12/2008/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 15:57:55 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Background]]></category>
		<category><![CDATA[TBB]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=370</guid>
		<description><![CDATA[Bei der parallelen Programmierung unterscheidet man grundsätzlich zwischen drei Formen, die letztlich darüber entscheiden, welche Programmiermethoden man anwenden sollte. Die eine Form der parallelen Programmierung orientiert sich an den zu verarbeitenden Daten, die zur Laufzeit der Anwendung anfallen. Ein gutes Beispiel für die Datenparallelität ist das Rendern eines Bildes, das aus vielen tausend Bildpunkten besteht, [...]]]></description>
			<content:encoded><![CDATA[<p>Bei der parallelen Programmierung unterscheidet man grundsätzlich zwischen drei Formen, die letztlich darüber entscheiden, welche Programmiermethoden man anwenden sollte.</p>
<p>Die eine Form der parallelen Programmierung orientiert sich an den zu verarbeitenden Daten, die zur Laufzeit der Anwendung anfallen. Ein gutes Beispiel für die <strong>Datenparallelität</strong> ist das Rendern eines Bildes, das aus vielen tausend Bildpunkten besteht, die sich unabhängig voneinander berechnen, zeichnen oder mit einem Filter versehen lassen.</p>
<p>Darin steckt also eine Menge an <a title="Fünf Regeln der Multicore-Programmierung" href="http://www.software-dev-blog.de/funf-multicore-programmierregeln-auf-einen-blick/11/2008/">Multicore-Potenzial</a>, wofür sich der Einsatz von <a title="Multithreading-Konzepte: OpenMP und Intel TBB" href="http://www.software-dev-blog.de/multithreading-konzepte-openmp-apis-und-intel-tbb/11/2008/">OpenMP oder Intel TBB</a> empfiehlt. Ein weiteres gutes Beispiel ist die Rechtschreibprüfung eines Textverarbeitungsprogramms. Hier können sämtliche Wörter simultan überprüft werden, da sie zueinander in keiner Abhängigkeit stehen.</p>
<p>Auf der anderen Seite existiert der <strong>Aufgabenparallelismus</strong>, der voneinander getrennte Aufgaben betrachtet, die sich vortrefflich parallel ausführen lassen. Ein gutes Beispiel hierfür ist Outlook, das aus unterschiedlichen Modulen besteht (Adressen, Kalender, E-Mail etc.), die sich grundsätzlich unabhängig voneinander ausführen lassen und damit auf separaten Prozessorkernen laufen können.</p>
<p><span id="more-370"></span>Probleme treten hier vor allem dann auf, wenn die unterschiedlichen Programmteile auf denselben Datenbestand zugreifen, was zu ungewollten, falschen oder nicht vorhersagbaren <a title="Datenkonflikte mit dem Intel Thread Checker aufspüren und vermeiden" href="http://www.software-dev-blog.de/fehler-im-multithread-code-aufspuren-thread-checker/11/2008/">Datenkonflikten</a> führen kann. Gerade hier sind passende Tools wie die Intel Threading Building Blocks von großer Bedeutung, da diese zum einen Aufgaben in Threads verwandeln und sich zum anderen um die parallele Speicherverwaltung kümmern.</p>
<p>In der Praxis trifft man natürlich sehr häufig auf eine Mischform von Aufgaben- und Datenparallelismus, das so genannte <strong>Pipelining</strong>. Hierbei ist die Anwendung in viele unterschiedliche Aufgaben unterteilt, innerhalb derer Daten parallel verarbeitet werden können. Ein bekanntes Beispiel hierfür ist wieder die Bildbearbeitung: Ein Bild wird geöffnet, mit einem Filter versehen, in eine andere Auflösung skaliert und abschließend gespeichert.</p>
<p>In allen genannten Fällen werden jeweils viele tausend Pixel berechnet, und die Aufgaben können teilweise parallel, teilweise aber nur sequenziell ausgeführt werden. Außerdem ist die Gefahr von Datenkonflikten recht hoch. Gerade im Falle des Pipelining ist die Wahl der besten Programmiermethode von entscheidender Bedeutung. Denn in den allermeisten Fällen ist eine 100-Prozent-Parallelisierung von Software weder möglich noch sinnvoll.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/programmiermethoden-daten-und-aufgabenparallelitat/12/2008/&via=sw_devtwits&text=Programmiermethoden: Daten- und Aufgabenparallelität&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/programmiermethoden-daten-und-aufgabenparallelitat/12/2008/&via=sw_devtwits&text=Programmiermethoden: Daten- und Aufgabenparallelität&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/programmiermethoden-daten-und-aufgabenparallelitat/12/2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fünf Multicore-Programmierregeln auf einen Blick</title>
		<link>http://www.software-dev-blog.de/funf-multicore-programmierregeln-auf-einen-blick/11/2008/</link>
		<comments>http://www.software-dev-blog.de/funf-multicore-programmierregeln-auf-einen-blick/11/2008/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 15:02:21 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[TBB]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=339</guid>
		<description><![CDATA[Oft hört man die Frage, was beim parallelen Programmieren alles zu beachten sei. Deshalb folgen an dieser Stelle die fünf wichtigsten Multicore-Regeln für angehende Parallel-Entwickler: Multicore-Regel Nummer 1: Denke parallel! Am allerbesten ist ein paralleles Konzept von Anfang an. Dies vermeidet ein nachträgliches Implementieren parallelen Quellcodes, wie das beispielsweise mit den Intel Threading Building Blocks [...]]]></description>
			<content:encoded><![CDATA[<p>Oft hört man die Frage, was beim parallelen Programmieren alles zu beachten sei. Deshalb folgen an dieser Stelle die fünf wichtigsten Multicore-Regeln für angehende Parallel-Entwickler:</p>
<p><span style="color: #000080;"><em><span><span>Multicore-Regel Nummer 1:</span></span></em></span> <strong>Denke parallel!</strong> Am allerbesten ist ein paralleles Konzept von Anfang an. Dies vermeidet ein nachträgliches Implementieren parallelen Quellcodes, wie das beispielsweise mit den <a title="Mehr Infos zu Intel TBB" href="http://www.software-dev-blog.de/multithreading-konzepte-openmp-apis-und-intel-tbb/11/2008/">Intel Threading Building Blocks</a> möglich ist. Optimalerweise legen Sie sich eine Strategie zurecht, wie Sie Schritt für Schritt zu einer multicore-optimierten Anwendung kommen.</p>
<p><span style="color: #000080;"><em>Multicore-Regel Nummer 2:</em></span> <strong>Entwickle task-orientiert!</strong> Parallel programmierter Code skaliert am besten, wenn er nicht für eine bestimmte Zahl an Prozessoren programmiert wurde, sondern sich an der bestmöglichen Zahl an parallel ausführbaren Aufgaben orientiert. Denken Sie daher nicht in Threads, dass erledigen Tools wie die <a title="Intel TBB-Webseite" href="http://www.intel.com/cd/software/products/asmo-na/eng/threading/threadbuildblocks/294797.htm" target="_blank">Intel TBB</a> für Sie. Deren Scheduler verteilt die auszuführenden Aufgaben auf die vorhandenen Prozessorkerne. Und je mehr davon zur Verfügung stehen, desto paralleler läuft die Anwendung.</p>
<p><span style="color: #000080;"><em>Multicore-Regel Nummer 3:</em> </span><strong>Auf die Tools kommt es an!</strong> Parallele Threads auf Basis von POSIX oder Windows-APIs programmieren zu wollen, ist ein hartes Brot, denn Sie müssen sich selbst um die Parallelisierung des Quellcodes kümmern. Viel einfacher ist es, mit den richtigen Tools der Anwendung paralleles Leben einzuhauchen.</p>
<p><span id="more-339"></span>Sie entwickeln bevorzugt mathematisch-orientierte Software? Dann werfen Sie mal einen Blick auf die <a title="Infos zu der Intel MKL" href="http://www.intel.com/cd/software/products/asmo-na/eng/perflib/mkl/index.htm" target="_blank">Intel Math Kernel Library.</a> Sie programmieren MPEG-Encoder? Fein, dann kommen am ehesten die <a title="Intel IPP-Webseite" href="http://www3.intel.com/cd/software/products/asmo-na/eng/perflib/219780.htm" target="_blank">Integrated Performance Primitives</a> in Frage, die mithilfe der vorhandenen Funktionen das Parallelisieren von Multimediaanwendungen erleichtern. Und die Intel TBB habe ich ja bereits erwähnt, die dank ihrer eingebauten Multithread-Funktionen vor allem Schleifenkonstrukte mit wenigen Programmzeilen parallelisieren.</p>
<p><em><span style="color: #000080;">Multicore-Regel Nummer 4:</span> </em><strong>Multithread-Code muss sequenziell laufen!</strong> Das klingt zunächst einmal kontraproduktiv, stellt sich aber gerade beim Debuggen als großer Vorteil heraus, da die Fehlersuche im sequenziellen Quellcode wesentlich einfacher ist. Stellen Sie also sicher, dass Ihre Anwendung auf einem Thread fehlerfrei läuft. Wenn Sie dann beim Umstellen auf zwei, vier oder mehr Threads Fehler feststellen (zum Beispiel mithilfe des <a title="Intel Thread Checker" href="http://www.software-dev-blog.de/fehler-im-multithread-code-aufspuren-thread-checker/11/2008/">Thread Checkers</a>), können Sie sich ziemlich sicher sein, dass im Parallel-Code etwas nicht stimmt. Übrigens: Ein vollständig parallelisiertes Programm ist keine gute Idee!</p>
<p><span style="color: #000080;"><em>Multicore-Regel Nummer 5:</em></span> <strong>Denke an die Speicherverwaltung!</strong> Die Zuweisung von benötigtem Speicher ist vor allem bei parallel ausführbaren Programmen eine echte Herausforderung, da je nach Anzahl der verfügbaren Prozessoren und der damit maximalen Anzahl von Threads der richtigen Speicherverwaltung zur Laufzeit eine enorm wichtige Bedeutung zukommt. Daher sollten Sie beim Entwickeln von Multithread-Code unbedingt auf einen skalierenden Memory Allocator setzen, der den notwendigen Speicher automatisch verwaltet. Die Intel TBB setzen solch einen dynamischen Speicherzuweiser ein &#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/funf-multicore-programmierregeln-auf-einen-blick/11/2008/&via=sw_devtwits&text=Fünf Multicore-Programmierregeln auf einen Blick&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/funf-multicore-programmierregeln-auf-einen-blick/11/2008/&via=sw_devtwits&text=Fünf Multicore-Programmierregeln auf einen Blick&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/funf-multicore-programmierregeln-auf-einen-blick/11/2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multithreading-Konzepte: OpenMP, APIs und Intel TBB</title>
		<link>http://www.software-dev-blog.de/multithreading-konzepte-openmp-apis-und-intel-tbb/11/2008/</link>
		<comments>http://www.software-dev-blog.de/multithreading-konzepte-openmp-apis-und-intel-tbb/11/2008/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 17:07:00 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Konzept]]></category>
		<category><![CDATA[OpenMP]]></category>
		<category><![CDATA[TBB]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=297</guid>
		<description><![CDATA[Für die parallele Programmierung bieten sich diverse Alternativen an, von denen hier drei vorgestellt werden sollen: OpenMP, Threading-APIs und Intel Threading Building Blocks. OpenMP: Diese Threading-Methode ist relativ simpel zu handhaben, da in den Quellcode sogenannte Pragmas eingebaut werden, die der jeweilige Compiler richtig interpretieren kann – oder auch nicht. OpenMP eignet sich vor allem [...]]]></description>
			<content:encoded><![CDATA[<p>Für die <a title="Alle Beiträge zum Thema parallele Programmierung" href="http://www.software-dev-blog.de/category/multicore/">parallele Programmierung</a> bieten sich diverse Alternativen an, von denen hier drei vorgestellt werden sollen: OpenMP, Threading-APIs und Intel Threading Building Blocks.</p>
<p><strong>OpenMP:</strong> Diese Threading-Methode ist relativ simpel zu handhaben, da in den Quellcode sogenannte Pragmas eingebaut werden, die der jeweilige Compiler richtig interpretieren kann – oder auch nicht. OpenMP eignet sich vor allem für die Parallelisierung einfacher Schleifenkonstrukte und prozeduraler Datenstrukturen. Aufgrund seiner Historie lässt sich OpenMP gut in nativen Programmierumgebungen (C++ und Fortran) einsetzen, dafür leider gar nicht in managed Code (C#, .NET).</p>
<p><strong>Threading-APIs:</strong> Spezielle Threading-APIs wie Win32- oder <a title="Wiki-Infos zu POSIX" href="http://de.wikipedia.org/wiki/POSIX" target="_blank">POSIX</a> eignen sich nicht so gut zum Implementieren von Parallel-Code. Dabei werden die Multithreading-Konstrukte in eigenen Funktionen verpackt. Die Ergebnisse werden dann als Pointer übergeben, und hier steckt die Schwierigkeit bei der Arbeit mit Threading-APIs: Funktionsprototypen und Datenstrukturen müssen aufwendig modifiziert werden, was häufig die Abstraktion des Codes und das Programmdesign zerstört. Außerdem muss man sich als Programmierer selbst um das Erzeugen, Verwalten und Synchronisieren der Threads kümmern, was sehr mühsam ist. Daneben unterstützen Threading-APIs C++ nur sehr schlecht und oft gar nicht.</p>
<p><strong>Intel Threading Building Blocks:</strong> Hierbei handelt es sich um eine C++-Bibliothek, die ähnlich wie die Standard Template Library eines herkömmlichen Compilers aufgebaut ist. Die <a title="Webseite zu Intel TBB" href="http://www.intel.com/cd/software/products/asmo-na/eng/threading/threadbuildblocks/294797.htm" target="_blank">Intel TBB</a> stellen hochentwickelte Abstraktionsmodelle zur Verfügung, um eine flexible Programmierung zu ermöglichen. Das bedeutet, dass beispielsweise Iteratoren, die in Container verpackt sind, mithilfe der Intel TBB relativ einfach parallelisiert werden können.</p>
<p>Die Idee hierbei ist recht simpel: Anstatt Threads spezifiziert man einzelne Aufgaben (Tasks), die der TBB Scheduler auf die vorhandenen Hardware-Threads abbildet. Man muss sich also nicht mehr um die Synchronisation der Threads und ähnliches kümmern. Außerdem skaliert eine mithilfe der Intel TBB parallelisierte Anwendung sehr gut, da je nach verfügbaren Prozessorkernen und damit verbundenen Threads die Software um ein Vielfaches schneller ausgeführt werden kann.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/multithreading-konzepte-openmp-apis-und-intel-tbb/11/2008/&via=sw_devtwits&text=Multithreading-Konzepte: OpenMP, APIs und Intel TBB&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/multithreading-konzepte-openmp-apis-und-intel-tbb/11/2008/&via=sw_devtwits&text=Multithreading-Konzepte: OpenMP, APIs und Intel TBB&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/multithreading-konzepte-openmp-apis-und-intel-tbb/11/2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nützliche und kostenlose Entwickler-Tools</title>
		<link>http://www.software-dev-blog.de/nutzliche-und-kostenlose-entwickler-tools/11/2008/</link>
		<comments>http://www.software-dev-blog.de/nutzliche-und-kostenlose-entwickler-tools/11/2008/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 12:12:21 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[Visual Computing]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Surftipp]]></category>
		<category><![CDATA[TBB]]></category>
		<category><![CDATA[Tool]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=152</guid>
		<description><![CDATA[Kennen Sie eigentlich die Code- und Download-Seite des Intel Software Network? Nein?! Dann wird&#8217;s aber höchste Zeit. Auf dieser sehr nützlichen Webseite finden Sie diverse Tools, aber auch Sourcecode-Beispiele, die Ihre tägliche Arbeit rund um die Software-Entwicklung erleichtern und verbessern sollen. Finden Sie zum Beispiel mit dem Concurrency Checker heraus, ob Ihre Software tatsächlich parallel [...]]]></description>
			<content:encoded><![CDATA[<p>Kennen Sie eigentlich die <a title="Code- und Download-Seite des ISN" href="http://software.intel.com/sites/code-downloads/" target="_blank">Code- und Download-Seite</a> des Intel Software Network? Nein?! Dann wird&#8217;s aber höchste Zeit. Auf dieser sehr nützlichen Webseite finden Sie diverse Tools, aber auch Sourcecode-Beispiele, die Ihre tägliche Arbeit rund um die Software-Entwicklung erleichtern und verbessern sollen.</p>
<p>Finden Sie zum Beispiel mit dem <a title="Concurrency Checker" href="http://software.intel.com/en-us/articles/intel-concurrency-checker-icchecker-10" target="_blank">Concurrency Checker</a> heraus, ob Ihre Software tatsächlich parallel programmiert wurde und wie sich der Multicore-Code zur Laufzeit verhält. So spüren Sie relativ einfach Fehler im Quellcode auf. Anhand der Ergebnisse wissen Sie dann schon mal ziemlich genau, wo es bei Ihrer Software in Sachen Multithreading hakt. Anschließend können Sie mithilfe der <a title="Mehr Infos zu Intel Threading Analysis Tools" href="http://www.software-dev-blog.de/software-projekte-mit-intel-tools-optimieren/10/2008/">Intel Threading Analysis Tools</a> die Fehler beheben und aus Ihren Anwendungen echte Multicore-Anwendungen machen.</p>
<p>Aber auch <a title="Kostenlose Intel-Tools für nicht-kommerzielle Projekte" href="http://www.intel.com/cd/software/products/asmo-na/eng/download/download/219771.htm">kostenlose Entwickler-Werkzeuge</a> für nicht-kommerzielle Softwareprojekte finden Sie dort. Dazu gehören beispielsweise die Intel-Compiler (C++ und Fortran) für Linux sowie der <a title="Mehr Infos zu Intel VTune Performance Analyzer" href="http://www.intel.com/cd/software/products/asmo-na/eng/vtune/239144.htm" target="_blank">VTune Performance Analyzer</a> für Linux. Aber auch die C++-Multithread-Bibliothek <a title="Download der Intel TBB" href="http://www.threadingbuildingblocks.org/download.php" target="_blank">Intel Threading Building Blocks</a> lässt sich für nicht-kommerzielle Zwecke gratis nutzen.</p>
<p><span id="more-152"></span>Oder wie wäre es mit Software, die sich im Alpha-Stadium befindet und an deren Weiterentwicklung Sie sich beteiligen können? Hierfür hat Intel die Webseite <a title="Whatif-Webseite" href="http://whatif.intel.com/" target="_blank">Whatif</a> eingerichtet, auf der man immer wieder interessante Projekte und Tools findet. Wie zum Beispiel mathematische Bibliotheken für Fließpunktberechnungen oder statistische Funktionen.</p>
<p>Sogar eine komplette Sammlung von C++-Routinen finden man auf der Whatif-Seite. Diese kostenlose <a title="Mehr Infos zu Intel Concurrent Collections für C/C++" href="http://softwarecommunity.intel.com/articles/eng/3862.htm" target="_blank">Concurrent Collections für C/C++</a> hilft Software-Entwicklern dabei, Multicore-Anwendungen zu programmieren, ohne dabei auf eine explizite Parallelisierung achten zu müssen. Diese Bibliothek funktioniert unter Windows (32 und 64 Bit), erfordert die <a title="Opensource-Download der Intel TBB" href="http://www.threadingbuildingblocks.org/download.php" target="_blank">Opensource-Variante von Intel TBB</a> und lässt sich nur in Verbindung mit Microsoft Visual Studio 2005 SP1 oder Microsoft Visual Studio 2008 einsetzen.</p>
<p>Sie sehen also: Die <a title="Code&amp;Download-Seite von Intel" href="http://software.intel.com/sites/code-downloads/" target="_blank">Code &amp; Download-Seite</a> ist immer einen Besuch wert und gehört in jede gut sortierte Bookmark-Liste.</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/nutzliche-und-kostenlose-entwickler-tools/11/2008/&via=sw_devtwits&text=Nützliche und kostenlose Entwickler-Tools&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/nutzliche-und-kostenlose-entwickler-tools/11/2008/&via=sw_devtwits&text=Nützliche und kostenlose Entwickler-Tools&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/nutzliche-und-kostenlose-entwickler-tools/11/2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple-Software mit Intel-Tools optimieren</title>
		<link>http://www.software-dev-blog.de/apple-software-mit-intel-tools-optimieren/11/2008/</link>
		<comments>http://www.software-dev-blog.de/apple-software-mit-intel-tools-optimieren/11/2008/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 12:19:58 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Compiler]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Symbiose]]></category>
		<category><![CDATA[TBB]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=146</guid>
		<description><![CDATA[Seit dem Prozessor-Switch seitens Apple von IBM- auf Intel-CPUs Anfang 2006 ist Stück für Stück eine kleine, aber sehr exquisite Entwicklergemeinde in den Fokus von Intel gerückt: Mac-Programmierer, die mithilfe von Xcode und Cocoa neue Anwendungen erschaffen. Mit dabei sind natürlich auch Intel-Tools, die diesen Software-Entwicklern dabei helfen sollen, ihre Programme bestmöglich auf die Intel-Plattform [...]]]></description>
			<content:encoded><![CDATA[<p>Seit dem <a title="Apple kündigt den erste iMac mit Intel-Prozessor an" href="http://www.apple.com/de/pr/pr-infos2006/januar/imac.html" target="_blank">Prozessor-Switch</a> seitens Apple von IBM- auf Intel-CPUs Anfang 2006 ist Stück für Stück eine kleine, aber sehr exquisite Entwicklergemeinde in den Fokus von Intel gerückt: Mac-Programmierer, die mithilfe von <a title="Mehr Infos zu den Apple-Entwicklertools" href="http://developer.apple.com/technology/" target="_blank">Xcode und Cocoa</a> neue Anwendungen erschaffen. Mit dabei sind natürlich auch <a title="Intel Software-Tools für Mac-Entwickler" href="http://www.intel.com/cd/software/products/asmo-na/eng/227389.htm" target="_blank">Intel-Tools</a>, die diesen Software-Entwicklern dabei helfen sollen, ihre Programme bestmöglich auf die Intel-Plattform abzustimmen.</p>
<p>Dazu zählt beispielsweise der <a title="Mehr Infos zum Intel C++ Compiler für den Mac" href="http://www.intel.com/cd/software/products/asmo-na/eng/compilers/cmac/index.htm" target="_blank">C++-Compiler</a>, den es in einer Professional und Standard Edition gibt. Vor allem die Profi-Variante hat es in sich: Volle Multithread-Unterstützung für paralleles Programmieren, was zum Beispiel automatisches Multithreading umfasst, aber auch Vektorisierung, <a title="Mehr Infos zu OpenMP" href="http://openmp.org/wp/" target="_blank">OpenMP</a> oder Loop Unrolling. Darüber hinaus bietet die Compiler-Suite leistungsstarke C++-Bibliotheken für noch mehr Parallelismus, mathematische Funktionen und Multimediaanwendungen.</p>
<p>Aber nicht nur den Mac-kompatiblen C++-Compiler hat Intel zu bieten, sondern auch <a title="Mehr Infos zu Intel TBB" href="http://www.intel.com/cd/software/products/asmo-na/eng/threading/threadbuildblocks/294797.htm" target="_blank">Intel Threading Building Blocks</a>, <a title="Mehr Infos zu Intel IPP" href="http://www.intel.com/cd/software/products/asmo-na/eng/perflib/ipp/index.htm" target="_blank">Intel Integrated Performance Primitives</a> und <a title="Mehr Infos zu Intel MKL" href="http://www.intel.com/cd/software/products/asmo-na/eng/307757.htm" target="_blank">Intel Math Kernel Library</a>, die allesamt perfekt auf den Intel C++-Compiler für Mac OS X abgestimmt sind.</p>
<p><span id="more-146"></span>Das Beste daran ist jedoch die volle Integration der Intel-Tools in die Apple-eigene Entwicklerumgebung Xcode, mit der sich Mac-Programme sehr intuitiv und sehr elegant schreiben lassen. Darüber hinaus kann man sich als Entwickler sicher sein, dass die eigenen Anwendungen optimal auf Intel-basierten Apple-Rechnern laufen und das Multithread-Potenzial bestmöglich ausschöpfen.</p>
<p>Übrigens: Neben dem C++-Compiler bietet Intel auch einen <a title="Mehr Infos zum Intel Fortran Compiler" href="http://www.intel.com/cd/software/products/asmo-na/eng/compilers/fmac/index.htm" target="_blank">Fortran-Compiler</a> für die Mac-OS-X-Entwicklergemeinde. Damit diese nicht zu kurz kommt.</p>
<p>Falls Sie sich jetzt fragen, ob Sie das Ganze erst mal ausprobieren können, bevor Sie die Intel-Mac-Dev-Tools kaufen &#8211; ja, Sie können. Hierfür brauchen Sie sich lediglich für den kostenlosen Intel Premier Support <a title="Hier können Sie sich für den Intel Premier Support anmelden" href="http://support.intel.com/support/performancetools/sb/CS-017156.htm" target="_blank">anzumelden</a> und können anschließend das entsprechende Tool aus dem <a title="Link zum Intel Evaluation Center" href="http://www.intel.com/cd/software/products/asmo-na/eng/download/eval/219690.htm" target="_blank">Evaluation Center</a> auf Ihren Mac laden und dort ausgiebig testen. Kommerzielle Anwendungen lassen sich damit aber nicht erstellen!</p>
<div style="float: left margin-left: 30px; margin-buttom: 20px"><a href="http://twitter.com/share?url=http://www.software-dev-blog.de/apple-software-mit-intel-tools-optimieren/11/2008/&via=sw_devtwits&text=Apple-Software mit Intel-Tools optimieren&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/apple-software-mit-intel-tools-optimieren/11/2008/&via=sw_devtwits&text=Apple-Software mit Intel-Tools optimieren&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/apple-software-mit-intel-tools-optimieren/11/2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tipps, Infos &amp; Tricks rund ums parallele Programmieren</title>
		<link>http://www.software-dev-blog.de/tipps-infos-tricks-rund-ums-parallele-programmieren/11/2008/</link>
		<comments>http://www.software-dev-blog.de/tipps-infos-tricks-rund-ums-parallele-programmieren/11/2008/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 16:37:41 +0000</pubDate>
		<dc:creator>Michael Hülskötter</dc:creator>
				<category><![CDATA[Multicore]]></category>
		<category><![CDATA[OpenMP]]></category>
		<category><![CDATA[Surftipp]]></category>
		<category><![CDATA[TBB]]></category>

		<guid isPermaLink="false">http://www.software-dev-blog.de/?p=138</guid>
		<description><![CDATA[Das Thema „Paralleles Programmieren“ ist ein weites Feld, auf dem man sich ohne die passenden Tipps und Tricks, ohne hilfreiche Anleitungen und nützliche Webseiten-Empfehlungen ziemlich schnell verirren kann. Aus diesem Grund hat das Medienunternehmen Jupiter Online Media gemeinsam mit seinem Partner Intel eine Webseite ins Leben gerufen, die genau das leisten soll: helfen, anleiten, empfehlen. [...]]]></description>
			<content:encoded><![CDATA[<p>Das Thema „Paralleles Programmieren“ ist ein weites Feld, auf dem man sich ohne die passenden Tipps und Tricks, ohne hilfreiche Anleitungen und nützliche Webseiten-Empfehlungen ziemlich schnell verirren kann. Aus diesem Grund hat das Medienunternehmen Jupiter Online Media gemeinsam mit seinem Partner Intel eine Webseite ins Leben gerufen, die genau das leisten soll: helfen, anleiten, empfehlen.</p>
<p>Diese Seite nennt sich <a title="Webseite go-parallel.com" href="http://go-parallel.com" target="_blank">go-parallel.com</a> und berichtet in regelmäßigen Abständen über das parallele Multicore-Universum der Software-Entwicklung. Zu diesem Zweck ist die Seite in fünf Bereich unterteilt:  „Getting Started“, „Concurrent Programming“, „Community and Opinion“, „Tools and Tips“ und „Advanced Concepts“.</p>
<p>So findet man in <a title="Sektion &quot;Getting started&quot;" href="http://www.devx.com/go-parallel/Door/32532#gettingStarted" target="_blank">„Getting Started“</a> hilfreiche Anleitungen, wie man beispielsweise eine komplette <a title="Mehr Infos zu Intel Threading Building Blocks" href="http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm" target="_blank">TBB-Umgebung</a> unter Windows einrichtet und wie die Programmierung einer TBB-kompatiblen Anwendung funktioniert. Aber auch Themen wie <a title="Mehr Infos zu OpenMP" href="http://openmp.org/wp/" target="_blank">OpenMP</a> werden dort behandelt.</p>
<p><span id="more-138"></span><a title="Abschnitt &quot;Concurrent Programming&quot;" href="http://www.devx.com/go-parallel/Door/32532#concurrentProgram" target="_blank">„Concurrent Programming“</a> führt dann das fort, was unter „Getting Started“ begonnen wurde. So lernt man Teile der Intel TBB besser kennen und wie man diese für seine eigenen Projekte schneller einsetzen kann. Wie zum Beispiel den Algorithmus „parallel_scan“, mit dessen Hilfe sich einzelne Programmabschnitte in ihre Einzelteile zerlegen lassen, damit diese parallel ausgeführt werden können, was natürlich die Leistung der Anwendung erhöht. Vor allem, wenn dies rekursiv geschieht.</p>
<p>Die Sektion <a title="Abschnitt &quot;Community and Opinion&quot;" href="http://www.devx.com/go-parallel/Door/32532#communityAndOpinion" target="_blank">„Community and Opinion“</a> lässt echte Profis zur Wort kommen. Wie Claire Cates, die für das <a title="Mehr Infos zu SAS" href="http://www.sas.com/offices/europe/germany/index.html" target="_blank">Software-Unternehmen SAS</a> arbeitet und die über ihre Erfahrung mit den Intel-Tools Thread Checker und Thread Profiler spricht, die ja beide Teil des <a title="Mehr Infos über nützliche Intel-Tools" href="http://www.software-dev-blog.de/software-projekte-mit-intel-tools-optimieren/10/2008/" target="_blank">VTune Performance Analyzer</a> sind.</p>
<p><a title="Abschnitt &quot;Tools and Tips&quot;" href="http://www.devx.com/go-parallel/Door/32532#toolsAndTips" target="_blank">„Tools and Tips“</a> ist eine echte Fundgrube, wenn es um all die Intel-Tools geht, die Software-Entwicklern bei ihrer Arbeit helfen sollen. So erfährt man eine Menge über Intel Compiler und die Bibliothekssammlung Intel TBB, aber auch OpenMP ist Gegenstand dieses Abschnitts.</p>
<p>Mit <a title="Abschnitt &quot;Advanced Concepts&quot;" href="http://www.devx.com/go-parallel/Door/32532#advanceConcepts" target="_blank">„Advanced Concepts“</a> geht go-parallel.com noch einen Schritt weiter und stellt neue Technologien und Projekte vor, die Programmierer in der Zukunft unterstützen sollen. Aber auch von der Gegenwart ist die Rede: Wie man Software für Multicore-Plattformen schreibt, Programme auf Intel-Rechnern testet und wie sich bestehende Windows-Anwendungen auf Mac OS X migrieren lassen. All das und vieles mehr lernt man auf <a title="go-parallel.com" href="http://go-parallels.com" target="_blank">go-parallels.com</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/tipps-infos-tricks-rund-ums-parallele-programmieren/11/2008/&via=sw_devtwits&text=Tipps, Infos & Tricks rund ums parallele Programmieren &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/tipps-infos-tricks-rund-ums-parallele-programmieren/11/2008/&via=sw_devtwits&text=Tipps, Infos & Tricks rund ums parallele Programmieren &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/tipps-infos-tricks-rund-ums-parallele-programmieren/11/2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

