Istnieje kilka opcji do uzyskania wyrównanego bloku pamięci, ale są one bardzo podobne, a problem zazwyczaj sprowadza się do standardu języka i platform, na które kierujesz reklamy.Dlaczego warto używać _mm_malloc? (w przeciwieństwie do _aligned_malloc, alligned_alloc lub posix_memalign)
C11
void * aligned_alloc (size_t alignment, size_t size)
POSIX
int posix_memalign (void **memptr, size_t alignment, size_t size)
Okna
void * _aligned_malloc(size_t size, size_t alignment);
I oczywiście zawsze jest też opcja, aby wyrównać ręcznie.
Firma Intel oferuje inną opcję.
Intel
void* _mm_malloc (int size, int align)
void _mm_free (void *p)
oparciu o kod źródłowy wydany przez firmę Intel, to wydaje się być metoda rozdzielania wyrównany pamięć ich inżynierowie wolą, ale nie mogę znaleźć żadnej dokumentacji porównując ją z innymi metodami. Najbliższe, które znalazłem, po prostu potwierdza, że istnieją inne dostosowane procedury alokacji pamięci.
dynamiczne przydzielanie kawałek wyrównany pamięci, stosowanie posix_memalign , który jest podtrzymywany przez GCC oraz Intel kompilatora. Korzyścią z używania go jest to, że nie trzeba zmieniać interfejsu API do usuwania pamięci. Możesz użyć free() jak zawsze. Ale zwróć uwagę na profil parametrów :
int posix_memalign (void ** memptr, size_t align, size_t size);
Kompilator Intel dostarcza również inny zestaw funkcji API alokacji pamięci. Programiści C/C++ mogą używać _mm_malloc i _mm_free do przydzielania i dowolnych bloków pamięci. Na przykład następująca instrukcja żąda 64-bajtowego wyrównanego bloku pamięci dla 8 elementów zmiennoprzecinkowych .
farray = (float *) __ mm_malloc (8 * sizeof (float), 64);
Pamięć przydzielona za pomocą _mm_malloc musi zostać zwolniona przy użyciu _mm_free. Wywoływanie wolnej pamięci przydzielonej za pomocą _mm_malloc lub wywoływanie _mm_free w pamięci przydzielonej za pomocą malloc spowoduje nieprzewidywalne zachowanie.
Wyraźne różnice z punktu widzenia użytkownika jest to, że wymaga bezpośredniego _mm_malloc
procesora i wsparcie kompilator i pamięć przydzielona z _mm_malloc
musi zostać uwolniony z _mm_free
. Biorąc pod uwagę te wady, jaki jest powód, dla którego kiedykolwiek korzystam? _mm_malloc?
Czy może mieć niewielką przewagę wydajności? Historyczny wypadek?
Czy przeczytałeś cały dokument, który łączysz? Nie spodziewasz się, że to podsumujemy, prawda? – alk
@alk Nie ma powodu, aby być niegrzecznym. Jeśli odpowiedź jest dla ciebie oczywista, wyjaśnij to. – Praxeolitic
Może to zabrzmieć nieuprzejmie, nie jest to tak rozumiane. To pytanie, prawdopodobnie nieco sarkastyczne. – alk