English French German Spanish Russian
Ryzom mit MultiCoreCPUs - TECHNICAL SUPPORT / WEB APPs BUGS - Ryzom Community ForumHomeGuest

TECHNICAL SUPPORT / WEB APPs BUGS


uiWebPrevious1uiWebNext

#1 Report | Quote[de] 

Da scheinbar der Wunsch, bei vielen WindowsUser, besteht auch unser Ryzom auf allen Kernen aktueller CPUs spielen zu wollen, habe ich mal einiges dazu zusammengestellt.

Dazu habe ich eine Datei erstellt, die ein selbstentpackendes Archiv ist (Download "kerne-v0.1" ~131kb). Darin sind 4 Dateien:

process.exe
start1.bat
start2.bat
wait.exe

Diese Dateien müssen ins Ryzomverzeichis auf eurem Rechner.
Mit der start1.bat könnt ihr Ryzom starten, wobei nach genau 60sec alle Kerne aktiviert werden.
Nehmt ihr die start2.bat, bestimmt ihr den Zeitpunkt zum Aktivieren selbst, indem ihr irgendeine Taste zum Fortfahren drückt. Ein Meldung wird euch darauf hinweisen.
Bedenkt: Das Umstellen auf alle Kerne gelingt nur, wenn ihr an der CharakterAuswahl vorbei seit. Meistens ist man dies nach 60sec ;)

Ich habe diese StartDateien auf WinXP Professional 32bit und Win7 Professional 64bit ausprobiert. Somit sollten auch alle WindowsVersionen zwischen diesen beiden damit funktionieren.

Da es viele unterschiedliche Prozessoren/CPUs gibt, mit unterschiedlich vielen Kernen müsst ihr die StartDateien an euer System anpassen. Bearbeitet die start1.bat oder start2.bat und sucht die Zeile:
process.exe -a client_ryzom_rd.exe 1111
Hierbei handelt es sich um die Zeile für meine CPU. Sie hat 4 Kerne. Dafür stehen die "1". Jede "1" für einen Kern.

Hat jemand also nur 2 Kerne (DualCore), sollte die Zeile so aussehen:
process.exe -a client_ryzom_rd.exe 11

Wenn jemand einen OctaCore (8 Kerne) sein Eigenen nennt, dann sollte es so geschrieben sein:
process.exe -a client_ryzom_rd.exe 11111111

Die Startdatei eurer Wahl, also mit Zeitvorgabe oder Aktivierung auf Tastendruck, kann nun benutzt werden.


Ab hier kommen ExpertenEinstellungen die nicht zwingend notwendig sind:

Tip: Niemand sagt, das man alle Kerne aktiviert haben muss. Man kann auch nur 2 Kerne aktivieren und die anderen eben nicht. Wenn man über 4 oder mehr Kerne verfügt. Das kann jeder in der Startdatei einstellen wie er will. Es gilt: Jede "1" für einen Kern.
Die Kerne sind durchnummeriert und zwar rückwärts. Beispiel für ein QuadCore (4 Kerne, man zählt hier 3, 2, 1, 0):
process.exe -a client_ryzom_rd.exe 1100
Hier sind die Kerne 0 und 1 nicht aktiviert. Nur die Kerne 2 und 3.

Bei gleichem Prozessor mit 3 aktiven Kernen würde es so aussehen:
process.exe -a client_ryzom_rd.exe 1101
oder process.exe -a client_ryzom_rd.exe 1011
oder process.exe -a client_ryzom_rd.exe 1110
Je nachdem welche Kerne aktiviert sein soll...

Ihr könnt auch die Zeit in der start1.bat verändern. Sucht dazu die Zeile:
wait.exe 60000
Hier steht die "60000" für 60sec. Erhöht den Wert oder verringert ihn nach Belieben. Aber: Ihr müsst euch die Zeit geben, die ihr bis nach der Charakterauswahl braucht. Lieber ein bischen mehr Zeit angeben .. sicherer ist das.... 60sec reichen aber meist.

-----

Bislang habe ich noch nie sowas veröffentlich. Beide Hilfesprogramme (process.exe und wait.exe) sind Freeware und können bedenkenlos benutzt werden. Wenn bei euch irgendwas nicht funktionieren sollte, schreibs in diesem Thread oder sprecht mich ingame an.

