AIX XLC تنفيذ STL أبطأ بشكل كبير من المنصات الأخرى؟

StackOverflow https://stackoverflow.com/questions/891554

  •  23-08-2019
  •  | 
  •  

سؤال

شيء يستغرق ثانية ثانية لتشغيل Linux يستغرق 45 ثانية لتشغيل AIX. لم أخرج مباشرة في هذا الرمز ولكن كاختبار أمسك بتطبيق صغير لا يفعل القليل جدا من آخر حتى سؤال:

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;
}

لدي مترجم قديم (7.0.0.10) ولا يمكنني أن أصدق مقدار أبطأ الرمز يعمل مقابل نفس الرمز الموجود في G ++ 4.2.

هل رأى اى شخص هذا من قبل؟ سوف يستغرق الأمر بعض العمل لترقية المحول البرمجي. يعد نموذج التعليمات البرمجية حوالي 20 مرة أبطأ (في الوقت الحقيقي) على نظام بدون تحميل تقريبا.

تحديث المربع المقصود المواصفات:

 عدد المعالجات: 8 معالج السرعة: 3504 MHz CPU النوع: 64 بت نوع الذاكرة: 6323 بت حجم ذاكرة جيدة الحجم: 63232 MB منصة المستوى الثابت: EM340_041 نسخة البرامج الثابتة: IBM، EM340_041 تسجيل الدخول: تمكين السيارات إعادة التشغيل: صحيح كور كامل: صحيح

الإخراج على AIX:

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

الإخراج على لينكس:

 0.00s real     0.01s user     0.00s system
هل كانت مفيدة؟

المحلول

أظن استراتيجية تخصيص الذاكرة دون المستوى الأمثل. ماذا يحدث إذا أضفت

vec.reserve(10000);

قبل حلقة الحلقة؟

نصائح أخرى

إما أن هناك شيء خاطئ بجدية في الإعداد الخاص بك، أو لم تنشر الرمز الحقيقي. ينفذ الأغراض على الفور تقريبا على كمبيوتر محمول Pentium 900 ميجاهرتز للغاية مع ذاكرة صغيرة:

#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;
}

يرجى تشغيل هذا الرمز من خلال المترجمين والإبلاغ عن الأرقام التي تخرجها.

بضع اقتراحات لتضييق المشكلة:

  • استخدام الوقت في البرنامج الخاص بك وإلقاء نظرة على النظام / أوقات المستخدم، ليس الوقت المنقضي. هذا سوف يمنحك مؤشرا أفضل.
  • وضع system("date") قبل كل من عبارات الدفع الأولية الثلاثة، قبل حلقة حلقة، قبل محو وقبل الإرجاع. هذا سيظهر أي عملية تسبب المشكلة.
  • أخبرنا ما الأجهزة التي تديرها كذلك. قد يكون لديك أدفئات 286 فئة.

ثم عد إلينا بالبيانات الصعبة ويمكننا المساعدة في ذلك أكثر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top