WalzoneInterview Prep
πŸ“ž Interviewing soon? Practice with a realistic AI mock phone interview β€” it calls you, then scores you. First 15 min FREE β†’

C++ Β· Expert Β· question 69 of 100

What are some techniques for optimizing C++ code for performance, such as loop unrolling or vectorization?

πŸ“• Buy this interview preparation book: 100 C++ questions & answers β€” PDF + EPUB for $5

Optimizing C++ code for performance is an important consideration in many applications, especially those that require fast computation or real-time processing. There are several techniques that can be used to optimize C++ code for performance, including loop unrolling, vectorization, and parallelism.

Loop unrolling: Loop unrolling is a technique that reduces the overhead of loop control statements by manually duplicating the loop body several times. This reduces the number of times the loop is executed, which can improve performance by reducing the overhead of loop control statements such as branch instructions, comparisons, and increments. For example, instead of writing a loop like this:

    for (int i = 0; i < N; i++) {
        // loop body
    }

You can manually unroll the loop like this:

    for (int i = 0; i < N; i += 2) {
        // loop body
        // loop body
    }
    if (N % 2 == 1) {
        // handle the remaining element
    }

This will reduce the overhead of the loop control statements, at the expense of slightly larger code size.

Vectorization: Vectorization is a technique that enables processors to execute multiple operations in parallel by operating on multiple elements of data in a single instruction. This can improve performance by reducing the number of instructions executed, and by taking advantage of the parallelism inherent in modern processor architectures. To vectorize a loop, the loop body must be written in a way that allows the compiler to generate vector instructions. For example, instead of writing a loop like this:

    for (int i = 0; i < N; i++) {
        a[i] = b[i] + c[i];
    }
    
    
    You can rewrite it like this:
    
    scss
    Copy code
    for (int i = 0; i < N; i += 4) {
        __m128d b_vec = _mm_load_pd(&b[i]);
        __m128d c_vec = _mm_load_pd(&c[i]);
        __m128d a_vec = _mm_add_pd(b_vec, c_vec);
        _mm_store_pd(&a[i], a_vec);
    }

This will generate vector instructions that operate on four elements of data at a time, improving performance.

Parallelism: Parallelism is a technique that enables multiple threads to execute code simultaneously, taking advantage of the multiple processing cores available in modern processors. Parallelism can improve performance by dividing a large computation into smaller, independent tasks that can be executed in parallel. This can be achieved using threading libraries such as OpenMP or C++11’s std::thread. For example, instead of computing a large matrix multiplication sequentially like this:

    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            for (int k = 0; k < N; k++) {
                c[i][j] += a[i][k] * b[k][j];
            }
        }
    }

You can divide the computation into smaller tasks that can be executed in parallel like this:

    #pragma omp parallel for
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            for (int k = 0; k < N; k++) {
                c[i][j] += a[i][k] * b[k][j];
            }
        }
    }

This will divide the computation into independent tasks that can be executed in parallel by multiple threads, improving performance.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic C++ interview β€” then scores it.
πŸ“ž Practice C++ β€” free 15 min
πŸ“• Buy this interview preparation book: 100 C++ questions & answers β€” PDF + EPUB for $5

All 100 C++ questions Β· All topics