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
C-/C++-Quelltext |
|
1 2 3 4 5 |
void my_memset(uint* dest, uint value, uint size) { for(uint i = 0; i != size; i++) *dest++ = value; } |
Administrator
Administrator
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
image_size num_rectangles OK? Zeit (ms) Referenzzeit (ms) Speed-up ----------------------------------------------------------------------------- 128 1000 Ja 0.236463 0.422654 1.7874 128 10000 Ja 0.257632 2.62254 10.1794 128 100000 Ja 0.398327 25.075 62.9508 128 1000000 Ja 0.313725 199.455 635.761 256 1000 Ja 0.767165 4.10656 5.3529 256 10000 Ja 0.821018 24.1446 29.4081 256 100000 Ja 0.855066 274.875 321.466 256 1000000 Ja 0.79713 2402 3013.31 512 1000 Ja 4.03831 29.8382 7.3888 512 10000 Ja 3.96436 179.667 45.3205 512 100000 Ja 3.76648 1578 418.959 512 1000000 Ja 4.07332 29882 7336.03 1024 1000 Ja 17 775 45.5882 1024 10000 Ja 19.4854 3390 173.976 1024 100000 Ja 17.1624 42371 2468.83 1024 1000000 Ja 18.0901 727705 40226.7 |
Zitat von »"David Scherfgen"«
@Helmut:
memset ist normalerweise schon sehr gut optimiert. Auch wenn du da nur einen 8-Bit-Wert angibst, heißt das ja nicht, dass er intern nicht 32-Bit-Werte schreibt. Das tut er mit ziemlicher Sicherheit. Wahrscheinlich benutzt er auch SSE.
Ich habe übrigens versucht, mit SSE was zu machen, aber das war auch langsamer als memset. Also hier würde ich erstmal nicht versuchen zu optimieren.
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
image_size num_rectangles OK? Zeit (ms) Referenzzeit (ms) Speed-up ----------------------------------------------------------------------------- 128 1000 Ja 0.211477 0.731529 3.45913 128 10000 Ja 1.44863 4.62356 3.19169 128 100000 Ja 14.4604 40.86 2.82564 128 1000000 Ja 17.4 325.571 18.711 256 1000 Ja 0.491525 2.45521 4.99509 256 10000 Ja 3.20833 16.048 5.00197 256 100000 Ja 36.7091 185.545 5.05448 256 1000000 Ja 19.9604 1604 80.3591 512 1000 Ja 1.25455 7.56604 6.0309 512 10000 Ja 10.738 63.4375 5.90778 512 100000 Ja 93 522.25 5.61559 512 1000000 Ja 125.313 8267 65.9711 1024 1000 Ja 17.6228 260 14.7536 1024 10000 Ja 64.1875 781.333 12.1727 1024 100000 Ja 789.333 7960 10.0845 1024 1000000 Ja 1497 151860 101.443 |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
image_size num_rectangles OK? Zeit (ms) Referenzzeit (ms) Speed-up 128 1000 Ja 0.0683761 0.577534 8.44643 128 10000 Ja 0.0921871 3.39559 36.8336 128 100000 Ja 0.122888 30.5606 248.687 128 1000000 Ja 0.106781 249.222 2333.97 256 1000 Ja 0.305857 1.99501 6.5227 256 10000 Ja 0.172846 13.039 75.4369 256 100000 Ja 0.280466 137.067 488.711 256 1000000 Ja 0.374042 1235.5 3303.11 512 1000 Ja 0.838926 5.6338 6.71549 512 10000 Ja 2.67156 44.3696 16.6081 512 100000 Ja 1.17716 364.333 309.501 512 1000000 Ja 1.49254 6296 4218.32 1024 1000 Ja 4.01807 47.3256 11.7782 1024 10000 Ja 37.1296 198.182 5.33757 1024 100000 Ja 5.52762 2441 441.6 1024 1000000 Ja 3.56684 40779 11432.8 |
Administrator
Zitat
Was mich wundert ist, dass sich die Zeiten der Referenz so stark unterscheiden. Du hast doch die unveränderte Referenzimplementierung mit gcc im Releasemodus kompiliert?
Werbeanzeige