كيفية إنشاء كتلة لينكس لتشغيل المحاكاة الفيزياء في جافا ؟

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

سؤال

أنا النامية العلمي تطبيق المستخدمة إلى تنفيذ المادية المحاكاة.الخوارزميات المستخدمة هي O(n3) ، لذلك على مجموعة كبيرة من البيانات يستغرق وقت طويل جدا لهذه العملية.التطبيق يعمل محاكاة في حوالي 17 دقيقة و لدي لتشغيل حوالي 25 ، 000 المحاكاة.أن حوالي سنة واحدة من وقت المعالجة.

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

هناك حلول متعددة أستطيع أن أرى لتنفيذ هذا:

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

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

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

تحرير:كما معلومات إضافية ، أنا مهتم في كيفية تنفيذ شيء مثل الموضحة في هذه المقالة من مجلة وايرد: العلمية استبدال العملاق مع بلاي ستيشن 3 لينكس العنقودية.قاطع عدد اثنين يبدو وكأنه وسيلة للذهاب...ولكن عامل البرودة.

تحرير 2:حساب جدا منضم CPU.في الأساس هناك الكثير من العمليات على المصفوفات ، مثل معكوس و الضرب.حاولت أن ابحث عن أفضل الخوارزميات هذه العمليات ولكن حتى الآن لقد وجدت أن عمليات أحتاج 0(n3) (في المكتبات التي تتوفر عادة).مجموعة البيانات كبيرة (هذه العمليات) ، ولكن يتم إنشاؤه على العميل استنادا إلى معلمات الإدخال.


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

لذا فإن السؤال يصبح حقا, كما لا يوجد شيء مثل رقم 3 في:ما هي أفضل طريقة لإنشاء متفاوت جافا التطبيق ؟

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

المحلول

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

http://www.jppf.org/

نصائح أخرى

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

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

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

يجب أن تحقق Hazelcast, وأبسط peer2peer (لا مركزية server) تجميع الحل جافا.محاولة Hazelcast توزيع ExecutorService تنفيذ التعليمات البرمجية الخاصة بك على الكتلة.

التحيات ،

-talip

لقد سبق أن اقترحت ذلك ، ولكن استبعد ذلك:متعددة النوى.هل يمكن أن تذهب ل متعددة النواة ، إذا كان لديك ما يكفي من النوى.واحد ساخنا أجهزة الصراف الآلي GPGPU الحوسبة.Esp.NVIDIAs CUDA جدا priomising النهج إذا كان لديك العديد من المهام المستقلة التي يجب أن تفعل نفس الحساب.GTX 280 يسلم لك 280 النوى ، والتي يمكن أن تحسب تصل إلى 1120 - 15360 المواضيع simultanously .زوج منهم يمكن أن يحل المشكلة.إذا كان حقا للتنفيذ يعتمد على خوارزمية (تدفق البيانات مقابلالتحكم في التدفق) ، لأن كل العددية المعالجات تعمل في SIMD الموضة.

العيب:سيكون من C/C++, جافا لا

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

AFAIK المجموعات عادة لا تعامل على أنها كيان واحد.وعادة ما يعامل منفصلة العقد المبرمجة مع أشياء مثل MPI و SCALAPACK توزيع عناصر المصفوفات على عدة عقد.هذا لا يساعد حقا لك كل ذلك بكثير إذا كانت البيانات الخاصة بك يناسب في الذاكرة على عقدة واحدة على أي حال.

هل نظرت في الطين?

من أجل توزيع العمل سوف تحتاج إلى استخدام ماجستير/عامل إطار.

قبل عشر سنوات ، فإن الشركة عملت نظرت مماثل الافتراضية الحل الشمس الرقمي HP كل الدعم في ذلك الوقت ، ولكن فقط مع دولة من بين الفن أجهزة الكمبيوتر العملاقة مع الأجهزة hotswap وما شابه ذلك.ومنذ ذلك الحين, لقد سمعت لينكس يدعم نوع من المحاكاة الافتراضية كنت تبحث عن حل #3, ولكن لم يسبق لي استخدامه نفسي.

جافا الأوليات و الأداء

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

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