AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi vs Visual C++

Ein Thema von BigAl · begonnen am 28. Nov 2016 · letzter Beitrag vom 1. Dez 2016
Antwort Antwort
Seite 1 von 2  1 2      
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#1

AW: Delphi vs Visual C++

  Alt 29. Nov 2016, 07:20
Hallo zusammen,

ist ja doch eine recht rege Diskussion geworden. Folgende Fragen / Kommentare bleiben allerdings doch:

1. Was soll Komprimierung bringen? Das ist doch noch einmal zusätzliche Rechenleistung die benötigt wird, oder?

2. Ja, meine Matrix ist dicht besetzt. 0-Felder gibt es praktisch keine.

3. Über Multigrid habe ich schon oft nachgedacht. Allerdings bräuchte ich da ein Beispiel um es zu verstehen.

4. Karten mit viel VRAM wären nur interessant wenn die nach oben offen / erweiterbar wären oder ich eine Möglichkeit hätte meine Matrizen in Schritten zu berechnen. Je nach Feinheit der Berechnungen kann die Größe auch noch ansteigen...

5. Richtig interessant finde ich AMP. Da muss ich mich mal intensiver mit beschäftigen.

Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#2

AW: Delphi vs Visual C++

  Alt 29. Nov 2016, 08:44
1. Was soll Komprimierung bringen? Das ist doch noch einmal zusätzliche Rechenleistung die benötigt wird, oder?
Lies dir bitte nochmal meinen Vorschlag durch.

Wenn du eine Zahl als String und Dezimalzahl darstellst, ist die üblicherweise auch länger als der gleiche Wert als Hexadezimalzahl (ohne spezielle Formatierung) dargestellt. Das ist auch eine Form von Komprimierung.

Wenn du bspw. sechzehnbittige Dezimalzahlen hast und sollst bei Speichermangel herausfinden ob es Lücken in der Zahlenreihe gibt, kannst du wahlweise eine Liste mit 16-bittigen Einträgen bauen und diese durchsuchen (2 x 2^16 == 2 x 65536 == 131072 Bytes), oder du bastelst dir ein Bitfeld aus 65536 Bits (8192 Bytes) und setzt jedes Bit je nach Index (== Zahlwert) oder eben nicht. Und jetzt denken wir uns das mal mit 32-bittigen Werten und dann kommt es auch näher an die Größenordnung deines Problems.

Das ist auch eine Komprimierung ohne klassische Komprimierungsalgorithmen (Deflate, bzip2, LZMA, PPMd).

Aber selbst klassische Algorithmen können manchmal was bringen, bspw. beim Abspeichern auf der Platte und darauffolgendem Einlesen in den Arbeitsspeicher. Es ist nämlich manchmal deutlich flotter etwas im Speicher per Inflate (Brotli usw. kämen auch in Frage) zu dekomprimieren als die bereits dekomprimierte Menge Daten vom Festspeicher zu lesen. Kommt natürlich auf den Festspeicher an, bei einer SSD wären die Vorteile deutlich geringer als bei einer Festplatte. Aber das ist auch einer der wenigen Gründe warum EXE-Packer manchmal Sinn machen. Sie können tatsächlich das Laden eines großen Programms beschleunigen (auch wenn sie danach CoW verhindern und somit ab einer zweiten Instanz mehr Speicher verbrauchen).

Und es ist klar, daß solche Ansätze wie die oben genannten nur dann infrage kommen, wenn die Struktur deiner Daten das zuläßt. Aber du könntest ja mal ne Woche so tun als gäbe es noch keine Grafikkarten mit viel RAM und als hätte dein Rechner nicht soviel RAM und versuchen anhand dieser Einschränkungen nach Optimierungen zu suchen. Manchmal fällt es einem dann wie Schuppen von den Augen.

Das ist so ähnlich wie bei den Fragen in einschlägigen Foren und F&A-Seiten ala "Wie kann ich mit meinem Spannungsprüfer am besten diese Sechskantschraube mit Mutter in meine Wand bekommen?". Das eigentliche Ziel ("Bild an Wand befestigen") bleibt bei solchen Fragen ungenannt und der Fragesteller erwartet eine sinnvolle Antwort die seinen Vorgaben folgt.

Kurzum: schau über den Tellerrand.

(Es kann natürlich sein, daß es andere Sachzwänge gibt, die - ebenfalls ungenannt - bedingen, daß viele unserer Vorschläge unsinnig sind. Dann solltest du diese Sachzwänge erwähnen.)

5. Richtig interessant finde ich AMP. Da muss ich mich mal intensiver mit beschäftigen.
Wenn du nach wie vor mit Linux liebäugelst ist dies eine Einbahnstraße.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#3

AW: Delphi vs Visual C++

  Alt 29. Nov 2016, 09:28
Kurzum: schau über den Tellerrand.
Das man komprimieren kann ist schon klar. Aber:

