[C++] هل يجب استخدام إضافات سيمد أو متجه أو أي شيء آخر؟


Answers

أقترح أن تتعرف على قوالب التعبير (تطبيقات المشغل المخصصة التي تستخدم كائنات الوكيل). وبهذه الطريقة، يمكنك تجنب القيام الأداء قتل قتل / تخزين حول كل عملية على حدة، والقيام بها مرة واحدة فقط لحساب كامل.

Question

أنا حاليا تطوير إطار تطبيق 3D مفتوحة المصدر في ج ++ (مع C ++ 11 ). تم تصميم مكتبة الرياضيات الخاصة بي مثل مكتبة الرياضيات شنا ، وأيضا مع سيمد في الاعتبار. ولكن في الوقت الراهن ليست سريعة حقا، ولها مشاكل مع محاذاة الذاكرة، ولكن أكثر عن ذلك في سؤال مختلف.

قبل بضعة أيام سألت نفسي لماذا يجب أن أكتب رمز بلدي سس الخاصة. مترجم هو أيضا قادرة على توليد رمز الأمثل الأمثل عند التحسين. ويمكنني أيضا استخدام " متجه الموجات " في دول مجلس التعاون الخليجي . ولكن هذا كله ليس حقا المحمولة.

وأنا أعلم أن لدي المزيد من السيطرة عندما أستخدم رمز بلدي سس، ولكن في كثير من الأحيان هذه السيطرة هي ونيساري.

مشكلة واحدة كبيرة من سس هو استخدام الذاكرة الديناميكية التي هي، مع مساعدة من حمامات الذاكرة وتصميم البيانات الموجهة، قدر الإمكان محدودة.

الآن على سؤالي:

  • هل يجب استخدام سس عارية؟ ربما مغلفة.

    __m128 v1 = _mm_set_ps(0.5f, 2, 4, 0.25f);
    __m128 v2 = _mm_set_ps(2, 0.5f, 0.25f, 4);
    
    __m128 res = _mm_mul_ps(v1, v2);
  • أو هل يجب على المترجم القيام بالعمل القذر؟

    float v1 = {0.5f, 2, 4, 0.25f};
    float v2 = {2, 0.5f, 0.25f, 4};
    
    float res[4];
    res[0] = v1[0]*v2[0];
    res[1] = v1[1]*v2[1];
    res[2] = v1[2]*v2[2];
    res[3] = v1[3]*v2[3];
  • أو يجب استخدام سيمد مع رمز إضافي؟ مثل فئة حاوية ديناميكية مع عمليات سيمد، والتي تحتاج إلى load إضافية وتعليمات store .

    Pear3D::Vector4f* v1 = new Pear3D::Vector4f(0.5f, 2, 4, 0.25f);
    Pear3D::Vector4f* v2 = new Pear3D::Vector4f(2, 0.5f, 0.25f, 4);
    
    Pear3D::Vector4f res = Pear3D::Vector::multiplyElements(*v1, *v2);

    المثال أعلاه يستخدم فئة وهمية مع الاستخدامات float[4] الداخلية ويستخدم store load في كل الطرق مثل multiplyElements(...) . تستخدم الأساليب الداخلية سس.

أنا لا أريد استخدام مكتبة أخرى، لأنني أريد أن أعرف المزيد عن سيمد وتصميم البرمجيات على نطاق واسع. ولكن أمثلة المكتبة هي موضع ترحيب.

ملاحظة: هذه ليست مشكلة حقيقية أكثر مسألة التصميم.




Links