Last edited by Curtos (9 years ago)

---

Curtos Nizzo, Hoher Offizier der Kamigawas (HO of Kamigawa)

#2 Report | Quote[de] 

Ein paar Ideen, wie das mit Linux gehen kann:

Es gibt das Kommando taskset, das Prozesse CPUs zuweisen kann. Man kann entweder mit
"taskset -p <Prozessnummer>" die CPU-Affinität des laufenden Prozesses abfragen und z.B. mit
"taskset -pc 0-7 <Prozessnummer>"
verändern. Wenn man nur 2 CPUs (Cores) hat, kann man trotzdem den höheren Wert nehmen, das System merkt das und setzt nur die CPUs, die es hat.

Ein Startkommando für einen Skript wäre
/<pfad>/ryzom_client &; taskset -pc 0-7 $!

Wenn ich das tiefer getestet habe, folgen ein paar Beispiele, wie man ein Skript formulieren kann, wenn andere Linuxer Vorschläge haben, gern auch.

Eine gesetzte CPU-Affinität wird unter Linux nach der Characterauswahl nicht zurückgesetzt, soweit ich es bisher testen konnte. In dem Fall könnte man mit "ps auxww | grep ryzom_client | grep -v grep" den CPU-Verbrauch (3. Wert) testen und die Affinität setzen, wenn die Last über, sagen wir 50.0 ist (bei mir meist 92.0-99.9), dann läuft das Hauptprogramm.

Natürlich kann man mit taskset auch einzelne oder mehrere CPUs zuweisen, etwa "taskset -c 0,2-3,5,7 .."
Die eigentlich mögliche und dokumentierte Syntax "taskset -c 0-7 /<pfad>/ryzom_client" hat bei mir die CPU-Affinität nicht gesetzt wie angefordert (ka warum).

Last edited by Daomei (9 years ago)

---

Daomei die Streunerin - religionsneutral, zivilisationsneutral, gildenneutral

#3 Report | Quote[de] 

Ich hab keinen Hinweis gefunden, dass Ryzom wirklich parallelisiert ist (was natürlich nicht heißt, dass es das nicht ist :). Unter Umständen läuft also nur ein sequenzielles Programm auf verschiedenen Prozessoren, ohne wirklichen speed up. Hat da jemand Informationen?

quad

#4 Report | Quote[de] 

Mir ist nur aufgefallen, das die Texturen von Gebäuden und Mobs sehr viel schneller geladen werden, als mit nur einem Kern. Also, manchmal kommt man in Städte und es fehlen einfach alle oder viele Texturen. Das kommt auch teilweise bei Tieren oder Homins vor, wenn auch nur teilweise. Da sind mit unter "fliegende Gesichter", weil der Rest des Körpers nicht geladen wurde.

Wie auch immer: Sind alle Kerne aktiv, passiert das bei mir nicht mehr.

Auf meinem alten Notebook, ein DuoCore2, kam es manchmal zum CrashToDesktop. Ob das an dem Verwenden beider Kerne lag, kann ich nicht sagen. Vielleicht kann man hier ja mal Erfahrungen mit vermehrten CtDs im Zuammenhang mit MultiCore-Nutzung zusammentragen.

---

Curtos Nizzo, Hoher Offizier der Kamigawas (HO of Kamigawa)

#5 Report | Quote[de] 

Hi,

danke für die Anleitung. Funktioniert bestens auf meinem Intel i7 940 / Windows7 64Bit - System ("1111" als Konfigschalter). Das es mit den Grafikladen schneller geht, hab ich festgestellt. Leider ist kein Geschwindigkeitszuwach beim Buddeln spürbar *g*.

Leider stürzt das Programm auf meinem AMD Athlon 64 X2 Dual Core / Windows XP - System immer mit
unterschiedlichen Fehlermeldungen nach der Charakterauswahl ab ("11" als Konfigschalter).

Connection Events:
Memory: 7780KB/2047MB
Process Virtual Memory: 1009MB
OS: Microsoft Windows XP Professional Service Pack 2 (Build 2600) (5.1 2600)
Processor: AMD Athlon(tm) 64 X2 Dual Core Processor 4400+ / x86 Family 15 Model 35 Stepping 2 / AuthenticAMD / 2210MHz / 2 Processors found
CPUID: 178bfbff
HT: NO
CpuMask: 3
NeL3D: Direct3d / nv4_disp.dll / NVIDIA GeForce GTS 450 / \\.\DISPLAY1 / driver version : 6.14.12.8558
3DCard: NVIDIA GeForce GTS 450, version 6.14.12.8558

