Compiler Intrinsics

Uwaga! Informacje na tej stronie mają ponad 6 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

Thu
27
Nov 2008

Pod hasłem Compiler Intrinsics kryje się w MSDN Library bardzo ciekawy rozdział. Opisuje niskopoziomowe funkcje, których dostarcza sam kompilator i które pozwalają wykorzystywać różne instrukcje asemblera bez sięgania po wstawki w tym trudnym języku, zwyczajnie jako funkcje C++. Pośród tych funkcji są np. wspomagające programowanie równoległe (jak _ReadWriteBarrier, _InterlockedCompareExchange), __emul mnożąca liczby 32-bitowe do liczby 64-bitowej, _rotl przesuwająca bity z zawinięciem czy __cpuid zwracająca informacje o możliwościach procesora.

Także wiele funkcji biblioteki standardowej C posiada swoje implementaje jako intrinsics, które powinny zamieniać się na instrukcje asemblera zamiast wywołań. Należą do nich np. abs, sin, pow, strlen, strcpy. Trzeba tylko je włączyć za pomocą #pragma intrinsic lub /Oi (Generate Intrinsic Functions).

W praktyce to nie jest takie proste. Zadeklarowanie strcpy jako intrinsic przyspieszyło wprawdzie mój test z 2.5439 do 2.4976 sekundy, ale ta funkcja kompiluje się do asemblerowego rep movs w konfiguracji Release niezależnie od jej zadeklarowania jako intrinsic. Z kolei cosf tak czy siak zamienia się na wywołanie call.

Comments | #c++ #visual studio Share

Comments

[Download] [Dropbox] [pub] [Mirror] [Privacy policy]
Copyright © 2004-2024