Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

16.10.2016, 15:41

Soweit ich weiß optimiert der Compiler trotzdem nach eigenen Ermessen? Hat jemand mal nachgeforscht, wie aggresiv der wirklich inlined? Wollte ich schon immer mal wissen.

Moderne C++ Compiler inlinen so aggressiv wie möglich und sinnvoll. Interessant zu erwähnen ist vielleicht, dass Inlining in einem modernen Compiler nichts mit dem Keyword inline zu tun hat (dessen wirklicher Zweck liegt heutzutage eigentlich nur noch darin, die Definition eines Dings in mehreren Übersetzungseinheiten zu erlauben). Bin mir nicht sicher, was für eine Art Antwort du auf diese Frage konkret erwartest. Mich persönlich jedenfalls hat keiner der C++ Compiler, mit denen ich üblicherweise zu tun hab (MSVC, nvcc, clang, gcc), bisher je wirklich enttäuscht, wenn es um inlining ging...

12

16.10.2016, 16:49

Mich würde es tatsächlich wundern wenn inlining bei Java erst in der JVM passiert.
Na klar passiert das nur durch die JVM, anders geht es doch gar nicht. Der klassische Java-Compiler macht praktisch gar nichts, außer den Code in Bytecode umzuwandeln. Das ist dem dynamischen Linken geschuldet. Das ist doch das Tolle, sonst müsste man zur Compile-Zeit wissen welche Module man in welcher Version zur Laufzeit verwendet. Natürlich gibt's analog zur DLL-Hell dadurch möglicherweise eine JAR-Hell, aber nichts kommt ohne Preis. Man könnte eine Art inline-Funktion in den Java-Compiler einbauen, aber zur Optimierung macht der nichts automatisch. Insbesondere Inlining hat massive Auswirkungen darauf, wie man eine Klasse verwalten muss. Bei Inlining muss man die Klasse neu kompilieren, wenn man "fremde" inline Funktionen aktualisieren möchte. Lediglich innerhalb einer Klasse könnte man Inlining zur Compile-Zeit einsetzen ohne das dynamische Linken zu stören.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chromanoid« (16.10.2016, 16:55)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

13

16.10.2016, 17:09

Da hast du natürlich recht.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

14

16.10.2016, 17:20

BTW man kann zum Beispiel Soot benutzen, um Optimierungen wie Inlining in Java-Programmen schon vor der Laufzeit durchzuführen. Dabei verliert man natürlich ggf. Möglichkeiten nach dem Deployment Patches dynamisch reinzulinken (nicht schön aber manchmal eine pragmatische Lösung).

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

15

18.10.2016, 09:14

Moderne C++ Compiler inlinen so aggressiv wie möglich und sinnvoll.


Das ist mir ehrlich gesagt zu ungenau, ist nirgends spezifiziert, was "sinnvoll" ist? Das ist doch das spannende.

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

16

18.10.2016, 09:38

Moderne C++ Compiler inlinen so aggressiv wie möglich und sinnvoll.


Das ist mir ehrlich gesagt zu ungenau, ist nirgends spezifiziert, was "sinnvoll" ist? Das ist doch das spannende.

Im Sourcecode des Compilers.

Interessant sind evtl noch: CppCon 2016: Jason Turner “Practical Performance Practices" und als Antwort dazu C++ and code inlining
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

17

18.10.2016, 09:47

Moderne C++ Compiler inlinen so aggressiv wie möglich und sinnvoll.


Das ist mir ehrlich gesagt zu ungenau, ist nirgends spezifiziert, was "sinnvoll" ist? Das ist doch das spannende.

Genauer spezifizieren kann man's halt im Allgemeinen leider nicht. Weiterer, guter Talk zum Thema: https://www.youtube.com/watch?v=FnGCDLhaxKU&t=25m50s

Edit: Der hier war auch gut: https://www.youtube.com/watch?v=g7entxbQOCc

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (18.10.2016, 09:55)


TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

18

18.10.2016, 09:55

Interessanter ist doch, das fuer 80% der Leser hier es nie einen Unterschied machen wird, ob nun eine Funktion mehr oder weniger geinlined wird. Und beim Rest beschaeftigen sich wieder 80% hoechsten 2-3 Tage im Jahr mit so einem Problem.

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

19

18.10.2016, 09:56

Anders gesagt: Erstmal programmieren. Dabei möglichst Best Practices beachten (Siehe der Talk von Jason Turner in meinem letzten Post).

Wenn man dann Probleme feststellt: Profilen, nachjustieren.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

20

18.10.2016, 10:00

Und wenn man sich wirklich Sorgen über Inlining macht, muss man eben die vom Compiler produzierte Assembly checken...

Werbeanzeige