أتيجي بي إكس
أتيجي بي إكس هي إضافة للغة جافا ، مصممة للبرمجة كائنية التوجه . تهدف إلى تسهيل الحوسبة المتوازية على المعالجات متعددة النوى ، ووحدات معالجة الرسومات ، وشبكات الحوسبة الشبكية، والحوسبة السحابية. [ 1 ] [ 2 ] ويبدو أنها لم تعد تُحدَّث. [ 3 ]
يمكن دمج Ateji PX مع بيئة التطوير المتكاملة Eclipse ، ويتطلب الحد الأدنى من تعلم البنى المتوازية الإضافية ولا يغير عملية التطوير.
أمثلة على التعليمات البرمجية
مرحبا بالعالم
public class HelloWorld { public static void main ( String [] args ) { [ || System . out . println ( "Hello" ); || System . out . println ( "World" ); ] } }يُشير كل ||رمز إلى فرع متوازٍ. سيؤدي تشغيل هذا البرنامج إلى طباعة إما
مرحبًا عالم
أو
عالم مرحبًا
وذلك بحسب كيفية جدولة الفروع المتوازية.
التوازي في البيانات
[ || ( int i : array . length ) array [ i ]++ ; ]تُنشئ عملية التحديد الكمي فرعًا متوازيًا واحدًا لكل قيمة من قيم . ويتمثل تأثير هذا الكود في زيادة جميع عناصر بالتوازي. هذا الكود مكافئ لـ(int i : N)iarray
[ || array [ 0 ]++ ; || array [ 1 ]++ ; ... || array [ array . length - 1 ]++ ; ]توجد إمكانية لإجراء عمليات حسابية أكثر تعقيدًا. يوضح المثال التالي عملية حسابية على المثلث العلوي الأيسر لمصفوفة مربعة:
[ || ( int i : N , int j : N , if i + j < N ) matrix [ i ][ j ]++ ; ]يُطلق على الشيفرة التي تُنفّذ عمليةً مماثلةً، وعادةً ما تكون صغيرة، على مجموعة كبيرة من العناصر اسم البرمجة المتوازية للبيانات ، وتظهر بكثرة في التطبيقات العلمية عالية الأداء. ومن الأمثلة النموذجية على لغات البرمجة المتوازية للبيانات في بيئات C/C++ أو Fortran لغة OpenMP .
يمكن أيضًا تنفيذ ميزات التوازي في البيانات بواسطة المكتبات التي تستخدم هياكل بيانات مخصصة، مثل المصفوفات المتوازية .
التوازي بين المهام
يُستخدم مصطلح التوازي في المهام عندما يمكن تقسيم العمل نظريًا إلى عدد من المهام المنطقية. في هذا المثال، يتم إنشاء المهام بشكل متكرر:
int fib ( int n ) { if ( n <= 1 ) return 1 ; int fib1 , fib2 ; // إنشاء فروع متوازية بشكل متكرر [ || fib1 = fib ( n - 1 ); || fib2 = fib ( n - 2 ); ] return fib1 + fib2 ; }يتم تطبيق التوازي في المهام في لغات مثل Cilk ، وفي مكتبات مشابهة لزوج fork/joinاستدعاءات نظام Unix.
تمرير الرسائل
تتواصل الفروع المتوازية بطريقتين؛ إما عن طريق قراءة وكتابة المتغيرات المشتركة في آنٍ واحد، أو عن طريق إرسال رسائل صريحة. يقوم المعاملان !و ?بإرسال واستقبال رسالة على قناة اتصال، على التوالي.
في هذا المثال، يتواصل فرعان متوازيان عبر تمرير الرسائل الصريح:
Chan <String> chan = new Chan <String> ( ); [ // الفرع 1 يرسل قيمة عبر القناة || chan ! " Hello" ;// يستقبل الفرع 2 قيمة من القناة ويطبعها || chan ? s ; System . out . println ( s ); ]تدفق البيانات
يُقال إن البرنامج يعتمد على تدفق البيانات عندما تبدأ عملية الحساب وتتزامن بتوافر البيانات في تدفق معين. ومن الأمثلة النموذجية على ذلك جهاز الجمع: فهو يحتوي على مدخلين ومخرج واحد، وعندما يكون المدخلان جاهزين، يرسل مجموعهما إلى المخرج.
دالة جمع ( قناة < عدد صحيح > in1 ، قناة < عدد صحيح > in2 ، قناة < عدد صحيح > out ) { for (;;) { int value1 ، value2 ؛ [ in1 ? value1 ؛ || in2 ? value2 ؛ ] ؛ out ! value1 + value2 ؛ }}لاحظ خاصية القراءة المتوازية . هذا يعني أن قيمتي الإدخال يمكن أن تأتيا بأي ترتيب. بدونها، قد يتوقف البرنامج عن العمل إذا جاءت القيم بترتيب خاطئ. هذا يُظهر أن العمليات المتوازية في لغة البرمجة لا تتعلق بالأداء فحسب، بل بسلوك البرامج أيضًا.[ in1 ? value1; || in2 ? value2; ]
لا يقوم الجامع وحده بأي وظيفة، لأنه يتفاعل مع بيانات الإدخال. يجب وضعه ضمن سياق تقوم فيه أجزاء أخرى بتغذية قيم الإدخال وقراءة قيم الإخراج. ويمكن تحقيق ذلك بتجميع جميع الأجزاء في وحدة متوازية كبيرة.
[ || source ( c1 ); // يُولّد قيمًا على c1 || source ( c2 ); // يُولّد قيمًا على c2 || adder ( c1 , c2 , c3 ); || sink ( c3 ); // يقرأ القيم من c3 ]أي شيء يمكن اعتباره مزيجًا من البوابات المنطقية أو الدوائر الكهربائية يمكن التعبير عنه بسهولة بهذه الطريقة كبرنامج لتدفق البيانات.
مراجع
- ↑ https://www.eetimes.com/software-tools-ateji-px-for-java-simplifies-parallel-programming-for-multicores/
- ↑ "أتيجي بي إكس: برمجة جافا المتوازية ببساطة" . أتيجي . مؤرشف من الأصل في 24 فبراير 2014. تم الاطلاع عليه في 1 مارس 2014 .
- ↑ https://surface.syr.edu/cgi/viewcontent.cgi?article=1712&context=etd
روابط خارجية
- لغات البرمجة الكائنية التوجه
- لغات البرمجة المتزامنة
- عائلة لغات البرمجة جافا
- لغات البرمجة ذات الكتابة الثابتة
- لغات برمجة JVM
