Kürzlich bin ich auf eine sehr große Leistungsverbesserung gestoßen - ich spreche von einer 4x-Verbesserung - mit einer Codeänderung von nur einer Zeile. Ich habe gerade einen std :: sort Aufruf concurrency_parallel ArtConcurrency :: parallel_sort Overhead und Performance-Hit (Faustregel)?
// Get a contiguous vector copy of the pixels from the image.
std::vector<float> vals = image.copyPixels();
// New, fast way. Takes 7 seconds on a test image.
concurrency::parallel_buffered_sort(vals.begin(), vals.end());
// Old, slow way -- takes 30 seconds on a test image
// std::sort(vals.begin(), vals.end());
Diese für ein großes Bild war und ließ meine Verarbeitungszeit 30 Sekunden bis 7 Sekunden. In einigen Fällen sind jedoch kleine Bilder erforderlich. Ich weiß nicht, ob ich das blind tun kann oder sollte.
Ich möchte paralell_sort, parallel_for und ähnliches vernünftigerweise verwenden, aber ich frage mich, welcher Schwellenwert überschritten werden muss (in Bezug auf die Anzahl der zu sortierenden Elemente), bevor es zu einer Hilfe wird und kein Hindernis.
Ich werde irgendwann einige langwierige Leistungstests durchlaufen, aber im Moment habe ich nicht viel Zeit dafür. Ich würde mir wünschen, dass dies "die meiste Zeit" besser funktioniert und die Performance nicht immer (oder zumindest nur selten) beeinträchtigt.
Kann jemand mit etwas Erfahrung in diesem Bereich mir eine vernünftige Faustregel geben, die mir in "den meisten Fällen" hilft? Gibt es einen?
Nebenbei bemerkt, dies wird Speicher zu verletzen. –
Kein Problem in diesem speziellen Fall, aber danke – Joe