인텔 소프트웨어 개발자 설명서 볼륨 1, 섹션 7.3.1.2에서는 BSWAP 명령이 "10 진수 연산 실행 속도를 높입니다"라고 설명합니다. 이것이 그 방법을 설명하지 못하고 있으며, 구글도 도움이되지 않습니다.BSWAP 명령은 "소수 실행의 속도를 높입니다"는 방법은 무엇입니까?
누군가 내게 이것을 밝힐 수 있습니까?
인텔 소프트웨어 개발자 설명서 볼륨 1, 섹션 7.3.1.2에서는 BSWAP 명령이 "10 진수 연산 실행 속도를 높입니다"라고 설명합니다. 이것이 그 방법을 설명하지 못하고 있으며, 구글도 도움이되지 않습니다.BSWAP 명령은 "소수 실행의 속도를 높입니다"는 방법은 무엇입니까?
누군가 내게 이것을 밝힐 수 있습니까?
은입니다.
BSWAP (바이트 스왑) 명령어는 32 비트 레지스터 피연산자에서 바이트 순서를 뒤집습니다. 비트 위치 0에서 7은 24에서 31로 바뀌고 비트 위치 8에서 15는 16에서 23으로 바뀝니다.이 명령을 두 번 연속 실행하면 이전과 동일한 값으로 레지스터가 종료됩니다. BSWAP 명령어는 "빅 엔디 언"및 "리틀 엔디 언"데이터 형식간에 변환하는 데 유용합니다. 이 명령어는 또한 십진법 연산의 실행을 가속화합니다. 그 꼭대기에, 괄호로 마지막 문장은에 적용 할 것으로 보인다 성명과 아무 상관이,합니다 (XCHG 명령은. 한마디 바이트를 교환 할 수 있습니다)
합니다. 그리고, 그렇지 않다면 은을 의미하므로 왜 괄호를 사용합니까?
내 결론은 DOCO가 여전히 오히려 같은 방법을에,
:-) 영어에 대한 그 고문 범죄를 잡은 그러나 것이다 기술 작가보다 인텔의 엔지니어에 의해 기록되고 있다는 점이다 10 진수 작업 속도를 높일 수있는 것은 오직 한 가지 가능성이 떠오른다는 것입니다 (솔직히 말해서 도약보다 더 힘들었습니다).
큰 숫자가 문자 당 하나씩, 메모리에 순차적으로 배치되어있는 경우 한 번에 4 자리 숫자를 처리 할 수있는 경우 성능이 향상 될 수 있습니다. 그러나 리틀 엔디안 시스템에서 메모리 (sequential-in-memory) 바이트 {0x01, 0x02, 0x03, 0x04}
을 32 비트 값 (dword)으로로드하면 0x04030201
이됩니다.
bswap
을 사용하면이를 다시 쓰기 전에 bswap
을하기 전에 dword로 조작하기가 더 쉬울 수 있습니다. 하지만 인텔은 우리가 훨씬 당신이 참조하는 문서에 갈 제공되지 않습니다 (내가 교육 추측 (A) 고려하고 싶습니다하지만) 부여
, 그건 추측입니다. bswap
의 모든 어커런스에 대해 볼륨 1, 2a, 2b, 2c, 3a, 3b 및 3c를 검색해도 볼륨이 명확하게 표시되지 않습니다.
(A) 인텔은 내가했다 기억할 수있는 최초의 어느 시대,이 같은 물건을 몇 가지 "몰래"지침이 있었다 사용 후 BCD 값 (바이트 당 2 개씩) 조정하는 daa/das
지침 바이트 기반 비 BCD 추가 그것은 철저한 검색을 수행하지는 않았지만 그들이 dwords 내의 숫자 문자에 대해 비슷한 것을 가질 수 있다고 생각하는 가능성의 영역을 넘어서는 것은 아닙니다.
첫 번째 단계에서는 IEEE754 표준의 십진수 측을 구현하는 라이브러리 인 Intel의 IDFPL을 살펴볼 수 있습니다. 그렇지 않은 경우 다른 고성능 십진 라이브러리에서 사용될 수 있습니다.
일반적으로 10 진수 연산은 가변 길이 정수 또는 압축 십진수의 고정 소수점 문자열에서 수행되며 이러한 문자열을 빅 엔디안 모드로 저장하는 것이 더 편리합니다. 데이터는 한 번에 4 바이트를 레지스터에로드 한 다음 BSWAP가 데이터를 교환하는 데 사용됩니다. 그러나 언급 한 바와 같이 십진수 조정 지침은 바이트 지향이므로 이러한 십진 조정 지침을 사용하면 레지스터를 한 번에 8 비트 씩 회전하여 바이트 지향 수학을 수행 할 수 있습니다. BSWAP는 첫 번째 회전 대신 사용할 수 있지만 여기서는 별다른 이점이 없습니다. 만약 32 비트 패킹 십진수를 구현하는 영리한 속임수가 있다면 나는 모른다. BSWAP가 도움이된다.
''dwords'에 대한 것과는 아무 것도 없습니다 (문서화되지 않은 지침이 아니라면 문서화되지 않은 지침이 아닌 한),'daa'-family (packed)와'aaa'-family (포장하지 않음) – harold