inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

반복문

반복문 최적화 관련 질문 있습니다!

272

patjuk

작성한 질문수 8

0

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를 선호하는지 궁금합니다!

C++

답변 1

0

Rookiss

이런 부분은 너무 과한 걱정입니다.
라이브러리 제작자가 아닌 컨텐츠 제작자 입장에선
--i나 ++i에 고민하기보단 알고리즘에 신경쓰는게 훨 낫습니다.
가독성 때문에 ranged for를 사용하기도 하는 시점에, --i ++i는 너무 디테일인 것 같네요.

0

patjuk

C만 하다가 어셈블리하면서 궁금증이 해소되니 좀 신이 난 것 같아요. ;> 시간나면 말씀해주신 ranged for를 살펴보면 될 것 같습니다. 말씀 감사합니다. 

1

Rookiss

위에 올려놓으신 코드를 보니, 저 부분은 성능보다는 알고리즘 특성 때문에 그런 것으로 보입니다.
일부 알고리즘 (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