0

SIMD 코드 작성이 가능한 엔진을 사용 중이며 빨리 수행됩니다. 그러나 모든 코드가있는 블록은 하나뿐입니다.이 경우 SIMD는 어떻게 작동합니까?

이 코드는 각 엔티티에서 동시에 독립적으로 실행되지만 1 가지만 변경되는 경우 관계없이 계산하는 것이 더 빠릅니까? 이것은 SIMD, 병렬 처리에 대한 아이디어입니까? 예를 들어

:이 경우

void simdFunction() 
{ 
    center = mesh.center(); // always the same 
    vert.pos.x = center.x; // run on each vertex 
} 

이 센터는 항상 같은, 그래서 그것은 SIMD의 각 정점으로 계산됩니다? 그렇다면 여전히 효율적인가?

기본적으로 병렬로 실행할 수 있습니까? 일반적인 SIMD 프로그래밍의 의미와 상관없이 계산 비용이 중요합니다.

답변

4

이 코드는 각 엔티티 동시에

없음에 독립적으로 실행, 즉 어떻게하지 SIMD 작품입니다.

SIMD를 사용하면 모든 연산 장치가 동일한 작업을 수행하는 잠금 단계에서 작동합니다. 무엇이든 독립은 없습니다.

일반적으로 공유 코드를 한 번만 계산하면됩니다. 그렇게하면 SIMD 엔진은 정점의 각 조각에 더 적은 시간을 소비하게됩니다.

계산이 짧고 SIMD가 (GPGPU와 같은) 보조 프로세서이고 데이터가 이미 해당 보조 프로세서에있는 경우는 예외입니다. 그런 다음 SIMD를 사용하여 컴퓨팅하면 순차적 프로세서로 데이터를 이동하고 다시 되돌릴 수 있습니다.

+0

감사합니다. Ben, 나는 그것을 더 잘 이해하는 것 같습니다. 그러나 나는 이것에 대한 통제권이 없다. 엔진의 스펙은 하나의 SIMD 컨텍스트 만 가질 수 있다고 정의합니다. 다른 함수 등을 작성할 수 있지만 주 컨텍스트에서 호출하자 마자 같은 일이 일어납니다. 그래서 나는 선택의 여지가 없다고 생각한다. –