Visual Studio에서 masm 인라인 어셈블러로 변환 된 512 비트 (큰 int)를 추가하는 C++ 코드를 만들려고합니다. 캐리는 아래 링크에 표시된 C++와 같이 매우 중요합니다. Visual Studio의 마스크 인라인 어셈블러에 C++을 표현해야합니다.이 렌즈를 단순화하여 더 빨리 만들 수 있습니까?
나는 masm에서이 작업을 시도했으나 느린 속도였습니다. 악성 코드 코드
. C++ 그것은
mov eax, [edx + 4]
adc eax, [ebx + 4]
mov [ebx + 4], eax
대신
mov ecx, 4
mov eax, [edx + ecx]
adc eax, [ebx + ecx]
mov [ebx + ecx], eax
의
8에 같은과 (12)를 사용하는 것이 아마 더 빠릅니다하지만 것 또한
MASM 코드
_asm {
mov edx, summand
mov eax, [edx]
mov ebx, this
add eax, [ebx]
mov [ebx], eax
mov ecx, 4
mov eax, [edx + ecx]
adc eax, [ebx + ecx]
mov [ebx + ecx], eax
mov ecx, 8
mov eax, [edx + ecx]
adc eax, [ebx + ecx]
mov [ebx + ecx], eax
mov ecx, 12
mov eax, [edx + ecx]
adc eax, [ebx + ecx]
mov [ebx + ecx], eax
}
C++ 컴파일러가 당신보다 코드를 작성하는 것이 더 좋을 것 같습니다. 그것은 예상된다. 현대 컴파일러는 영웅적인 최적화를 수행합니다. 왜 더 잘할 수있을 것으로 기대합니까? 컴파일러에서 어떤 코드를 내 보냈습니까? 어떻게 다릅니 까? 당신의 타이밍에 얼마나 자신이 있습니까? –
음, C++ 코드가 링크에 표시됩니다. 작업을 수행하는 데 필요한 시간은 C++ 또는 asm을 추가 할 때마다 100 % 확실합니다. – user2226676
C++ 코드가 실행되지 않습니다. 컴파일러는 실행될 코드를 생성합니다. 생성 된 코드는 어떻게 생겼습니까? 그리고 어떻게 지내셨습니까? 여기에있는 많은 벤치 마크 질문은 잘못된 타이밍에 빠지기 시작합니다. –