1. Speichermangel habe ich nicht. Hauptspeicher lässt sich (nahezu) nach belieben kostengünstig hochrüsten.
2. Laden und Speichern der Daten ist recht flott (10 GB Matrix etwa 10 Sekunden)
3. Den Zugriff möchte ich so effizient wie möglich halten. Es wird eine Adresse berechnet. In Delphi z.B.:

Delphi-Quellcode:
function TMatrixMMF<T>.GetValue(Y, X: Cardinal): T;
type
  P = ^T;
begin
{$IFDEF CheckRange}
  if (X >= FCountX) or (Y >= FCountY) then
    raise EMatrix.CreateFmt('TMatrixMMF<%s>.GetValue(Y=%d, X=%d). Parameter out of Range', [GetTypeName, Y, X]);
{$ENDIF}
  Result := P(UInt64(FMMFPtr) + (Y * FCountX + X) * SizeOf(T))^;
end;
In C++ sieht das bei mir dann halt so aus (ohne generischen Type):

Code:
std::complex<double>& MatrixMV::get_Value(UINT32 Y, UINT32 X)
{
  return *(std::complex<double> *)((UINT64)m_pMapFile + (Y * m_SizeX + X) * sizeof(std::complex<double>));
}
Ich denke also alles Zusätzliche erhöht nur den Rechenaufwand. Obige Funktion ist nur ein Beispiel. Natürlich ist es effizienter im Programm direkt mit den Zielpointern zu arbeiten und nicht erst die Werte durch die Gegend zu kopieren...

Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
171 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Delphi vs Visual C++

  Alt 29. Nov 2016, 20:47
Zitat:
1. Speichermangel habe ich nicht. Hauptspeicher lässt sich (nahezu) nach belieben kostengünstig hochrüsten.
2. Laden und Speichern der Daten ist recht flott (10 GB Matrix etwa 10 Sekunden)
Wenn das deine "typischen" Größen sind (und die 10GB und mehr zum Ausschluss von CUDA geführt haben) könntest Du es auch mal mit Vector Pascal

