프로그래머블 파이프 라인 (GLSL)이 고정 파이프 라인보다 빠른 이유는 무엇입니까?


27

그래서 저는 GLSL을 가르치고 있으며 고정 기능 파이프 라인보다 빠른 이유를 알아 내려고 노력 중입니다.

내가 문제를 겪고있는 이유는 내가 이해 한 바에 따라 생성 한 셰이더가 이전에 있던 파이프 라인의 섹션을 대체하기 때문입니다. 그렇다면 어떻게 자신의 버전을 제공하는 것이 속도를 높이는가?

내가 생각할 수있는 유일한 것은 이전에 자신의 조명 방정식을 말하려고하면 CPU에서 계산을 수행해야하지만 GPU에서 계산을 더 빠르게 수행 할 수 있다는 것입니다.

이것을 올바르게 이해하고 있습니까?


기존 함수의 고유 버전을 작성하는 것이 더 빠른지 또는 CPU에서 계산중인 함수를 더 빨리 오프로드하는지 묻고 있습니까?
MichaelHouse

gamedev.net에서 내 질문에 대한 게시물을 찾았습니다.
Joey Green

2
내가 참조. 다른 사람들이 혜택을 볼 수 있도록 여기에 대한 답변을 게시해야합니다. 아마도 그 과정에서 당신의 질문을 명확히 할 것입니다.
MichaelHouse

@ joey-green 여기 에 gamedev.net을 연결 하십시오. 이 질문에 걸려 넘어 질 사람들에게 도움이 될 것입니다.
Quazi Irfan

1
문제를 더 혼동하기 위해 테스트에서 고정 파이프 라인이 최소한 간단한 경우에 실제로 셰이더보다 빠를 수 있습니다. sol.gfxile.net/instancing.html
Jari Komppa

답변:


27

생성 한 셰이더는 고유 한 버전의 고정 함수 파이프 라인 (FFP)이 아니라 시원하고 복잡한 것을 달성하기위한 사용자 지정 정점 및 픽셀 조작 작업이됩니다.

PP는 FFP에서 이러한 가상의 것들을 렌더링하는 데 필요한 패스 수 또는 결합기 및 큐브 맵 마술의 수를 줄이므로 PP는 프로그래머블 파이프 라인 (PP)을 통해 가능한 많은 FFP 구현보다 빠르게 작동합니다.

보간 된 정점 데이터와 샘플 텍스처만으로 FFP에서 픽셀 당 조명과 같은 일반적인 것을 구현한다고 상상해보십시오. "정직하게"할 수 없으며 충실한 사전 계산 큐브 맵 및 일부 심각한 블렌딩에 따라 특수한 경우에만 해킹합니다. PP에서는 빛의 방향과 정점 법선 사이에서 내적을 착색하는 문제가됩니다.

대체로 PP는 느리고 불가능하며 빠르며 가능합니다. 그러나 FFP에 사용 된 것과 동일한 알고리즘을 구현하기 위해 셰이더를 작성하기로 결정하면 FFP가 하드웨어에 최적화되어 있기 때문에 약간 더 빠를 것입니다.


1
좋은 대답 ... +1.
Amir Zadeh

@Green 확실하지 않습니다. 어떻게 든 요점을 놓친다. Kylotan의 답변은 실제 질문에 훨씬 더 적합합니다.
Chris는 Reinstate Monica

14

이론적으로 프로그래밍 가능한 파이프 라인은 고정 기능 파이프 라인보다 느립니다. 범용 프로세서는 특수 케이스 프로세서와 경쟁 할 수 없습니다. 원래의 고정 기능 파이프 라인은 이론적으로 가능한 빠른 라인의 로직 게이트 그룹에 지나지 않습니다.

