2012-06-10 2 views
1

"변수 설정"과 "조건 확인 후 변수 설정"간에 속도 차이가 있습니까?비교 속도 대 설정 변수

그래서 더 나은

if (state != IDLE) { 
     state = IDLE; 
    } 

대신

state = IDLE; 

으로 사용할 수 있나요?

첫 번째 경우에는 플래그를 확인하는 데 약간의 시간이 걸립니다. 그러나이 기간을 두 번째 경우 (단순히 변수를 설정)와 비교할 수 있습니까? 어느 것이 일반적으로 더 빠릅니까?

감사합니다, 마틴

편집 : programm에 메시지를 CAN받는 IRQ 핸들러 내부 120 MHz의 마이크로 컨트롤러 (NXP LPCXpresso 1769)에서 실행됩니다. 내가 묻는 이유는 IRQ 처리기가 정상적인 프로그램 실행을 방해하지 않기 때문입니다.

+1

성능 병목 현상이 있습니까? – Mysticial

+0

RAM에 쓰기가 RAM에서 읽는 것보다 빠르거나 느리고 조건 연산자를 수행하는 경우에 따라 달라집니다. –

+0

(@Mysticial은 일반적이지 않습니다 ...) –

답변

2

간단히 대답하면 대부분의 경우 값을 쓰는 것만 큼 빠르고 테스트가 빠르며 자주 테스트하는 것보다 빠릅니다.

자세한 설명 : 매우 로우 엔드 마이크로 컨트롤러를 제외하고, 메모리 버스는 일반적으로 코어에서 decopuled됩니다. 먼저 테스트 할 때 CPU는 메모리 버스에 주소를 쓰고 실제로 응답 할 때까지 메모리가 응답 할 때까지 기다려야합니다.

쓰기를 수행 할 때 CPU는 일반적으로 주소/값을 쓰기 대기열에 넣고 다음 명령으로 이동합니다. 이지만 다른 명령어를 실행해도 완료 될 때까지 기다리지는 않습니다 (그 중 하나가 그 값을 읽지 않는 한, CPU가 캐시를 가지고 있는지 여부에 달려 있습니다. 그렇지 않으면 최소한의 지연만으로 캐시에서 값을 읽을 수 있습니다. 그렇지 않으면 일반적으로 메모리에 쓰여질 때까지 기다렸다가 다시 읽습니다. 이론적

1

:

첫 번째 예는 두 가지 동작, 상태

  • 의 상태를 수정

    1. 검사를 갖는다

    번째 예 한가지 동작

      ,
    • 은 수행되어야 할 하나 개 적은 연산이 있기 때문에 분명히 첫 번째 예는 두번째보다 빠르며, 따라서 논리적 수학적/상태

    수정. 실제로

    : 변수에 따라

    는 스마트 컴파일러 동일한 어셈블리 명령어를 생성하기 위해 모두 첫번째 예와 제 2 예를 최적화 할 수 있으며, 사용된다.
    둘 다 동일한 성능을 가질 수 있습니다.

    정확한 결정 :

    프로필 대표 데이터를 사용 으로 모두를 사용하여 응용 프로그램/코드가 설정 만 다음 당신은 적절한 사진과 비교를 얻을 수 있습니다.

  • 1

    첫 번째 조각에는 '읽기, 비교, 쓰기'가 포함되고 두 번째는 '쓰기'이므로 최적화되지 않은 코드는 옵션 수가 적기 때문에 첫 번째 조각보다 두 번째 조각이 빠릅니다. 변수가 volatile으로 규정되면 첫 번째 변수는 두 번째 변수보다 느려야합니다. 변수가 volatile으로 정규화되지 않은 경우 컴파일러는 할당 전에 변수에 있었던 것과 관계없이 두 시퀀스의 결과가 동일하기 때문에 첫 번째에서 두 번째까지 최적화 할 수 있습니다.