float b=1;
float a= ~~~~
if(a<=0)
b=-1;
이거를
a=~~~~ * FLT_MAX
clamp(a,-1,1)
gpu에서 if문 안쓰려고 하는데 저런 꼼수 통할까요
컴파일해서나온어셈블리확인해보믄댛듯
근데핫스팟아니면걍보기쉽게짜는게나아요어설픈최적화따라하기는빽도
clamp 가 intrinsic 이라면 유효한 방법. SSE2 에도 관련 명령어들이 있어. a = max(a, -1) 같은건 GPU 에서도 지원할껄?
함수 호출도 분기라는 것 잊지 말길. 오히려 if문보다 더 비용이 크지. 활성 레코드 (스택 프레임) 형성 땜시.
근데 나 같으면 걍 b = (int)(((*(unsigned int*)&a & 0x80000000) >> 31) * 0xFFFFFFFEU) | 1 이렇게 짤 듯.
b = (int)((*(unsigned int*)&a >> 31) * 0xFFFFFFFEU) | 1;로 정정.
컴파일해서나온어셈블리확인해보믄댛듯
근데핫스팟아니면걍보기쉽게짜는게나아요어설픈최적화따라하기는빽도
clamp 가 intrinsic 이라면 유효한 방법. SSE2 에도 관련 명령어들이 있어. a = max(a, -1) 같은건 GPU 에서도 지원할껄?
함수 호출도 분기라는 것 잊지 말길. 오히려 if문보다 더 비용이 크지. 활성 레코드 (스택 프레임) 형성 땜시.
근데 나 같으면 걍 b = (int)(((*(unsigned int*)&a & 0x80000000) >> 31) * 0xFFFFFFFEU) | 1 이렇게 짤 듯.
b = (int)((*(unsigned int*)&a >> 31) * 0xFFFFFFFEU) | 1;로 정정.