브랜칭이 비싼 아키텍처 (PS3의 셀 프로세서)에 최적화되어 있다면 분기를 사용하지 않거나 최소한 분기 수를 줄이지 않고도 주어진 알고리즘을 표현할 수 있는지 여부를 결정하는 것이 중요 할 수 있습니다 . 최적화되지 않은 코드에서 많이 볼 수있는 패턴 중 하나는 인덱스를 일부 배열로 조정하는 데 사용되는 if 묶음입니다 (배열의 크기가 홀수 인 경우 인덱스를 1, 다른 상황에서는 2를 곱하는 등).). 따라서 한 목록을 다른 목록으로 변환하는 분기없는 함수를 작성할 수 있는지 여부를 결정할 수있는 두 가지 숫자 목록이있는 방법이 있다면 좋을 것입니다.분기없이 정수 시퀀스를 생성 할 수 있는지를 결정하는 기술?
예를 들어, 최근에 나는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
을 0, 2, 4, 6, 8, 9, 7, 5, 3, 1
(오름차순으로 오름차순으로 오름차순)으로 변환하는 분기없는 함수를 작성할 수 있는지 알고 싶었습니다. 기술적으로, 나는 큰 switch/case 함수를 작성할 수는 있지만, 분명히 나는 임의의 크기에 대한 패턴을 따르는 함수에 관심이있다. 이 변환을 수행하는 함수를 작성하는 것은 분기를 사용하면 간단하지만, 그렇게하는 것이 비대칭 인 방법이라면 즉시 명백하지 않습니다.
이런 종류의 문제 또는 빠른 리트머스 테스트에 대한 일반적인 접근법이 있습니까? 아니면 사례별로 증거를 제시해야합니까? 이런 종류의 문제에 더 열심히 일할 수는 있지만 말 그대로 불가능하다면 그것은 무의미합니다. 어떤 시점에서 분기를 사용하지 않고 산술만을 사용하는 함수에 공식적인 수학적 단어가 있다는 것을 기억하지만, 기억하지 못합니다.
분기하지 않습니까? 이는 함수가 어떤 인수에 대해서도 동일한 원시 연산 순서를 수행한다는 것을 의미합니까? 또는 "값 n을 읽고 n 번째 요소로 이동 ..."과 같은 일을 할 수 있습니까? 전자의 경우에는 분명히 불가능합니다. 후자의 경우에는 지루합니다. 아니면 뭔가 다른 것을 의미합니까? – Beta
나는 조건문과 그에 따른 점프 명령을 의미한다. "값 n으로 이동"은 의미에 따라 해당 범주에 속할 수 있습니다. 배열에서 n으로 색인화 된 함수 포인터를 호출한다는 것은 분기로 간주됩니다. 어딘가에서 n을 읽은 다음 배열을 색인화하는 데 사용하면 분기가 필요하지 않습니다. 기본적으로 "이것이 사실 일 경우이 방법으로 진행하거나 다른 방법으로 진행하면"(루프 조건은이 정의로 계산됩니다)의 인스턴스는 없습니다. –
직접 배열 인덱싱이 작동하는 것처럼 보이기 때문에이 문제를 이해하지 않아야합니다. 'J = A [I]'하나의 숫자가 아니라 전체 배열을 대상으로하는 것을 의미한다면, 분기 비용을 줄이기 위해 루프를 풀거나 Duff의 장치를 사용할 수 있습니다. –