루프 내에서 조건부 및 함수 호출 방지

ChronoTrigger

다음과 같은 코드가 있습니다.

void function(int parameter)
{
  for( ... ) // a big loop
  {
    double a = ...;
    for( ... ) // a big loop
    {
      double b = ...;

      double value;
      if(parameter == 1)
        value = some_math_expression_1(a, b);
      else if(parameter == 2)
        value = some_math_expression_2(a, b);
      ...
    }
  }
}

아이디어는 매개 변수에 따라 몇 가지 수학 표현식을 a에 적용하려는 것 b입니다. 이 함수는 여러 번 실행되고 빠르며, 각 반복에서 이러한 조건부 분기가 내가 절약 할 수있는 오버 헤드를 유발할 수 있는지 궁금합니다.

지금은 다음과 같은 코드를 작성했습니다.

void function(int parameter)
{
  if(parameter == 1)
    function1();
  else if(parameter == 2)
    function2();
  else
    ...
}

모든 .NET Framework에서 코드를 반복하면 수학 표현식을 직접 적용 할 수 있습니다 functionX(). 명백한 문제는 코드의 일부를 변경하려면 여러 번해야한다는 것입니다 (현재 약 10 개의 수학 표현식이 있습니다).

오버 헤드를 피하기 위해 어떤 방법을 사용할 수 function있습니까?

함수 some_math_expression_X대한 포인터를 function(함수 호출에 대한 조건을 변경합니다) 전달하면 어떻게됩니까?

전체 함수를 매크로 (uf)로 코딩하고 수학 표현식을 매개 변수로 설정하면 어떻게됩니까?

템플릿을 사용하고 수학 표현식을 인라인 함수에 대한 포인터로 전달하면 어떻게 되나요?

편집 : 귀하의 답변에 감사드립니다. 나는 당신이 제안하는 방법 (포인터 / 함수 배열 또는 분기 예측 자에 의존)을 사용할 수 있다는 것을 알고 있습니다. 그러나 오버 헤드를 피하는면에서 무엇이 더 좋을지에 대한 통찰력이 있습니까? 수학 표현식은 매우 간단하며 (와 같은 a*b) 긴 루프 외에도 function여러 번 호출됩니다 (호출간에 분기 예측이 "생존"합니까?).

로드리고

함수를 템플릿으로 변환 할 수 있습니다.

void functionT<int PARAMETER>()
{
  for( ... ) // a big loop
  {
    double a = ...;
    for( ... ) // a big loop
    {
      double b = ...;

      double value;
      if(PARAMETER == 1) //Constant condition!!!
        value = some_math_expression_1(a, b);
      else if(PARAMETER == 2)  //Constant condition!!!
        value = some_math_expression_2(a, b);
      ...
    }
  }
}

조건이 항상 참이거나 항상 거짓이므로 컴파일러는 조건 트리를 최적화하고 실제 수학 표현식 만 남겨 둡니다. 분기 및 함수 호출이 없습니다!

이제 상수 매개 변수로만 사용할 수 있습니다.

functionT<1>();

그러나 변수가 아닙니다.

int x = 1;
functionT<x>(); //Error

필요한 경우 래퍼를 만들 수 있습니다.

