متى يجب التبديل من قوائم غير مرتبة إلى قوائم فرزها؟ [الاقوي

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

  •  12-09-2019
  •  | 
  •  

سؤال

يجب أن أقوم بتنفيذ خوارزمية لتحلل وحدات تخزين ثلاثية الأبعاد في Voxels. تبدأ الخوارزمية بتحديد القوالب الموجودة في كل جانب من خطة القطع وفي خطوة ثانية ترقد حافة خطة القطع.

يمكن تحسين هذه العملية باستخدام فائدة القائمة الفرز. تحديد نقطة الانقسام هو o log (n). ولكن لا بد لي من الحفاظ على قائمة واحدة من هذا القبيل لكل محور وهذا للتقدم والحواف. نظرا لأن هذا سيتم تنفيذه لاستخدامه بواسطة GPU لدي أيضا بعض القيود على إدارة الذاكرة (أي CUDA). يتم فرض أقراص / أشجار / أشجار تدخلية.

مع "Voxelization" كاملة أتوقع أن ينتهي به مع ~ 4000 نقطة، و 12000 حواف. لحسن الحظ، يمكن تحسين هذا باستخدام استراتيجية أكثر ذكاء للتخلص من Voxels المعالجة وطلب وحدات التخزين المتبقية القطع للحفاظ على عددهم إلى الحد الأدنى. في هذه الحالة، أتوقع أن يكون لديك أقل من 100 نقطة و 300 حواف. هذا يجعل العملية أكثر تعقيدا للإدارة ولكن يمكن أن ينتهي بك الأمر أكثر كفاءة.

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

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

المحلول

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

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

تعقيد هياكل البيانات يهم فقط إذا كانوا لا تستطيع يتم فرزها بطريقة مفيدة. إذا كان يمكن فرزها، فسيتعين عليك الذهاب من خلال مزرائها

عدد الوصول: عدد التغييرات

لتحديد ما إذا كانت الفرز فكرة جيدة.

نصائح أخرى

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

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

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

بما أنني اضطررت إلى اختيار إجابة واحدة اختارت devinb لأنه يجيب على السؤال، لكن تعليق سيمون، مدعومة من قبل Tobias Warre التعليق، كانت قيمة بالنسبة لي.

شكرا لكم جميعا لمساعدتي في فرز هذه المشكلة. Stack Overflow هي خدمة رائعة.

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