سؤال

كنت أتساءل أي أنواع عدد صحيح أو تعويم هي الأسرع ..
كنت أفكر بايت أسرع من عدد صحيح لأنه يحتوي على مجموعة أصغر.
أخبرني بعض الناس أن عدد صحيح في بعض الحالات أسرع من البايت.

السؤال الثاني :
GPU في طريقه إلى الهيمنة العالمية ..
لذلك سألت نفسي: يمكن أن يكون مزدوج "أسرع" من عدد صحيح .. بسبب FPU
فأين الخبراء؟ :)

هل كانت مفيدة؟

المحلول

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

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

نصائح أخرى

كنت أفكر بايت أسرع من عدد صحيح لأنه يحتوي على مجموعة أصغر.

شيء أختبره: باستخدام short أعطاني أداء ضرب في حين يستخدم int كان على ما يرام. هذا لأنه، لا توجد السراويل عادة في الهندسة المعمارية. إنها أنواع الراحة. يعمل المعالج فعلا مع حجم Word. في حالتي، كان حجم الكلمة ذلك من INT. لذلك، عند الوصول إلى القصير، كان عليه أن يحزم القيمة في INT أولا، والعمل معها، ثم قم بفك ذلك ونحصلني على النتيجة قصيرة. كل ما أسفرت عن ضرب الأداء. لذلك، أقصر ليس أفضل بالضرورة.

هذا يعتمد على عدد من مواقع البيانات في الهندسة المعمارية. سوف يعالج معالج النقطة العائمة تعويم ومؤديا عند القيام بحسابات. كلاهما يتم تقييمه بدقة 80 بت وسوف يستغرق نفس الوقت من الوقت. قد تحدث تحميل وحفظ القيم في سجلات FPU فرقا. يأخذ المزدوج ضعف المسافة في ذاكرة الوصول العشوائي، وبالتالي قد يكون أبطأ بسبب مخبأ يخطئ. ملحوظ إذا كان لديك صفائف كبيرة تميل إلى الفهرس بشكل عشوائي.

على مستوى وحدة المعالجة المركزية، لا توجد بايت، فقط الكلمات، والتي هي 32 بت أو 64 بت في الوقت الحاضر. عادة ما تكون الوحدات الحسابية عادة ما تكون قوية للتعامل مع أرقام الحجم (أو أكبر، في حالة النقطة العائمة).

لذلك لا توجد ميزة السرعة في استخدام أنواع أصغر من الكلمة فيما يتعلق بالعمليات الحسابية، وقد تكون هناك عقوبة سرعة لأنك يتعين عليك القيام بعمل إضافي من أجل محاكاة الأنواع التي لا تملك وحدة المعالجة المركزية أصلا، مثل كتابة واحدة يتطلب منك بايت للذاكرة أولا قراءة الكلمة التي تعد جزءا منها وتعديلها ثم اكتبها مرة أخرى. من أجل تجنب ذلك، سيستخدم معظم المترجمين في الواقع كلمة كاملة من الذاكرة لجميع المتغيرات الأصغر، لذا فإن المتغير المنطقي يشغل 32 أو 64 بت.

ومع ذلك، إذا كان لديك كمية كبيرة من البيانات، مثل صفيف كبير، فإن استخدام أنواع أصغر سيعود عادة أداء أفضل لأن سيكون لديك تفويت أقل من ذاكرة التخزين المؤقت.

يعتمد طول البايت لأنواع رقمية على اللغة وأحيانا أيضا النظام الأساسي الذي تستخدمه. على سبيل المثال في Java كل من Int و Float استخدم 4 بايت، لذلك يجب أن يكون وقت المعالجة متساويا. سوف يفاجئني رغم أن الأنواع الأطول تعالج بشكل أسرع. إذا كان هناك دليل على أنني أود أن أقرأ عن ذلك.

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

حول Integer vs.ublel: قد يكون GPU يقوم GPU بحرصي أسرع مع الزوجي ثم وحدة المعالجة المركزية العادية، لكنني أشك في أنه يقوم بحساب مزدوج بشكل أسرع ثم عدد صحيح، لأن الحساب الصحيحة يسجل فقط الحساب.

أكبر تحسين يمر من استخدام حسابات العددية المحاورة، لاستخدام حسابات المتجهات. ثم الاستفادة من GPU أو CPU's SSE.

حسنا، طالما أنك لا تفعل أي تحسينات ناقلات، يمكنك استخدام أعداد صحيحة كبيرة مثل سجلاتك (32/64 بت) دون أي أداء حقيقي.

تختلف أرقام النقطة العائمة قليلا: بينما يتم تحسين وحدة المعالجة المركزية للمضاعفين، عادة ما تعمل GPUs مع العوامات.

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