(https://sourceforge.net/projects/vectorpascalcom/)

probieren. Das ist ein autoparalelisierender (SIMD,MIMD) Compiler mit einer Delphi sehr ähnlichen Sprache. Auch wenn es auf den ersten Blick so aussiehr als ob das Projekt nicht mehr gepflegt wird, das stimmt nicht, das letzte Update ist etwas älter als einen Monat. Als Ziel kommt auch CUDA in Frage, aber eben auch "normale" CPUS mit oder ohne MMX, SSE, AVX usw. Paralelisierung per Threads wird auch unterstützt und sogar der XEON Phi. Mit den richtigen Einstellungen landet das Compilat in einer DLL welche Du dann wieder in einer Hochsprache einbinden kannst.

Die Dokumentation ist von 2005 - natürlich werden auch moderne Zielprozessoren unterstützt nur ist das dort nicht entsprechend dokumentiert. Es gibt auch ein Buch dazu (https://www.amazon.de/Glasgow-Pascal...or-extensions/) - das ist aber nicht unbedingt up to date und die vorhandene Doku ist einigermaßen ausreichend und ähnlich aussagekräftig (http://www.dcs.gla.ac.uk/%7Ewpc/repo...dex/manual.pdf).

hth Ha-Jö
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi vs Visual C++

  Alt 29. Nov 2016, 09:33
5. Richtig interessant finde ich AMP. Da muss ich mich mal intensiver mit beschäftigen.
Wenn du nach wie vor mit Linux liebäugelst ist dies eine Einbahnstraße.
Ist schon klar, dass das dann unter Windows bleibt. Gefragt habe ich mich nur wie effizient Linux mit dem Speicher umgeht. Das Betriebssystem schleift sich ja (denke ich mir mal) selbst nochmal in jeden direkten Speicherzugriff ein. Wie sollte das sonst mit dem komprimierten Speicher, dem Swappen etc. funktionieren... Meine Abdresse kann ja letztendlich sonstwo landen...

Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Delphi vs Visual C++

  Alt 29. Nov 2016, 10:09
Ganz unabhängig vom Compiler und Speicher: Hast du nun einen Profiler überhaupt mal laufen lassen? Vielleicht bin ich einfach nur schlecht, aber mich überrascht oft genug "Ach DA geht die ganze Rechenzeit hin..."
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#7

AW: Delphi vs Visual C++

  Alt 30. Nov 2016, 08:24
Ganz unabhängig vom Compiler und Speicher: Hast du nun einen Profiler überhaupt mal laufen lassen? Vielleicht bin ich einfach nur schlecht, aber mich überrascht oft genug "Ach DA geht die ganze Rechenzeit hin..."
Den Profiler hatte ich unter Delphi anfangs mal laufen. Ist schon mehr als ein Jahr her. Hatte damals noch die Vollversion von AQTime zur Verfügung. Da ist mir allerdings mittlerweile die Lizenz abgelaufen. Die habe und werde ich nicht mehr erneuern, da das Teil zum einen recht instabil zum anderen auf Dauer zu teuer ist. Leider bieten auch die nur noch Subscriptions...

Ein Problem bei den Profilern ist auch, dass die beim Messen das Ergebnis teilweise stark verfälschen. Der alte Spruch "wer misst, misst mist" trifft auch da leider wieder zu. Interessant waren natürlich die CallCounter etc. Das kann man aber mit entsprechendem Code auch mal schnell nachbilden wenn man einfach mal wissen will welche Funktionen wie oft benötigt werden etc.. Ich habe mir dann die "Zeitfresser" mal auf Assemblerebene angesehen und bei kleineren Funktionen auch schon mal die benötigten Taktzyklen ermittelt etc.

Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#8

AW: Delphi vs Visual C++

  Alt 30. Nov 2016, 08:59
Das der C++ -Compiler besser optimierten Code liefert ist bekannt. Wenn das Programm dadurch aber erheblich schneller wird, könnte das aber an Fehlern bei der manuellen Optimierung liegen, die der Delphi-Compiler nicht erkennt.

Das wichtigste beim Parallelbetrieb mehrerer Prozessoren an einer Aufgabe ist, ein Speicherbereiche der gemeinsam von den Prozessoren gelesen wird, darf auf keinen Fall verändert werden. Ebenso darf ein Speicherbereich der von einem Prozessor verändert wird, nicht von anderen Prozessoren gelesen oder verändert werden.

Das größte Optimierungspotential ist aber fast nie beim Compiler zu suchen, sondern steckt in der Logik des Programms selbst.
Ohne Quelltext sind konkrete Vorschläge eher nicht möglich.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Delphi vs Visual C++

  Alt 30. Nov 2016, 09:06
[OT, aber mal zu AQTime]
Die Lizenz dürfte, so wie ich es kenne, nicht auslaufen, nur die Updateberechtigung.
AQTime Pro sollte man nicht in die Delphi-IDE einbinden sondern extern benutzen. Dann ist das ein hilfreiches und stabiles Tool.
[/OT]
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#10

AW: Delphi vs Visual C++

  Alt 1. Dez 2016, 00:00
Den Profiler hatte ich unter Delphi anfangs mal laufen. Ist schon mehr als ein Jahr her. Hatte damals noch die Vollversion von AQTime zur Verfügung. Da ist mir allerdings mittlerweile die Lizenz abgelaufen. Die habe und werde ich nicht mehr erneuern, da das Teil zum einen recht instabil zum anderen auf Dauer zu teuer ist. Leider bieten auch die nur noch Subscriptions...
Öhm nö: https://smartbear.com/product/aqtime-pro/pricing/

Ich hab mich soeben extra nochmal eingeloggt. Mein Abo lief im Oktober aus. Kann nach wie vor alles im Kundenbereich machen. Allein, es wird kein aktives Abo angezeigt.

Ein Problem bei den Profilern ist auch, dass die beim Messen das Ergebnis teilweise stark verfälschen.
Ist das ein Vorurteil oder eine eigene bereits bewiesene Beobachtung? Auf modernen CPUs kommen nämlich Zähler in der CPU direkt zum Einsatz. Und durch die Instrumentalisierung des Codes kann man ja schon sehr gut den Overhead von eigentlichen Meßdaten trennen. Es gibt natürlich durchaus einiges zu beachten. Aber dann sind die Ergebnisse zumindest bei mir bisher sowohl mit AQTime als auch mit gprof und oprof und CacheGrind scheinbar vertrauenswürdig gewesen (eine Behebung führte zu Performanceschüben).

Sowas wie CacheGrind ist bspw. auch kein Profiler im klassischen Sinn. Und manchmal lehrt einen der Aufrufzähler des klassischen Profilers wo sich Flaschenhälse verstecken das zeilenweise Profiling verfeinert den Blick auf die Problembereiche dann gehörig. Schleifen aufzudröseln bringt ja öfter auch was (siehe memmove/memcpy).

[OT, aber mal zu AQTime]
Die Lizenz dürfte, so wie ich es kenne, nicht auslaufen, nur die Updateberechtigung.
[/OT]
Korrekt. Habe meine auch auslaufen lassen, da die Aktualisierungen in homöopathischen Dosen kommen und in keinem vernünftigen Verhältnis zum Preis stehen. Da bekomme ich bei IDA mehr pro Euro
Auch haben die nach der Übernahme (AutomatedQA -> Smartbear) diese Softdongles (wieder mal SafeNet/Sentinel, zufällig jenes System welches ich 2002 auszutricksen mithalf) eingeführt, was mich unheimlich genervt hat. Zuvor hatte ich nämlich eine Lizenz die besagte, daß ich AQTime auf mehreren Rechnern, die ich allein nutze, installieren dürfe. Nach anfänglicher Beschwerde gab man mir dann eine Zweiplatzlizenz und die ging dann nach weiteren turnusmäßigen Aktualisierungen in eine Einzelplatzlizenz (node-locked) über.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz