es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo mejorar la utilización de la CPU de un programa C++

Esta es una versión mínima fácil de depurar del programa. Estoy haciendo una asignación continua de vectores y durmiendo durante 20 ms. Los 20 ms solo simulan una llamada externa que en un programa real tomará aproximadamente 200 ms.

#include <iostream>
#include <thread>
#include <chrono>
#include <vector>

void fun(){
    for (size_t i = 0; i < 500; i++){
        std::vector<unsigned char=""> vec;
        vec.resize(15000);
        std::this_thread::sleep_for(std::chrono::milliseconds(20));//simulando una llamada externa de 20 ms
    }
}

int main(){
    std::vector<std::thread> vecThread;

    for (size_t i = 0; i < 6; i++){
        vecThread.push_back(std::thread(fun));
    }

    for (std::thread& th : vecThread){
        if (th.joinable()){
            th.join();
        }
    }
}

Ejecuté el Perfilador de Intel VTune y descubrí que la utilización de la CPU es pobre.

¿Cómo puedo mejorar la utilización de la CPU de este código?

Imagen: Enlace a la imagen

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una posible solución para mejorar la utilización de la CPU de este código es utilizar un grupo de hilos en lugar de asignar y liberar hilos de forma continua. Esto reducirá la sobrecarga de creación y destrucción de hilos, y permitirá una mejor utilización de los hilos disponibles. Además, en lugar de imitar una llamada externa de 20ms, se puede utilizar una llamada de bloqueo real para asegurar que los hilos se utilicen completamente mientras esperan a que se complete la llamada externa. Otra posible optimización es utilizar un grupo de memoria para reciclar memoria en lugar de asignar y liberar constantemente vectores. Esto puede mejorar el rendimiento al reducir la fragmentación de memoria y disminuir la sobrecarga de asignación y liberación de memoria. Por último, las micro-optimizaciones como utilizar “reserve” en lugar de “resize” para los vectores, utilizar matrices en bruto en lugar de vectores para datos de tamaño fijo pequeños y utilizar instrucciones SIMD también pueden mejorar el rendimiento.

Comments are closed.