c + + - SIMD/SSE kode krasjer på Windows 8 kører klart på Windows 7 og Linux

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har rapport om en ansøgning (makeahmap) nedbrud, mens jeg udfører SIMD-kode:


https://github.com/artyom-beilis/makeahmap/blob/master/sources/makeahmap.cpp#L947[2]


Jeg kan ikke reproducere problemet med præcis de samme indgange på min maskine:



  • Hverken Windows 7, jeg bruger min Windows-udvikling

  • Ikke på Linux - mere end det kører programmet fejlfrit med 0 fejl under valgrind.

  • Alle belastninger og butikker er ujusteret, og alle værdier har store margener for at indlæse og gemme 16 byte ualignerede data.

  • Programmet er 32bit og bygget ved hjælp af mingw-g ++



Spørgsmål:



  1. Hvilken slags værktøjer kan hjælpe mig med at finde årsagen til sammenbruddet på brugerens pc?

  2. Hvilke ting mangler det?


Bedste reference


Problemet var:



  1. Windows bruger justering af 4 byte stack

  2. Standard stakjustering GCC bruger i 16 byte. Det løser justeringen i main/winmain, men det virker ikke for funktioner, der kaldes fra eksterne tråde, idet 16 bytejustering ikke garanteres.



Opløsning:


Tilføj \_\_attribute\_\_((force\_align\_arg\_pointer)) attributten til den funktion, der hedder fra tråden.