Fehlermeldung:
A failed assertion occurs
ProcName: client_ryzom_rd.exe
Date: 2011/11/21 08:15:01
File: r:\code\nel\include\nel/misc/algo.h
Line: 44
FuncName: NLMISC::incrementalBlend
Reason: "absDelta >= 0.f"
-------------------------------
Log with no filter:
-------------------------------
2011/11/21 08:15:01 client_ryzom_rd.exe INF f70 move_container.cpp 1133 : PACS: time=0.000000 >=

Edited 2 times | Last edited by Gazzi (9 years ago)

---

#6 Report | Quote[de] 

Die Zeile mit dem "Process" darf erst nach der Charauswahl geladen werden. Das ist bei WinSystemen wichtig. Am besten erst beim Erscheinen des Chars ingame, sollte auf alle Kerne umgeschalten werden. Zu Abstüzten solcher Art kam es bei mir auch noch nicht, nur das nach der Charauswahl die client_ryzom_rd.exe scheinbar ein zweites mal gestartet wird und wieder nur 1Kern genutzt wird. Daher habe ich eine Aktivierungsverzögerung von 60sec eingebaut.

Last edited by Curtos (9 years ago)

---

Curtos Nizzo, Hoher Offizier der Kamigawas (HO of Kamigawa)

#7 Report | Quote[de] 

Quadralli
Ich hab keinen Hinweis gefunden, dass Ryzom wirklich parallelisiert ist (was natürlich nicht heißt, dass es das nicht ist :). Unter Umständen läuft also nur ein sequenzielles Programm auf verschiedenen Prozessoren, ohne wirklichen speed up. Hat da jemand Informationen?quad

Ob eine Parallelisierung stattfindet, hängt auch vom Betriebssystem, den Systemaufrufen und den Bibliotheksfunktionen der Programme (hier des Client) ab. Diese sind m.W. schon in der Lage zu parallelisieren, wenn sie dürfen, ein Programm, das alle Cores nutzt, sollte, abhängig davon, was es nutzt, effizienter laufen - oder auch im Gegenteil, wenn diese Zugriffe zu Races führen. Ich hatte z.B. den Eindruck, dass ich mit Verteilung auf beide CPUs auf dem PC schnelleren Grafikaufbau (bes. Silan), aber auch mehr bitte warten hatte.

Sehr hilfreich ist taskset auf jeden Fall, wenn man mehrere Clients hat. Die kann man vrschiedenen Cores zuweisen, was definitiv zu flüssigerem Spiel führt.

---

Daomei die Streunerin - religionsneutral, zivilisationsneutral, gildenneutral

#8 Report | Quote[de] 

Hmm .. also erstmal: Der Ryzom-Client ist im aktuellen Code nicht parallelisiert.
Eine "echte" Unterstützung für mehrere Kerne gibt es nicht. Diese wäre aber notwendig, um wirkliche Performancezuwächse zu haben. Oder um Ryzom auf deutlich langsameren Cores toll spielen zu können.

Das Spiel besteht, wie die allermeisten anderen auch, immer noch aus einer Hauptschleife, die abgearbeitet wird, und zwar Schritt für Schritt, wo der eine vom anderen abhängig ist. Das kann man zwar auf mehrere Kerne verteilen, aber es ändert nichts an der Tatsache, daß alles eins-nach-dem-anderen abgearbeitet wird.
Natürlich hat das Spiel auch Unterprozesse, die theoretisch eine gewisse Parallelisierung erlauben - beispielsweise werden diese fürs Netzwerk, die Soundausgabe und den Zugriff auf die großen Datendateien genutzt. Aber das sind alles Dinge, die von der Leistungsnutzung weniger als 1% ausmachen.