void function(int parameter)
{
    switch (parameter)
    {
        case 1: functionT<1>(); break;
        case 2: functionT<2>(); break;
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

루프 내에서 조건이 충족되는 경우 while 루프에서 병렬로 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

React : 루프 및 중첩 함수 내부에서 후크를 호출하는 잘못된 예

분류에서Dev

ForEach 루프 내부에서 호출 된 함수에서 PowerShell 오류 세부 정보를 얻는 방법

분류에서Dev

함수가 while 루프 내부에서 호출 될 때 getopts는 인수를 얻지 않습니다.

분류에서Dev

함수가 while 루프 내부에서 호출 될 때 getopts는 인수를 얻지 않습니다.

분류에서Dev

ForEach 루프 내에서 함수 호출

분류에서Dev

루프 내에서 함수 호출

분류에서Dev

루프 외부에서 정의되었지만 해당 루프 내부에서 호출 된 함수에서 변수 전달

분류에서Dev

PostgreSQL 함수 내부의 FOR 루프 조건

분류에서Dev

다른 함수의 "if 루프"내부에서 함수 호출 / 이동-Qt, C ++

분류에서Dev

ngfor 루프 내부의 함수 및 조건은 무한히 실행됩니다.

분류에서Dev

루프 내부의 함수 호출이 Python에서 작동하지 않습니다.

분류에서Dev

조건부 포함 및 조건부 함수 호출을 할 수 있습니까?

분류에서Dev

For 루프 내부에서 조건부 중단 및 계속 실행

분류에서Dev

마지막 반복 만 취하는 루프 내부의 함수 호출

분류에서Dev

루프에 들어가기 전에 중첩 루프 내부에서 호출되는 함수를 선택하는 방법은 무엇입니까?

분류에서Dev

다른 매개 변수 값을 사용하여 foreach 루프 내부의 컨트롤러 내부에서 함수를 호출하는 방법

분류에서Dev

Excel VBA 호출 함수 및 루프

분류에서Dev

While 루프 구조에서 함수 호출로 변환

분류에서Dev

foreach 루프 내부에서 SwiftUI .onTapGesture가 호출되지 않음

분류에서Dev

지도 함수 내에서 API 호출 및 결과 사용

분류에서Dev

조건부 및 함수로 중첩 루프 벡터화

분류에서Dev

루프 파이썬 내부의 함수 호출

분류에서Dev

while 루프 내부의 if 조건이 거짓으로 판명 될 때 내 함수가 마지막 문을 출력하지 않는 이유는 무엇입니까?

분류에서Dev

루프 내에서 비동기 함수 완료 후 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

함수 목록을 반복하고 루프 내에서 해당 함수를 호출하는 방법

분류에서Dev

외부 함수 호출 후 JQuery 루프 중지

분류에서Dev

루프 내에서 함수 호출, "정의되지 않음은 함수가 아닙니다."

분류에서Dev

PHP 함수 및 HTML 내에서 호출

Related 관련 기사

  1. 1

    루프 내에서 조건이 충족되는 경우 while 루프에서 병렬로 함수를 호출하는 방법은 무엇입니까?

  2. 2

    React : 루프 및 중첩 함수 내부에서 후크를 호출하는 잘못된 예

  3. 3

    ForEach 루프 내부에서 호출 된 함수에서 PowerShell 오류 세부 정보를 얻는 방법

  4. 4

    함수가 while 루프 내부에서 호출 될 때 getopts는 인수를 얻지 않습니다.

  5. 5

    함수가 while 루프 내부에서 호출 될 때 getopts는 인수를 얻지 않습니다.

  6. 6

    ForEach 루프 내에서 함수 호출

  7. 7

    루프 내에서 함수 호출

  8. 8

    루프 외부에서 정의되었지만 해당 루프 내부에서 호출 된 함수에서 변수 전달

  9. 9

    PostgreSQL 함수 내부의 FOR 루프 조건

  10. 10

    다른 함수의 "if 루프"내부에서 함수 호출 / 이동-Qt, C ++

  11. 11

    ngfor 루프 내부의 함수 및 조건은 무한히 실행됩니다.

  12. 12

    루프 내부의 함수 호출이 Python에서 작동하지 않습니다.

  13. 13

    조건부 포함 및 조건부 함수 호출을 할 수 있습니까?

  14. 14

    For 루프 내부에서 조건부 중단 및 계속 실행

  15. 15

    마지막 반복 만 취하는 루프 내부의 함수 호출

  16. 16

    루프에 들어가기 전에 중첩 루프 내부에서 호출되는 함수를 선택하는 방법은 무엇입니까?

  17. 17

    다른 매개 변수 값을 사용하여 foreach 루프 내부의 컨트롤러 내부에서 함수를 호출하는 방법

  18. 18

    Excel VBA 호출 함수 및 루프

  19. 19

    While 루프 구조에서 함수 호출로 변환

  20. 20

    foreach 루프 내부에서 SwiftUI .onTapGesture가 호출되지 않음

  21. 21

    지도 함수 내에서 API 호출 및 결과 사용

  22. 22

    조건부 및 함수로 중첩 루프 벡터화

  23. 23

    루프 파이썬 내부의 함수 호출

  24. 24

    while 루프 내부의 if 조건이 거짓으로 판명 될 때 내 함수가 마지막 문을 출력하지 않는 이유는 무엇입니까?

  25. 25

    루프 내에서 비동기 함수 완료 후 함수를 호출하는 방법은 무엇입니까?

  26. 26

    함수 목록을 반복하고 루프 내에서 해당 함수를 호출하는 방법

  27. 27

    외부 함수 호출 후 JQuery 루프 중지

  28. 28

    루프 내에서 함수 호출, "정의되지 않음은 함수가 아닙니다."

  29. 29

    PHP 함수 및 HTML 내에서 호출

뜨겁다태그

보관