Überlegungen zum Intel Atom Prozessor
Beim Portieren zur Netbook-Plattform fallen zunächst die wesentlich umfangreicheren Ressourcen auf, vor allem die Leistung der ATOM-CPU. Für die meisten Entwickler stellt sich dabei die Kernfrage: „Wie kann ich dieses ganze Leistungsangebot zu meinem Vorteil nutzen?“ Nehmen wir diese Fragestellung einmal als Ausgangspunkt für die Betrachtung verschiedener zentraler Aspekte, um die man sich Gedanken machen muss, will man die neuen Möglichkeiten mit dieser CPU-Leistung tatsächlich umsetzen.
Geht man von Mobiltelefonen mit eingebetteten ARM*/RISC-Prozessoren und Taktfrequenzen im Bereich von 600 MHz aus, dann bietet der Intel® Atom™ Prozessor nicht nur höhere Taktfrequenz, sondern eine Menge zusätzlicher Features, mit denen neben der hohen Verarbeitungsleistung ein niedriger Energieverbrauch einhergeht, wie unsere Kunden sich das wünschen. Wie schon beim allseits bekannten Pentium® Prozessor, gibt es auch beim Intel® Atom™ Prozessor ein breit gefächertes Modellangebot.
Dass die Netbook-Plattform aus unterschiedlichen Intel® Atom™ Prozessormodellen besteht, muss bei der Portierung auf jeden Fall berücksichtigt werden. Der Erfolg unserer portierten Anwendung hängt im Wesentlichen ab, dass wir das Potenzial der Intel® Atom™ Prozessoren voll und ganz ausschöpfen, dabei aber immer mögliche Leistungsnachteile im Auge behalten.
Abfrage der CPU-Eigenschaften
Bevor wir uns nun dem Reaktionsverhalten zuwenden, müssen wir erst einmal herausfinden, womit wir es zu tun haben. Es ist wichtig festzustellen, ob beim Zielgerät tatsächlich ein Intel® Atom™ Prozessor am Werk ist, um welches Modell es sich handelt – und mit welcher Taktfrequenz die CPU läuft. Diese Details lassen sich auf verschiedene Weise herausfinden. Unter Windows gibt es folgende Möglichkeiten.
- Plattform-spezifisches SDK – mit der _cpuid-Methode
- Verwenden von WMI (Windows Management Instrumentation)
- Aus der Registrierung
Hier ist ein einfaches Beispiel dafür, wie man mit der _cpuid-Methode in Visual Studio* 2008 die Prozessorreihe und das Modell sowie das Stepping herausfinden kann:
#include <stdio.h>
#include "cpuid.h"
void main(void)
{
_p_info info;
_cpuid(&info);
printf("v_name:\t\t%s\n", info.v_name);
printf("model:\t\t%s\n", info.model_name);
printf("family:\t\t%d\n", info.family);
printf("stepping:\t%d\n", info.stepping);
}
_cpuid()
Details: http://msdn.microsoft.com/en-us/library/hskdteyh%28VS.80%29.aspx
Includes herunterladen: http://download.microsoft.com/download/B/A/D/BADA8219-9761-498D-85B4-4565C28F4DB8/crt/cpuid.zip.exe
Wenn Sie lieber WMI verwenden möchten – hier ist ein Beispiel mit WMI in .NET (C#):
Verwendung von System.Management
public void DisplayCPUDetails()
{
ManagementClass mgmt = new ManagementClass("Win32_Processor");
ManagementObjectCollection objCol = mgmt.GetInstances();
// Loop through all processors
foreach (ManagementObject obj in objCol)
{
Response.WriteLine("ID",obj.Properties["ProcessorId"].Value.ToString());
Response.WriteLine ("DeviceID",obj.Properties["DeviceID"].Value.ToString());
Response.WriteLine ("Socket", obj.Properties["SocketDesignation"].Value.ToString());
Response.WriteLine ("Manufacturer", obj.Properties["Manufacturer"].Value.ToString());
// Clean up
obj.Dispose();
}
}
Einzelheiten zu WMI: http://msdn.microsoft.com/en-us/library/aa394373%28VS.85%29.aspx
Hinweis: Die Zielplattform für Intel® AppUpSM-Programme sind zwar „Intel® Atom™ Netbooks“, wir möchten aber nicht ausschließen, dass auch andere Prozessoren unseren Code ausführen können. Es gibt viele Gelegenheiten, bei denen man eine mit dem Intel® Atom™ SDK integrierte Anwendung auf einem Gerät laufen lassen möchte, das keine Intel® Atom™ CPU hat (Debugging, Benutzerakzeptanztest usw.) Wenn Sie aus technischer Sicht Bedenken haben, können Sie den Benutzer zum Beispiel darauf hinweisen, dass Ihre Anwendung einen Intel® Atom™ Prozessor erwartet und dass sie auf dem Computer des Benutzers eventuell nicht so funktioniert wie erwartet.
Intel® Atom™ Prozessoren
Man muss wissen, dass es viele Modelle des Intel® Atom™ Prozessors gibt. Bei den Taktfrequenzen reicht das Spektrum von 800 MHz bis 2,13 GHz. Ich erspare mir hier eine lange Tabelle der Prozessorversionen und weise stattdessen auf die offizielle Intel-Website hin, auf der diese Details zu finden sind. Wichtig ist in erster Linie, dass sich die verfügbare Leistung deutlich unterscheiden kann, je nachdem, welche spezielle Intel® Atom™ CPU Ihr Kunde in seinem Netbook hat. Falls Ihre Anwendung den Prozessor stark belastet, sollten Sie sich überlegen, einen entsprechenden Disclaimer hinzuzufügen oder empfohlene Mindestvoraussetzungen in Ihren Metadaten im Intel® AppUpSM Shop anzugeben. Dadurch lässt es sich eher vermeiden, dass Kunden unzufrieden sind oder Erwartungen nicht erfüllt werden. Gut informierte Kunden sind meist auch zufriedene Kunden.
Liste der Intel® Atom™ CPUs: http://ark.intel.com/ProductCollection.aspx?familyID=29035
Anpassungsfähiges Verhalten
Wenn Sie Ihre Anwendung so programmieren, dass sie die CPU erkennt, schaffen Sie sich die Möglichkeit, das Verhalten des Programms so anzupassen, dass es sich für den Benutzer optimal verhält. Was sollte sich im Verhalten Ihrer Anwendung ändern, wenn sie auf einem Netbook mit einer langsameren CPU läuft? Wie könnte Ihre Anwendung eine schnellere CPU nutzen? Denken Sie etwa an Multi-Threading, Multimedia-Codierung in höherer Qualität usw.
Von Netbooks mit Intel® Atom™ Prozessor können wir schlicht nicht dieselbe Leistung erwarten wie von einer High-End-Desktop-Workstation. Wir müssen uns vor Augen führen, was dem Benutzer letztendlich geboten wird – je nach Leistungsvermögen der verschiedenen Intel® Atom™ Prozessormodelle. Es stimmt auch, dass vielen von uns wesentlich mehr Verarbeitungsleistung zur Verfügung steht, die wir natürlich nutzen müssen, sofern dies im Einzelfall möglich ist.
Ein gutes Beispiel dafür wäre eine Anwendung, bei der Multimediadaten umgewandelt werden. Der dazu verwendete Encoder hat viele Parameter, von denen jeder Einfluss auf die Ausgabe und die CPU-Auslastung hat. Wenn nun die Aktivierung der XYZ-Parameter dazu führt, dass sie mit dem 123er-Modell des Intel® Atom™ Prozessors fünfmal länger braucht, können wir aktiv etwas daran ändern und dafür sorgen, dass der Benutzer mit seinem Gerät mehr Freude hat.
Dynamische Funktionsmerkmale
Wir alle wollen, dass unsere Anwendung dem Kunden bestmögliche Leistungseigenschaften bietet. Wenn wir dem Benutzer reaktionsschnelle Programme liefern, gewinnen wir loyale und zufriedene Kunden. Was tun, wenn die CPU für eine bestimmte Funktion zum Engpass wird?
Statt unser Kundenpotenzial dadurch einzuschränken, dass wir Kunden den Zugang zu unserer Anwendung wegen nicht erfüllter CPU-Voraussetzungen verwehren, können wir unsere Anwendung so programmieren, dass sie sich an die verfügbaren CPU-Ressourcen anpasst, eventuell durch einen geringeren Funktionsumfang. Wir begrenzen die betreffende Funktion oder schließen sie aus, ohne die Brauchbarkeit der Anwendung insgesamt zu beeinträchtigen.
Eine solche Technik lässt sich zum Beispiel in einer Anwendung umsetzen, bei der ein Benutzer die Häufigkeit wählen kann, mit der eine bestimmte Funktion ausgeführt wird. Wir würden dann einfach die Auswahlmöglichkeiten für langsamere Intel® Atom™ CPUs einschränken.
CPU durch GPU-Funktionen entlasten
So effizient und leistungsfähig die Intel® Atom™ CPU auch sein mag, wir sollten immer daran denken, dass ihre Leistung Grenzen hat. Während bei den meisten Mobilgeräten nur ein Vorgang nach dem anderen möglich ist und nur eine Anwendung gleichzeitig laufen kann, verhält sich ein Netbook wie jedes andere Notebook und lässt jederzeit den gemeinsamen Zugriff auf Ressourcen zu.
Es gibt unzählige Anleitungen dazu, wie man optimierten Programmcode schreibt, und ich unterstütze das voll und ganz, denn dieses Thema ist eng mit der Zufriedenheit der Kunden verknüpft. Was Ihre neu auf die Netbook-Plattform portierte Anwendung anbelangt, sollten Sie darauf achten, möglichst viele Prozesse von der CPU auf die GPU zu verlagern. Die GPU ist bei den Operationen, die sie ausführen kann, der wahre Meister, und Sie gewinnen dadurch wertvolle CPU-Power. Wenn Sie Teile der Programmausführung auf Funktionen der GPU übertragen, wird die Anwendung reibungsloser laufen und von den Benutzern nicht als „Ressourcenfresser“ empfunden.
GPU-Informationsquelle: http://appdeveloper.intel.com/de-de/blog/2010/01/20/optimize-your-game-intel-integrated-graphics-adapters
Hinweis: Oftmals neigen wir dazu, in unseren Anwendungen bei Animationen und der Drag-and-drop-Funktion auf die Standard-Ereignisse (MouseDown, LostFocus usw.) zurückzugreifen. Gehen Sie beim programmgesteuerten Verschieben von Elementen der Benutzeroberfläche umsichtig vor, zu viele Aufrufe von this.Invalidate() werden zu Problemen mit der CPU-Leistung führen. Dieser Effekt lässt sich reduzieren, wenn man über Ressourcen für die Entwicklung verfügt, mit denen DirectX*-, OpenGL*- oder sogar WPF*-Funktionen und die speziellen Features für Animationen genutzt werden können.