반복문 최적화 관련 질문 있습니다!
272
작성한 질문수 8
2.compute bound - loop inversion, Optimization of Computer Programs in C 이 부분을 읽고서 무슨 뜻인지 알기 어려웠는데 수업을 레지스터를 하나 더 적게 사용할 수 있겠다는 생각이 들었습니다.
RayTracing In One Weekend 9.5 A Scene with Metal Spheres 를 살펴보면 이미지 픽셀을 순회할 때 전위 감소 연산자를 사용하고 있는데 최적화 기법을 고려하여 배열은 순회하도록 작성됐다고 생각해도 괜찮을까요?
...
std::cout << "P3\n" << image_width << " " << image_height << "\n255\n";
for (int j = image_height-1; j >= 0; --j) {
std::cerr << "\rScanlines remaining: " << j << ' ' << std::flush;
for (int i = 0; i < image_width; ++i) {
color pixel_color(0, 0, 0);
for (int s = 0; s < samples_per_pixel; ++s) {
auto u = (i + random_double()) / (image_width-1);
auto v = (j + random_double()) / (image_height-1);
ray r = cam.get_ray(u, v);
pixel_color += ray_color(r, world, max_depth);
}
write_color(std::cout, pixel_color, samples_per_pixel);
}
}
...
외부 루프는 --j인데 내부 루프는 ++i인 이유에 대해서도 조금 궁금합니다. 리틀엔디안 빅엔디안이랑 관련이 있을까요?
현업에서 그래픽스 라이브러리 API를 가져다 쓰거나, 만들어 쓸 때 인덱스를 --i를 선호하는지 ++i를 선호하는지 궁금합니다!
답변 1
0
이런 부분은 너무 과한 걱정입니다.
라이브러리 제작자가 아닌 컨텐츠 제작자 입장에선
--i나 ++i에 고민하기보단 알고리즘에 신경쓰는게 훨 낫습니다.
가독성 때문에 ranged for를 사용하기도 하는 시점에, --i ++i는 너무 디테일인 것 같네요.
1
위에 올려놓으신 코드를 보니, 저 부분은 성능보다는 알고리즘 특성 때문에 그런 것으로 보입니다.
일부 알고리즘 (ex. 특정 값에 따라 제거를 해야 한다거나..)의 경우 뒤부터 시작해서 스캔하는게
효율이 좋을 수도 있고요. 현재 알고리즘처럼 랜덤 요소를 추출할 때 초반/후반부 데이터로 뭔가를 하는 필요성이 생길 수도 있죠.
그리고 C와 다르게 C++은 함수 초반에 그렇게 데이터를 다 정의하진 않습니다.
실제로 어셈으로 까보면, 초반부에 하다 중반부에 하나 완전히 동일합니다.
물론 변수가 class라면, while { }내부에서 생성자/소멸자가 실행되느냐 여부는 다를 수 있지만
대체적으로는 큰 차이가 없습니다.
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
0
561
1
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
0
456
1
strcpy() 구현 관련 질문
0
546
1
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
0
478
1
클래스 타입의 포인터 질문합니다
0
562
1
입력값을 enum 값에 넣어주는거 이제 막혔나요?
0
505
1
템플릿 특수화 관련 질문
0
393
1
포인터 관련 질문합니다!
0
276
1
Unable to start assembler. Check your settings.
0
852
2
cpu선택
0
552
1
포인터 질문이 있습니다
0
336
1
20:35 에서 구조체 크기에 대한 질문입니다!
0
593
1
iterator 삭제관련
0
419
1
함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!
0
316
1
15 분 45초 대 질문
0
319
0
스택 프레임 질문합니다!
2
316
1
오른값 참조 in 게임
0
394
0
동적할당 질문이 있습니다
0
460
1
안녕하세요 메모리에 대해 질문드립니다.
0
314
1
함수객체 의 매개변수
0
370
1
복사생성자
0
442
1
main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요
0
431
1
포인터 실습 강의를 보고 궁금한게 있습니다.
0
360
1
스택 오버플로우
2
804
1