그러나 요즘에는 프로그래밍 가능한 파이프 라인이 표준입니다. 따라서 하드웨어는 대신 프로그래밍 가능한 파이프 라인을 향합니다. 하나의 특정 데이터 흐름을 위해 특별히 생성 된 회로를 갖는 초기 효율성을 상실한 경우 가장 일반적인 경우를 수용해야하며, 이는 쉐이더 기반 접근 방식입니다. 그러나 하위 호환성 옵션의 경우 고정 기능 파이프 라인을 계속 사용할 수 있지만 비용은 이전 고정 기능을 셰이더로 변환해야하므로 비용이 많이 발생할 수 있습니다. 이것은 성능 차이를 설명합니다.


1

내가 생각할 수있는 주요 이유는 고정 파이프 라인의 단계이므로 프로그램에 필요하지 않습니다. 예를 들어 모든 라이트가 정적 인 게임을 이미지로 만들면 동적 라이트를 계산하지 않는 셰이더를 쉽게 구현할 수 있습니다. 이 경우, 쉐이더는 동적 라이트 (범용 셰이더)에 대한 일부 방정식을 확인하는 미리 컴파일 된 셰이더보다 빠르게 실행됩니다. 다른 예제도 있지만 고정 파이프 라인에 대해 고려해야 할 많은 측면을 쉽게 생각할 수 있지만 GLSL 코드에서 구현을 무시할 수 있습니다.


1

그것이 바로 쉐이더가 파이프 라인의 일부를 대체하고 있다는 것입니다. 그러나 종종 셰이더는 달성하려는 특정 효과에 특화되어 있으며 가능한 모든 특수 기능을 처리하지 않으므로 전체 고정 기능 파이프 라인을 에뮬레이트하는 셰이더보다 단순합니다. 고정 기능 경로는 많은 것들과 OpenGL 기능을 고려해야하지만 반면에 사용하고 싶지 않거나 들어 보지 못했을 수도 있습니다.

그리고 특수 하드웨어 (완전히 프로그래밍 가능한 하드웨어와 반대)에서 고정 기능을 수행했던 시절이 끝났습니다. 고정 기능 파이프 라인을 사용할 때 발생하는 일은 아마도 드라이버가 자체 특수 쉐이더를로드하여 고정 기능 경로. 그러나 이들은 고정 기능 파이프 라인이 제공하는 모든 기능을 제공하기 위해 매우 복잡 할 수 있습니다.


"고정 기능 파이프 라인을 사용할 때 발생할 수있는 일은 드라이버가 고정 기능 경로를 구현하는 자체 특수 셰이더 만로드한다는 것입니다." ..이거 확실하니? 신뢰할 수있는 자료를 제공해 주시겠습니까? 감사.
Quazi Irfan 21시

@iamcreasy 믿을만한 출처가 없기 때문에 (아마도) 인정해야합니다. 그러나 오늘날의 그래픽 카드 (많은 소형 프로세서)는 여전히 조명 또는 포그 계산을 계산하기위한 전용 하드웨어를 가지고 있다는 점을 강력히 의심합니다. 대신에 이들은 미리 컴파일 된 프로그램을 특정 셰이더 단계로로드 할 가능성이 높습니다 (드라이버 나 ROM 스토리지에서 가져온 것인지 여부는 모르겠습니다).
Chris는 Reinstate Monica가

nouveau wiki nouveau.freedesktop.org/wiki/CodeNames에 따르면 @iamcreasy 에서는 고정 파이프 라인이 GeForce 6xxx에서 제거되었습니다.
먼지 iCE

"고정 기능 파이프 라인을 사용할 때 발생할 수있는 일은 드라이버가 고정 기능 경로를 구현하는 자체 특수 셰이더 만로드한다는 것입니다." 참된. "하지만 고정 기능 파이프 라인이 제공하는 각각의 모든 기능을 제공하는 것은 매우 복잡 할 수 있습니다." 좋은 드라이버는 사용자가 활성화 한 기능에 대해서만 쉐이더를 생성합니다.
Chris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.