Warum verwenden Sie _mm_malloc? (im Gegensatz zu _aligned_malloc, alligned_alloc oder posix_memalign)

Gibt es ein paar Optionen für den Erwerb einer angepassten block von Speicher, aber Sie sind sehr ähnlich und das Problem meist darauf an, welche Sprache standard und Plattformen, die Sie sind targeting.

C11

void * aligned_alloc (size_t alignment, size_t size)

POSIX

int posix_memalign (void **memptr, size_t alignment, size_t size)

Windows

void * _aligned_malloc(size_t size, size_t alignment);

Und es ist natürlich auch immer eine option zum ausrichten von hand.

Intel bietet eine weitere option.

Intel

void* _mm_malloc (int size, int align)
void _mm_free (void *p)

Basierend auf der Quell-code veröffentlicht von Intel, scheint dies die Methode der Zuteilung ausgerichtet Gedächtnis Ihrer Ingenieure lieber, aber ich finde keine Dokumentation Vergleich zu anderen Methoden. Die nächsten fand ich einfach anerkennt, dass andere ausgerichtet memory allocation Routinen existieren.

https://software.intel.com/en-us/articles/memory-management-for-optimal-performance-on-intel-xeon-phi-coprocessor-alignment-and

Dynamisch reservieren ein Stück ausgerichtet Speicher posix_memalign,
das wird unterstützt durch GCC sowie dem Intel-Compiler. Nutzen
der Verwendung ist es, dass Sie nicht haben, ändern Sie die Speicher-Entsorgung-API.
Sie können Sie verwenden, free (), wie Sie es immer tun. Aber achten Sie auf die
parameter Profil:

int posix_memalign (void **memptr, size_t align, size_t size);

Den Intel-Compiler bietet auch einen anderen Satz von Speicher-Zuordnung
APIs. C/C++ - Programmierer verwenden können, _mm_malloc und _mm_free reservieren
und frei ausgerichtet Speicherblöcke. Zum Beispiel die folgenden
Anweisung fordert eine 64-byte-aligned memory-block für 8-floating-point
Elemente.

farray = (float *)__mm_malloc(8*sizeof(float), 64);

Speicher, der reserviert wird, mit _mm_malloc muss freigegeben werden, mit
_mm_free. Berufung auf freien Speicher mit _mm_malloc oder rufen _mm_free auf Speicher mit malloc wird zu unvorhersehbarem Verhalten führen.

Die deutlichen Unterschiede aus der Sicht der Nutzer ist, dass _mm_malloc erfordert direkte CPU und compiler-Unterstützung und der Speicher mit _mm_malloc muss freigegeben werden, mit _mm_free. Angesichts dieser Nachteile, was ist der Grund für immer mit _mm_malloc? Kann es einen leichten performance-Vorteil? Historischer Unfall?

InformationsquelleAutor der Frage Praxeolitic | 2015-09-16

Schreibe einen Kommentar