memset은 최적화 플래그만 넣어주면 기본적으로 최대한 컴파일러가 잘 처리해줍니다.
괜히 안 건드는게 맞습니다.
(디스어셈블리 확인 후 최적화가 제대로 수행되지 않았을 시 직접 수정합니다)
(아키텍쳐에 따라 memset보다 memmove가 더 빠른 경우도 있습니다)
1.
int 단위로 memset을 작성하는 것도 좋은 방법이지만 컴파일러는 이를 넘어서 512bit씩 사용하는 SIMD(SSE, AVX512)를 사용해서 최적화 해줄 수 있습니다. 컴파일러가 SSE는 기본적으로 활성화 해주니 AVX나 AVX512 플래그를 넣어보세요.
2.
이래도 성능이 더 필요하다면 다음 방법을 사용할 수 있습니다.
예를 들어, memset을 int-long long 으로 작성하거나 simd 로 작성하게 되면,
메모리 정렬 검사, 크기가 내가 사용하는 단위의 배수에 맞는지
검사를 수행해야 합니다.
그렇다면 memset()을 호출할 때,
인자로 들어가는 배열의 memory alignment를 보장하고,
128bit 단위용, 256bit 단위용 등 특정 크기의 memset()으로 따로 작성하면 이러한 내부 분기를 줄일 수 있습니다.
예시1
memset_128()
memset_128_aligned()
memset_4096()
memset_4096_aligned()
C++
복사