프로젝트의 일환으로 큰 루프 (약 10^6에서 10^7 반복) 내에서 마스크 계산을 수행해야합니다. 나는 최소 수의 비트 (1-8) 또는 특정 위치 (7-0, 여기서 7은 가장 중요한 비트)의 비트를 유지해야한다. 주 코드에서 마스크를 계산하지 않기 위해 성능을 위해 다음과 같은 아이디어를 제안했습니다. 각 경우 매개 변수는 0에서 7까지의 부호없는 문자입니다.성능을 위해 마스크를 미리 계산하십시오.
1) 두 개의 전역 배열 헤더 파일 (bitops.h)에 정의되어 있습니다 :
char mask[8] = {1, 3, 7, 15, 31, 63, 127, 255};
char position[8] = {1, 2, 4, 8, 16, 32, 64, 128};
여기서 메모리 대기 시간 때문에 기다려야 할 수도 있습니다.
2)() 매크로 통해 간단한 연산을 이용하여 마스크를 계산한다
#define mask(x) ((1 << (x + 1)) - 1)
#define position(x) (1 << x)
우리가 3 클록 사이클 마스크 위치에만 1 필요한 곳.
무엇을 제안합니까? 두 번째 옵션이 실제로 더 빠릅니까? 또는 처음으로 갈 경우 사전에 프로세서가 상수를 캐시합니까?
시간 내 주셔서 감사합니다.
실제 성능에 문제가 있습니까? –
언제나 마스크를 레지스터에 넣고 초고속으로 사용할 수 있습니다. –
인덱스를 사용하여 마스크에 액세스해야하기 때문에 마스크를 레지스터에 넣을 수 없습니다. 인덱스는 매크로에서 x와 동일한 역할을합니다. – someone