2016-10-10 10 views
8

Z wielkim zainteresowaniem przeczytałem this LWN article. Streszczenie: GCC 6.x obsługuje coś, co nazywa się funkcją wielu wersji, która buduje wiele wersji tej samej funkcji, zoptymalizowanych pod kątem różnych zestawów instrukcji. Załóżmy, że masz maszynę z obsługą AVX2 i jedną bez. Możliwe jest uruchomienie tego samego binarnego na obu, z funkcją foo() istniejącą w dwóch wersjach, z których jedna wykorzystuje instrukcje AVX2. Funkcja z instrukcjami AVX2 jest jednak wywoływana tylko wtedy, gdy CPU ją obsługuje.Czy clang oferuje coś podobnego do funkcji wielu wersji GCC 6.x (target_clones)?

Moje pytanie brzmi: czy clang obsługuje coś podobnego? Nie wydaje się najbardziej zaawansowaną funkcją na świecie.

+1

Powinno być coś, zauważyłem w wywołaniach profilera Xcode Instruments, takich jak _platform_memmove $ VARIANT $ Haswell, które wskazują, że powinna istnieć opcja. Dokumentacja jest jednak całkowicie cicha; target_clones nie działa, a także nie działają osobne funkcje oznaczone różnymi atrybutami target –

Odpowiedz

0

One said, że są one opracowywane około trzy lata temu. Ale najwyraźniej wciąż jest w fazie rozwoju. Nigdy o tym nie wspominali (o ile mi wiadomo), a dokumentacja nie mówi nic na ten temat.

Możesz to zrobić przy pomocy ręcznego wysiłku, używając razem atrybutów ifunc i target.

Powiązane problemy