Delphi-PRAXiS
Seite 3 von 4     123 4   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi vs Visual C++ (https://www.delphipraxis.net/190996-delphi-vs-visual-c.html)

Rollo62 28. Nov 2016 15:58

AW: Delphi vs Visual C++
 
Wie sieht eigentlich Bcc vs Vc aus ?

Dalai 28. Nov 2016 16:08

AW: Delphi vs Visual C++
 
Zitat:

Zitat von BigAl (Beitrag 1354821)
Weiterhin kenne ich keine Grafikkarte, welche die gesamte Matrix aufnehmen könnte. Die besten Karten haben derzeit 4 GB.

Es gibt problemlos (mit dem nötigen Kleingeld) Karten mit bis zu 24 GB VRAM, nur mal eine Beispielliste mit Karten ab 8GB.

Grüße
Dalai

jfheins 28. Nov 2016 21:45

AW: Delphi vs Visual C++
 
Wenn du so ein Standard-Problem wie einen Gauss effizient rechnen möchstest, lohnt sich vielleicht auch ein Blick auf die Intel® Math Kernel Library kurz MKL.
Damit solltest du auf halbwegs aktuellen Intel-CPUs sehr gute Rechenzeiten erreichen. Wie ich Intel einschätze, werden AMD-CPUs von den Optimierungen nicht profitieren.

Ist deine Matrix eigentlich dicht besetzt?

Eventuell könntest du auch über algebraische Mutigrid-Verfahren nachdenken. Diese erstellen quasi eine kleinere Version deiner Matrix, lösen diese, und können mit dieser Näherungslösung die große Matrix schneller lösen.

Namenloser 28. Nov 2016 21:59

AW: Delphi vs Visual C++
 
Eine ziemlich coole Sache in C/C++ ist übrigens auch OpenMP. Noch nie war Parallelisierung so einfach.

BigAl 29. Nov 2016 08:20

AW: Delphi vs Visual C++
 
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

Assarbad 29. Nov 2016 09:44

AW: Delphi vs Visual C++
 
Zitat:

Zitat von BigAl (Beitrag 1354871)
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.)

Zitat:

Zitat von BigAl (Beitrag 1354871)
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.

BigAl 29. Nov 2016 10:28

AW: Delphi vs Visual C++
 
Zitat:

Zitat von Assarbad (Beitrag 1354881)
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

BigAl 29. Nov 2016 10:33

AW: Delphi vs Visual C++
 
Zitat:

Zitat von Assarbad (Beitrag 1354881)
Zitat:

Zitat von BigAl (Beitrag 1354871)
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

Der schöne Günther 29. Nov 2016 11:09

AW: Delphi vs Visual C++
 
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..."

BUG 29. Nov 2016 19:48

AW: Delphi vs Visual C++
 
Zitat:

Zitat von BigAl (Beitrag 1354889)
Das Betriebssystem schleift sich ja (denke ich mir mal) selbst nochmal in jeden direkten Speicherzugriff ein.

Die Übersetzung von logischer zu physischer Adresse macht die MMU in Hardware. Nicht präsente Einträge in den Übersetzungstabellen führen zu Zugriffsfehlern, die das Betriebssystem dann behandeln kann. Also keine zusätzlichen Kosten für erfolgreiche Zugriffe.

Für numerische Anwendungen wäre es nicht so ungewöhnlich, dass der gesamte genutzte Speicher auch wirklich im physischem Speicher liegt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr.
Seite 3 von 4     123 4   

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