Pregunta

Algo que tarda 1 segundo para correr en Linux tarda 45 segundos en AIX. No he excavado directamente en el código, sino como una prueba agarró una pequeña aplicación que hace muy poco desde otro SO pregunta:

int main ( int argc, char **argv)
{
int i = 0;
std::vector<int> vec;
vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);

for (i=0;i<100000;i++)
   vec.push_back(i);

vec.erase(vec.begin() + 1);
return 0;
}

Tengo un viejo compilador (7.0.0.10) y no puedo creer lo mucho más lento es el código se ejecuta contra el mismo código en g ++ 4.2.

¿Alguien ha visto esto antes? Haría falta algo de trabajo para actualizar el compilador. El código de ejemplo es aproximadamente 20 veces más lentas (tiempo real) en un sistema con casi sin carga.

Actualizar reqested caja Especificaciones:

    Number Of Processors: 8
    Processor Clock Speed: 3504 MHz
    CPU Type: 64-bit
    Kernel Type: 64-bit
    Memory Size: 63232 MB
    Good Memory Size: 63232 MB
    Platform Firmware level: EM340_041
    Firmware Version: IBM,EM340_041
    Console Login: enable
    Auto Restart: true
    Full Core: true

Salida en AIX:

real    0m0.52s
user    0m0.51s
sys     0m0.00s

Salida en Linux:

 0.00s real     0.01s user     0.00s system
¿Fue útil?

Solución

Sospecho una estrategia de asignación de memoria subóptima. ¿Qué ocurre si se agrega

vec.reserve(10000);

antes de que el bucle de?

Otros consejos

O hay algo seriamente mal con su configuración, o no ha publicado el código real. El folowing ejecuta casi instantáneamente en un muy viejo portátil Pentium 900Mhz con poca memoria:

#include <iostream>
#include <vector>
#include <ctime>
using namespace std;;

int main ( int argc, char **argv) {

    time_t now1 = time(0);
    std::vector<int> vec;
    vec.push_back(6);
    vec.push_back(-17);
    vec.push_back(12);
    for ( int i = 0; i<10000; i++) {
      vec.push_back(i);
    }

    time_t now2 = time(0);
    vec.erase(vec.begin() + 1);

    time_t now3 = time(0);
    cout << (now2 - now1) << " " << (now3 - now2)  << endl;
}

Por favor, ejecute el código a través de ambos compiladores y reportar los números que salidas.

Un par de sugerencias para localizar el problema:

  • Uso de tiempo en su programa y observe el sistema / usuario veces, no el tiempo transcurrido. Eso le dará una indicación mejor.
  • poner un system("date") antes de cada una de las tres declaraciones push_back iniciales, antes de que el bucle for, antes de que el borrado y antes de la devolución. Esto le mostrará qué operación está causando el problema.
  • Díganos qué hardware se está ejecutando en también. Es posible que tenga un pSeries 286 de clase.

A continuación, volver a nosotros con los datos duros y podemos ayudar un poco más.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top