초기 HW에는 흐름 제어 기능이 없었고 최신 HW의 비용이 다양하기 때문에 셰이더 컴파일러는 언 롤링에 대해 매우 공격적입니다. 벤치마킹하고 적극적으로 테스트하고있는 다양한 하드웨어가 있다면 어떤 일이 발생하는지 확인하십시오. 동적 루프는 정적 루프보다 개발자 개입에 더 적합하지만 벤치 마크를 사용할 수 없다면 컴파일러에 맡기는 것이 좋습니다. 벤치 마크를 통해 탐험은 가치 있고 재미 있습니다.
BTW, GPU에서 동적 루프로 인한 가장 큰 손실은 wavefront / warp의 개별 "스레드"가 다른 시간에 완료된다는 것입니다. 나중에 중지하는 스레드는 조기에 완료된 모든 스레드가 NOP를 실행하도록합니다.
중첩 루프는 신중하게 생각해야합니다 .JPEG와 같은 압축을 위해 0을 실행하는 블록 기반 엔트로피 디코더를 구현했습니다. 자연스러운 구현은 단단한 내부 루프에서 실행을 디코딩하는 것이 었습니다. 이는 종종 하나의 스레드 만 진행되고 있음을 의미했습니다. 루프를 평탄화하고 각 스레드에서 현재 실행을 디코딩하는지 여부를 명시 적으로 테스트하여 고정 길이 루프를 통해 모든 스레드를 활성 상태로 유지했습니다 (디코딩 된 블록의 크기는 모두 동일했습니다). 스레드가 CPU 스레드와 같으면 변경 사항이 끔찍했지만 실행중인 GPU에서 6 배의 성능 향상을 얻었습니다 (여전히 끔찍합니다-GPU를 계속 사용하기에 충분한 블록이 없었습니다- 그러나 그것은 개념의 증거였습니다).