Auf der anderen Seite haben aber beispielsweise Nutzer von ATI-Grafikkarten je nach Einstellung einen Prozess mit drin, der einen Teil der Grafikfunktionen verwaltet. Dieser läßt sich tatschlich teilparallel ausführen. So kann man beobachten, daß Ryzom auf einem Vierkerner z.B. statt 25% (=1 Kern voll) Auslastung etwa 32% zeigt. Das aber in meinem Fall nur in der Charauswahl. Danach sind es etwa 27%. Solange ich den Rechner also nicht ernsthaft zur Arbeit einsetze, lasse ich lieber die anderen drei Kerne deaktiviert und spare was Strom.
(Wer diese Werte vergleichen will: obiges gilt für einen AMD x4, 4x3,7GHz / Ati Radeon 3870 / Win 7u x64)
(Wer bei sich selbst detaillierter messen möchte, dem lege ich Procexp bzw. Procexp64 von Sysinternals ans Herz. Ryzom darin doppelklicken. Die aktuelle Version zeigt auch die Grafikauslastung detailliert an)
Um das aber richtig darzustellen: Dieser "Gewinn" ist kein Verdienst von Ryzom, sondern der Prozess gehört zum Grafiktreiber. Ryzom muß zwangsläufig etliche Systemaufrufe an den Treiber machen, und dieser Prozess enthält großteils Funktionen, die die Grafik(-leistung) nebenbei optimieren soll. Von der Last dieser Zusätze befreit man das Spiel teilweise, indem man ihm die Nutzung mehrerer Kerne erlaubt und damit verhindert, daß Ryzom sich einen Kern mit diesen Zusätzen teilen muß.

Von obigem mal abgesehn:
Ob Ryzom nun einen Kern voll auslastet, oder mehrere Kerne zu gleichen Bruchteilen, die in der Summe wieder auf einen Kern hinauslaufen - die Performance ist sehr ähnlich.
Natürlich kann es bei bestimmten Systemen trotzdem sowohl was besser, als auch schlechter laufen.
Zu einem gewissen Grad bleibt IT eben Voodoo. Und so manches ist auch schonmal ein Placeboeffekt.

---

[ˈtʌʎˌjaː ˈʃʌtˑənˌtans] - The wog with the whip! Always takin' care for purposive Ryzom development and conductive community behavior via appropriate amounts of well-placed criticism.
Botherin' homins since Aug '06 - Nuttin' ta lose, but a bad rep.
DE, EN, C++, ASM, MHD, ahd, nl (Ik werk eraan als een ploegpaard), it, lat

#9 Report | Quote[de] 

Für Spiele ist es oft problematisch mehrere Kerne zu nutzen, unter anderem da man auf hochauflösende Zeitmessung angewiesen ist. Leider basieren diese hochauflösenden Zeitmesser auf der CPU und da stößt man bei Mehrkernprozessoren auf Probleme. Da jeder Kern unabhängig vom anderen arbeitet, liefern diese auch unterschiedliche Werte zurück. Um eine stets positive Differenz zu erhalten, muss man immer den selben Kern abfragen. Das erreicht man in Ryzom indem man den Prozess explizit auf einen Kern beschränkt und die automatische Lastverteilung umgeht.

Ich kann jedoch keinerlei Fehler oder gar Abstürtze feststellen wenn man manuell auf mehrere Kerne umstellt, was mich sehr verwundert. Bei eigenen Projekten bin ich schon oft auf dieses Problem gestoßen und die negative oder gar Nullmessung der Zeitdifferenz führte dann auch schnell zu "unerwarteten" Ergebnissen.

Es könnte sich lohnen dies weiter zu analysieren und ggf. die Beschränkung im Quellcode auf nur einen Kern aufzuheben. Zumindest Twinkliebhaber würden es einem danken, denn zweimal Ryzom auf einem Kern ist selbst für den modernsten Rechenknecht nicht so einfach.

---

#10 Report | Quote[de] 

Placeboeffekt oder Ryzom SingleCore App hin und her. Es gibt so einige Orte, da ruckelt es ungemein. Z. B. in der Nähe des Unglückstunnel in Matis. Selbst mit meinem I7, 6 GB Speicher, Platten im R0 und einer Nvidia 570 GTX könnte man glauben, der Debugmode wäre aktiv. Kaum schalte ich alle Kerne hinzu läufts wesentlich flüssiger.
uiWebPrevious1uiWebNext
 
Last visit Sat May 30 18:02:05 2020 UTC
P_:

powered by ryzom-api