Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Duo-Core: Programm nur auf einer CPU laufen lassen? (https://www.delphipraxis.net/88789-duo-core-programm-nur-auf-einer-cpu-laufen-lassen.html)

Nuclear-Ping 21. Mär 2007 01:50


Duo-Core: Programm nur auf einer CPU laufen lassen?
 
Grüße,

ich teste gerade auf einem Notebook, welches einen "Intel Centrino Duo" hat, unsere Software. Grund dafür ist, dass der Besitzer des Notebooks meint, die Software würde bei ihm nicht richtig laufen, einfach hängen bleiben, Blue-Screens auslösen. Auf meinem Entwicklungsrechner und ein paar anderen Rechnern läuft der Spaß allerdings ohne Mucken. Einziger Unterschied: Wir haben keine Duo-Core-Systeme.

Auf dem besagten System hängt die Anwendung ("Keine Rückmeldung") sporatisch bei Analysen oder Optimierungen. Mal gleich am Anfang, mal irgendwann mittendrin. Hierbei werden haufen Daten über USB bzw. die Soundkarte (je nach Analysemethode) empfangen, ausgewertet, Ergebnisse aufbewahrt und zum Schluss dargestellt.

Da ich im Code keinen nachvollziehbaren Fehler finden kann und das Programm auf Single-Core-Systemen blasenfrei läuft, habe ich aus Neugier mal die Anwendung über den Task-Manager auf nur eine CPU (CPU 0) limitiert. Nun lief das Programm den ganzen Abend ohne Mucken, Hänger, Abstürze. Ich gehe mal davon aus, dass es wohl damit zusammenhängt, kann es aber nicht wirklich verstehen oder nachvollziehen. Ich hab noch eine Vermutung, dass es vlt. mit dem FastMM zu tun haben könnte, den ich in der Anwendung verwende. Werde das morgen mal testen und ihn raushauen.

Da ich jetzt nicht fragen will, wie man solche Probleme mit Duo-Core-CPUs löst (falls es nicht am FastMM liegt), frage ich, wie man einer Anwendung sagen kann, dass sie im Falle von Duo-(oder mehr)-Core-CPUs nur auf einem Core (CPU0 z.B.) läuft? Geht das überhaupt (per WinAPI vlt)?

Danke.

Mario

hoika 21. Mär 2007 06:34

Re: Duo-Core: Programm nur auf einer CPU laufen lassen?
 
Hallo,

das Stichwort für Google heisst CPU Affinity.

http://www.ait-augsburg.de/downloads.htm

Lade dir dort AB_Affinity runter.
das setzt den Interbase-Prozess auf einen bestimmten Prozessor,
der Quellcode sollte leicht änderbar sein.


Wie stand es im MSDN Journal so schön.
Multithreading nur benutzen, wenn es unbedingt nötig ist
und dann sollte mindestens die Hälfte der Entwickler
ein Doppelprozessor-System bekommen.
*seufz*


Heiko

Bernhard Geyer 21. Mär 2007 07:36

Re: Duo-Core: Programm nur auf einer CPU laufen lassen?
 
Gründe kann es viele geben und die Fehlersuche kann ganz schön schwer sein.
Verwendet/Bindet ihr DLL's ein die mit MFC geschrieben sind. Hier hatten wir auch schon Probleme mit Mehrprozessorsystemen das der TCP/IP-Stack der MFC-Implementierung (AFAIK war's ne 5 oder 6er-Version) nicht Mehrprozessorsicher ist (TCP/IP-Messages gingen verloren).

QuickAndDirty 21. Mär 2007 07:36

Re: Duo-Core: Programm nur auf einer CPU laufen lassen?
 
Wir hatten da Problem auch mit einem Programm das Daten über einen Seriellen COM pollt.
Gab da voll geniale Effekete mit Dualcore Sytsmen wie etwa Vertauschte!!!! Zeichen im
Datenstrom. Ich weiß nicht warum man so eine Hardware entwickelt die die
Kommunikation mit der Peripherie stört aber seis drumm.

Es gab da 2 Lösungen:
1. Schlechte Lösung: Im bios einen Kern lahmlegen :))))))))
2. Gute Lösung: Das Fenster/Programm auf einen der Kerne Festlegen.
http://www.delphipraxis.net/internal...ct.php?t=90209

Bernhard Geyer 21. Mär 2007 07:43

Re: Duo-Core: Programm nur auf einer CPU laufen lassen?
 
Zitat:

Zitat von QuickAndDirty
Gab da voll geniale Effekete mit Dualcore Sytsmen wie etwa Vertauschte!!!! Zeichen im
Datenstrom. Ich weiß nicht warum man so eine Hardware entwickelt die die
Kommunikation mit der Peripherie stört aber seis drumm.

Die Frage ist aber ob die HW das Problem ist (Eher unwahrscheinlich) oder irgendein SW-Bestandteil (z.B. irgendwelche eingesetzten Seriellen Komponenten) oder das Betriebssystem hier ein paar unterschiede aufweist (z.B. Messagereihenfolge anders, wobei aber nie eine Reihenfolge garantiert wurde).

Nuclear-Ping 21. Mär 2007 10:41

Re: Duo-Core: Programm nur auf einer CPU laufen lassen?
 
Danke für die ganzen Tipps. Freut mich, dass es per API geht, die Zuweisung eines Prozesses festzulegen.

@Hoika: Danke, aber InterBase nutzen wir nicht. ;)

:cheers:

hoika 21. Mär 2007 10:51

Re: Duo-Core: Programm nur auf einer CPU laufen lassen?
 
Hallo,

du sollst ja auch nur den Quellcode (in der dpr)
benutzen, der ist dort fest auf den Prozess IBSERVER.EXE gesetzt,
das könntest du ja ändern .. ;)


Heiko

Robert Marquardt 21. Mär 2007 11:20

Re: Duo-Core: Programm nur auf einer CPU laufen lassen?
 
Werden Threads im Programm benutzt? Wenn ja, dann die Synchronisierung sicherstellen.
FastMM sollte keine Probleme bereiten. Wenn der kracht, dann weil ein Fehler im Programm ist, den der Borland-Manager bisher verdeckt hat.

Nuclear-Ping 21. Mär 2007 12:14

Re: Duo-Core: Programm nur auf einer CPU laufen lassen?
 
An den betroffenen Stellen sind keine Threads im Spiel.

@Hoika: Achso. Ich denke http://www.delphipraxis.net/internal...ct.php?t=90209 tuts auch. ;)

Robert Marquardt 21. Mär 2007 12:26

Re: Duo-Core: Programm nur auf einer CPU laufen lassen?
 
Zitat:

Zitat von Nuclear-Ping
An den betroffenen Stellen sind keine Threads im Spiel.

Wers glaubt. Es koennen Threads in DLLs oder Komponenten sein, die nicht beruecksichtigt sind.
Mal mit einem Prozessbeobachtungstool zuschauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz