سؤال

لقد كنت أعمل مع بعض الأصدقاء لتحويل خوارزمية جينية Matlab إلى C ++ ويعمل في ترتيب متتابع حاليا. Matlab لم يعد جزءا من الكود الحالي لدينا.

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

لدينا حاليا إعداد صفائف ثنائية الأبعاد و 3D مع البيانات فيها وعندما يقوم النظام بعمل CrossOver أو تبادل بين النماذج التي تحاول فقط تبديل أجزاء من صفيف 2D و 3D. ما هي بعض الطرق الجيدة لفصل هذه الهياكل عبر العقد المتعددة؟

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

المحلول

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

كنت أوصي بشدة كتاب Golub و Van Lock، "حسابات مصفوفة، ED 3RD". في ذلك هناك فصل كامل مكرس للحسابات الموازية (الفصل 6).

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

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

نصائح أخرى

حساب اللياقة:

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

عبور:

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

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