فوثارك (لغة برمجة)

فوثارك هي لغة برمجة متعددة الأنماط ، عالية المستوى ، وظيفية ، متوازية البيانات ، ومُخصصة للمصفوفات . وهي لهجة من لغة ML ، طُوّرت في الأصل في قسم علوم الحاسوب بجامعة كوبنهاغن (DIKU) كجزء من مشروع HIPERFIT. [ 2 ] تركز فوثارك على تمكين تنفيذ البرامج المتوازية للبيانات المكتوبة بأسلوب وظيفي بكفاءة عالية على أجهزة متوازية ضخمة ، وخاصة وحدات معالجة الرسومات (GPUs). تستلهم فوثارك بشكل كبير من NESL ، ويستخدم تطبيقها صيغة معدلة من تحويل التسطيح ، لكنها تفرض قيودًا على كيفية التعبير عن التوازي لتمكين تحسينات أكثر فعالية للمُصرّف. على وجه الخصوص، لا تدعم فوثارك التوازي غير المنتظم للبيانات المتداخلة. [ 3 ] وهي برنامج مجاني ومفتوح المصدر، مُرخص بموجب ترخيص ISC .

ملخص

فوثارك هي لغة من عائلة لغات ML ، ذات بنية نحوية غير حساسة للمسافات البادئة، مشتقة من لغات OCaml و Standard ML و Haskell . يعتمد نظام أنواعها على نظام أنواع هيندلي-ميلنر مع مجموعة متنوعة من الإضافات، مثل أنواع التفرد والأنواع المعتمدة على الحجم . لا تُصمم فوثارك كلغة برمجة عامة لكتابة تطبيقات كاملة، بل تركز على كتابة نوى حسابية (ليست بالضرورة هي نفسها نواة وحدة معالجة الرسومات ) يتم استدعاؤها من تطبيقات مكتوبة بلغات تقليدية. [ 4 ]

سُميت الأبجدية الرونية (فوثارك) نسبةً إلى الأحرف الستة الأولى من الأبجدية الرونية . [ 5 ] : 2

أمثلة

منتج نقطي

يقوم البرنامج التالي بحساب حاصل الضرب النقطي لمتجهين يحتويان على أرقام ذات دقة مزدوجة.

def dotprod xs ys = f64 . sum ( map2 ( * ) xs ys ))

ويمكن كتابتها أيضاً بشكل مكافئ مع تحديدات صريحة للأنواع كما يلي.

دالة dotprod [ n ] ( xs : [ n ] f64 ) ( ys : [ n ] f64 ) : f64 = f64.sum ( map2 ( * ) xs ys ) )

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

ضرب المصفوفات

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

دالة matmul [ n ][ m ][ p ] ( A : [ n ][ m ] f64 ) ( B : [ m ][ p ] f64 ) : [ n ][ p ] f64 = map ( \ A_row -> map ( \ B_col -> dotprod A_row B_col ) ( transpose B )) A

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

مراجع

  1. "الترخيص" . futhark-lang.org . تاريخ الاسترجاع: 26 مارس 2023. تم التطوير في DIKU
  2. "الرئيسية" . hiperfit.dk .
  3. هنريكسن، ترولز؛ سيروب، نيلز جي دبليو؛ إلسمان، مارتن؛ هينجلين، فريتز؛ أوانسيا، كوزمين (2017). "فوثارك: برمجة وظيفية بحتة لوحدات معالجة الرسومات مع التوازي المتداخل وتحديثات المصفوفات في مكانها" (ملف PDF) . وقائع المؤتمر الثامن والثلاثين لجمعية ACM SIGPLAN حول تصميم لغات البرمجة وتنفيذها . PLDI 2017. ACM.
  4. "دليل مستخدم Futhark" . futhark.readthedocs.io .
  5. ترولز، هنريكسن (نوفمبر 2017). تصميم وتنفيذ لغة برمجة فوثارك (ملف PDF) (أطروحة دكتوراه). جامعة كوبنهاغن . تاريخ الاسترجاع: 25 مايو 2024 .