Softwarerenderer in Java oder C++?
-
Hallo,
ich habe vor einen Softwarerenderer zu schreiben und stehe vor der Wahl Java oder C++. Was denkt ihr würde der Faktor sein der C++ schneller wäre? Wenn er nicht all zu groß ist würde ich mit Java anfangen da das Entwickeln doch etwas einfacher ist. Ich habe die Frage schon in einem Javaforum gestellt und dort wurde mir gesagt das es von der Geschwindigkeit keinen großen Unterschied gibt, wie seht ihr das?
Grüße
Hollibon
-
Postest du eigentlich alle deutschen Programmierforen mit deinen Troll Versuchen zu?
-
Kommt drauf an
Wenn du sehr viel Zeit in Speichermanagment + Assembler steckst, dann wird C++ wohl etwas die Nase vorne haben.
Aber du kannst z.B. dein Java-Programm im späterem Verlauf mit OpenCL beschleunigen. Ich persönlich schreibe gerade an einem eigenen RayTracing-Programm und habe das Grundgerüst in Java und C++ umgesetzt. Alleine schon aus interesse und um zu sehen, ob es wirklich was ausmacht. Damals war der Unterschied zwischem dem Intel-Compiler, GCC und Sun-JDK nicht all zu groß. Der GCC und Intel-Compiler unterscheiden sich kaum, sofern man keine Intel spez. Bibliotheken verwendet. SSE hatte ich damals nicht eingesetzt. Java war je nach Codeabschnitt/Renderingphase 5% schneller oder 30% langsamer.Am Ende habe ich mich für Scala entschieden. Alleine schon wegen der Verschmelzung von OOP und Fuktions-Orientierte-Programmierung.
Letztendlich liegt es wohl an der Person hinter dem Bildschirm, wie effizient das "Programm" arbeitet. Hier sehe ich das größte Optimierungspotenzial
Gruß,
Thomas
-
Dankeschön für die Infos. Ich hatte nicht vor gleich mit Assembler zu optimieren mich interessiert das Thema wirklich und das ist bei weiten kein Trollversuch um mal die Paranoia hier zu bremsen.
Wenn Java da annähernd gleich schnell ist dann nehme ich das, wenn C++ bei den selben Algos doppelt so schnell wäre dann würde ich doch C++ nehmen. Ich habe ja schon gehört das Java extrem zugelegt hat aber dachte nicht das es fast keinen Unterschied mehr gibt.
-
Es kommt immer darauf an, wie man programmiert. Java kann so schnell sein wie C++, aber in unerfahrenen Haenden muss es das nicht.
-
Macht wirklich keinen großen Unterschied. Zumal die meisten ja eh nur einen Softwarerenderer schreiben um Algos/Konzepte zu verstehen und nicht, weil sie sich zu Tode optimieren wollen. Da ist es dann ziemlich Wurst, ob der Renderer 5 oder 9 fps hat.
-
Rein von der technischen Seite her und wenn du in beiden Sprachen wirklich gut bist, wirst du mit C++ und entsprechenden Compilereinstellungen wohl schon mess- und sichtbar schneller sein, als mit Java. Das liegt einfach auch an der zugrunde liegenden Architektur. Mein C++ Raytracer, den ich manchmal auch als C++/CLI für .NET kompiliere, wird auch ein klein wenig langsamer; bei 2 Minuten Rechenzeit waren es vielleicht einige Sekunden.
Wenn man C++ auf die Java VM kompilieren könnte, denke ich, es würden wohl nochmals einige Sekunden dazu kommen, weil einige Konstrukte von C++ in Java nicht optimal umgesetzt werden können.
Du musst dich fragen, was du mit dem Renderer tun willst. Möchtest du damit wirklich rendern, oder möchtest du die Konzepte verstehen lernen? Wenn das Rendering in Echtzeit geschehen soll und als Basis für eine Demo oder ähnliches dient, dann solltest du mit C++ arbeiten. Der Compiler übernimmt für dich dann SSE etc. Ansonsten nimmst du ruhig Java.
MfG
-
Ich möchte keinen Superrenderer schreiben das kann ich auch gar nicht. Wie ihr schon richtig vermutet habt will ich die Konzepte dahinter mal selbst verstanden und implementiert haben und habe mir dafür ca 1 Jahr Zeit gegeben. Ich möchte sowohl Echtzeit Rendering mit den üblichen Schattierungsalgos realisieren als auch einen kleinen Raytracer schreiben.
Am liebsten würde ich das mal in beiden Sprachen machen um auch mal zu sehen was es für mich in der Praxis wirklich ausmacht. Meist wird ja zu dem Thema nur rumgetrollt. Ich will mir halt eine Pipeline konstruieren und wenn es geht in beiden Sprachen umsetzten.
Zu beginn wollte ich aber noch mal die Einschätzungen aus einen Java-Forum und auch einem C++-Forum aufzeigen lassen. Ich habe nicht viel in Java bis jetzt gemacht aber wenn es tatsächlich nur einen kleinen Teil langsamer ist wäre ich echt begeistert. Ich dachte immer der Faktor liegt so bei 2-10fach langsamer als C++.
-
Hollibon schrieb:
Ich möchte keinen Superrenderer schreiben das kann ich auch gar nicht. Wie ihr schon richtig vermutet habt will ich die Konzepte dahinter mal selbst verstanden und implementiert haben und habe mir dafür ca 1 Jahr Zeit gegeben. Ich möchte sowohl Echtzeit Rendering mit den üblichen Schattierungsalgos realisieren als auch einen kleinen Raytracer schreiben.
Am liebsten würde ich das mal in beiden Sprachen machen um auch mal zu sehen was es für mich in der Praxis wirklich ausmacht. Meist wird ja zu dem Thema nur rumgetrollt. Ich will mir halt eine Pipeline konstruieren und wenn es geht in beiden Sprachen umsetzten.
Zu beginn wollte ich aber noch mal die Einschätzungen aus einen Java-Forum und auch einem C++-Forum aufzeigen lassen. Ich habe nicht viel in Java bis jetzt gemacht aber wenn es tatsächlich nur einen kleinen Teil langsamer ist wäre ich echt begeistert. Ich dachte immer der Faktor liegt so bei 2-10fach langsamer als C++.
2-10fach??
Hast du mal nachgedacht, was diese Aussage bedeutet?
Zerbrich dir nicht den Kopf über die Sprache, das ist total nebensächlich. Konzentrier dich lieber auf die Algorithmen, die Mathematik etc. und nimm die Sprache, die du am besten kannst bzw. dir am meisten liegt.Nebenbei: Dürfen Unregistrierter jetzt wieder Freds in diesem Subforum eröffnen?
-
Java ist nicht großartig langsamer als C++. FFT in Java ist sogar schneller als es in reinem C möglich ist. Die neue Hotspot Technologie ist extrem effektiv geworden und nutzt immer den aktuell schnellsten Befehlssatz der CPU sowie Mehrkern und mit jedem Durchlauf einer Loop wird der Code meist noch besser optimiert, das bekommt kein C-Coder so schnell hin.
-
Break, jetzt geht es loss ...
-
Hollibon schrieb:
ich habe vor einen Softwarerenderer zu schreiben und stehe vor der Wahl Java oder C++.
normalerweise hat man eine problemstellung und waehlt anhand dessen das werkzeug und steht nicht vor zwei werkzeugen und hat einfach ne wahl.
Was denkt ihr würde der Faktor sein der C++ schneller wäre?
bei meinem test ca 10x, 50fps vs 500fps, wobei ich beides nicht ganz bis zum ende ausgereizt habe, hab eher nur simplen rasterizer code portiert weil ich wissen wollte, ob man damit ein webgame ala quake3a machen kann (ohne hardware beschleuniger auf atom-cpus).
Wenn er nicht all zu groß ist würde ich mit Java anfangen da das Entwickeln doch etwas einfacher ist. Ich habe die Frage schon in einem Javaforum gestellt und dort wurde mir gesagt das es von der Geschwindigkeit keinen großen Unterschied gibt, wie seht ihr das?
wenn du Java bevorzugst, dann nimm java. wenn du c++ nicht wirklich gut kannst, werden die antworten aus dem java forum mehr als zutreffen und dein c++ programm wird eher noch langsammer sein als assembler/c/c++...
das siehst du auch in den ganzen vergleichen von den sprachen, die resultate spiegeln eher die faehigkeiten der programmierer wieder als die der sprache.
drum, ran an die arbeit. und poste ruhig screenshots
-
Hey super endlich mal einer der das ausprobiert hat. Woran liegt der heftige Unterschied, vielleicht daran dass in Java jeder Index auf ein Array auf Gültigkeit geprüft wird?
-
wie weit bist du denn bisher?
-
Hiho,
versteht mich nicht falsch, ich bin kein d/c++ - Fanatiker, tatsächlich benutze ich am liebsten c#, recht einfach und angemessen schnell.Ich weiß jetzt nicht in wie weit man jetzt c# mit Java vergleichen kann, doch sind das ja beide Sprachen gemanaged. Doch kam es durchaus schon vor, dass Sachen die bei c# 17-25 Sekunden gedauert hatten (mehrere Versuche), mit C++ selten die 4 Sekunden erreicht habe, durchschnittlich 3 Sekunden.
Ist jetzt schon wirklich eine ganze Weile her, weiß nicht mal mehr genau was ich da gemacht habe, wenn ich mich nicht täusche Strukutren füllen und sortieren aber ka.
Also ich bin C# fan, ist für die meisten Sachen auch mehr als schnell genug, doch das der Unterschied zwischen verwaltetem Kram und unverwaltetn kaum spürbar ist habe ich zu mindest noch nicht erlebt, auch wenn es so sein sollte (mache das aber auch nur Hobbymäßig)
-
Hier mal ein schönes Beispiel für einen Raytracer der nur 20% langsamer ist als eine C++ Version aber mit den vielen Vorteilen von Java daherkommt.
http://strattonbrazil.blogspot.com/2008/11/sunflow-java-ray-tracer.html
-
Ich habe mich jetzt für Java entschieden da nicht jedes Frame für mich wichtig ist und Java nun einmal um einiges angenehmer zu programmieren ist.
rapso: mehr als ein paar Privmitiven in einen Framebuffer zeichnen und den anzeigen habe ich in C++ noch nicht gemacht. Ich werde jetzt erst einmal etwas Java auffrischen und dann meine Klassen portieren. Ich bin sehr gespannt auf die JIT-Welt und kann dann hinterher wenigstens in beiden Welten mal etwas mitreden.