تنسيق الفاصلة العائمة بنصف الدقة

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

تتبع معظم الاستخدامات الحديثة معيار آي تربل إي 754 المنقح، حيث يُشار إلى تنسيق 16-بت باسم بيناري16، ويستخدم الأسّ 5 بتات. يمكن لهذا التنسيق التعبير عن قيم ضمن النطاق ±65,504، مع أصغر قيمة أكبر من 1 تساوي 1 + 1/1024.

اعتمادًا على الحاسوب، يمكن أن تكون الدقة النصفية أسرع بأكثر من مرتبة من حيث الأداء مقارنة بالدقة المضاعفة؛ على سبيل المثال، 550 بيتافلوبس للدقة النصفية مقابل 37 بيتافلوبس للدقة المضاعفة على إحدى خدمات الحوسبة السحابية.

 التاريخ 
ظهرت عدة تنسيقات سابقة للفاصلة العائمة بدقة 16-بت، منها تنسيق معالج الإشارات الرقمية HD61810 من شركة هيتاشي عام 1982 (يتكون من 4 بتات للأسّ و12 بتًا للقيمة الفعلية)، وتنسيق WIF لتوماس جي. سكوت عام 1991 (5 بتات للأسّ و10 بتات للقيمة الفعلية)، وتنسيق شركة ثري دي إف إكس إنترأكتف عام 1995 (بنفس مواصفات تنسيق هيتاشي).

كانت شركة إندستريال لايت آند ماجيك تبحث عن تنسيق للصور يمكنه التعامل مع نطاق ديناميكي واسع، لكن دون التكلفة العالية من حيث الذاكرة وسعة التخزين كما هو الحال في الفاصلة العائمة ذات الدقة المفردة أو المضاعفة. في عام 1997، استخدم فريق التظليل القابل للبرمجة والمعجل عتاديًا بقيادة جون إيري في شركة سيليكون غرافيكس نوع البيانات s10e5 كجزء من مشروع تصميم يُدعى "بالي". وقد وُصف ذلك في ورقة علمية نُشرت في مؤتمر سيغراف عام 2000 (انظر القسم 4.3) وتم توثيقه كذلك في براءة الاختراع الأمريكية رقم 7518615. وقد اكتسب هذا التنسيق شهرة من خلال استخدامه في تنسيق الصور مفتوح المصدر أوبن إكس آر.

قامت شركتا إنفيديا ومايكروسوفت بتعريف نوع البيانات نصف في لغة سي جي، التي أُطلقت مطلع عام 2002، وجرى تنفيذها عتاديًا في بطاقة جي فورس إف إكس الرسومية التي أُصدرت أواخر عام 2002. ومع ذلك، أزالت إنفيديا لاحقًا الدعم العتادي للفاصلة العائمة ذات 16-بت، قبل أن تعيد إدراجه في وحدة معالجة الرسومات المحمولة تيجرا عام 2015.

أُدرج امتداد F16C في عام 2012 لتمكين معالجات x86 من تحويل القيم ذات الدقة النصفية إلى القيم ذات الدقة المفردة وبالعكس باستخدام تعليمة آلة خاصة.

 تنسيق IEEE 754 للفاصلة العائمة النصفية الثنائية: بيناري16 

يُحدد معيار IEEE 754 تنسيق بيناري16 على النحو التالي:
 بت الإشارة: 1 بت
 عرض رفع أسي: 5 بتات
 ساينيفيكاند أو رقم ذو أهمية: 11 بت (10 بتات تُخزّن صراحةً)

يُعرض التنسيق بالشكل التالي:

ملف:IEEE 754r Half Floating Point Format.svg

يُفترض أن يكون للتنسيق خانة أولى ضمنية ذات قيمة 1، ما لم يكن حقل الأسّ مكوَّنًا بالكامل من أصفار. وبالتالي، تظهر فقط 10 بتات من ساينيفيكاند في التمثيل في الذاكرة، لكن إجمالي الدقة هو 11 بتًا. في مصطلحات IEEE 754، يوجد 10 بتات لقيمة الساينيفيكاند، لكن الدقة الإجمالية للـ ساينيفيكاند هي 11 بتًا (log10(211) ≈ 3.311 من الأرقام العشرية، أو 4 أرقام تقريبًا ± أقل قليلًا من 5 وحدات في الرقم الأخير).

 ترميز الأس 
يُشفّر الأس في الفاصلة العائمة ذات الدقة النصفية باستخدام تمثيل ضارب تسلسلي، بحيث يكون الانزياح الصفري هو 15؛ ويُعرف أيضًا باسم انحياز الأس في معيار IEEE 754.
 Emin = 000012 − 011112 = −14
 Emax = 111102 − 011112 = 15
 رفع أسي = 011112 = 15

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

يُفسّر الرقمان المخزّنان 000002 و111112 بطريقة خاصة.

 الأس  رقم ذو أهمية = صفر  رقم ذو أهمية ≠ صفر  المعادلة   000002  0، علامة الصفر  أعداد شبه طبيعية  (−1)بت الإشارة × 2−14 × 0.البتات الهامة2   000012, ..., 111102  قيمة مُطبَّعة  (−1)بت الإشارة × 2الأس−15 × 1.البتات الهامة2   111112  ±لانهاية  NaN (صامتة أو إشارية)   

أصغر قيمة موجبة (شبه طبيعية) هي
2−24 ≈ 5.96 × 10−8.
أصغر قيمة موجبة مُطبَّعة هي 2−14 ≈ 6.10 × 10−5.
أكبر قيمة قابلة للتمثيل هي (2−2−10) × 215 = 65504.

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

 ثنائي  سداسي عشري  القيمة  ملاحظات                 أصغر عدد شبه طبيعي موجب         أكبر عدد شبه طبيعي         أصغر عدد مُطبَّع موجب         أقرب قيمة إلى 1/3         أكبر عدد أقل من واحد         العدد واحد         أصغر عدد أكبر من واحد         أكبر عدد مُطبَّع         اللانهاية                       اللانهاية السالبة  

بشكل افتراضي، يُقرّب 1/3 إلى الأسفل كما هو الحال في تنسيق الفاصلة المتحركة مزدوج الدقة، وذلك بسبب العدد الفردي للبتات في الجزء الهام. البتات بعد نقطة التقريب هي ...، وهي أقل من 1/2 من الوحدة في الخانة الأخيرة.

 القيود المتعلقة بالدقة 
 الحد الأدنى  الحد الأقصى  الفاصل 0  2−13  2−24 2−13  2−12  2−23 2−12  2−11  2−22 2−11  2−10  2−21 2−10  2−9  2−20 2−9  2−8  2−19 2−8  2−7  2−18 2−7  2−6  2−17 2−6  2−5  2−16 2−5  2−4  2−15 2−4    2−14     2−13     2−12   1  2−11 1  2  2−10 2  4  2−9 4  8  2−8 8  16  2−7 16  32  2−6 32  64  2−5 64  128  2−4 128  256   256  512   512  1024   1024  2048  1 2048  4096  2 4096  8192  4 8192  16384  8 16384  32768  16 32768  65520  32 65520  ∞  ∞

تُقرب القيمة 65520 وما فوق إلى اللانهاية. ينطبق هذا في حالة التقريب إلى الزوجي (round-to-even)؛ أما استراتيجيات التقريب الأخرى فقد تُغيّر هذا الحد الفاصل.

 بديل ARM للدقة النصفية 
تدعم معالجات ARM (عبر خانة في سجل التحكم بالنقطة العائمة) تنسيق "بديل للدقة النصفية"، والذي يُلغي الحالة الخاصة لقيمة الأس في حالة 31 (111112).
وهو يكاد يكون مطابقًا لتنسيق IEEE، باستثناء أنه لا توجد ترميزات لللانهاية أو القيم غير الرقمية (NaNs)؛ بل يُستخدم الأس 31 لترميز الأعداد المُطبَّعة ضمن النطاق 65536 إلى 131008.

 استخدامات الدقة النصفية 
تُستخدم الدقة النصفية في عدة بيئات رسوميات حاسوبية لتخزين البكسلات، بما في ذلك ماتلاب، أوبن إكس آر، JPEG XR، برنامج جنو لمعالجة الصور، مكتبة الرسوميات المفتوحة، فولكان, سي جي، دايركت ثري دي، وD3DX.
الميزة مقارنة بالأعداد الصحيحة ذات 8 أو 16 بت هي أن النطاق الديناميكي الأوسع يسمح بالحفاظ على مزيد من التفاصيل في الإضاءات والظلال في الصور، ويجنب الحاجة إلى تصحيح غاما. أما الميزة مقارنة بتنسيق النقطة العائمة ذي 32-بت الدقة الأحادية فهي تقليل استهلاك التخزين وعرض النطاق إلى النصف (على حساب الدقة والنطاق).

يمكن أن تكون الدقة النصفية مفيدة في كمّ شبكة المضلعات.
عادةً ما تُخزن بيانات الشبكة باستخدام أعداد نقطية عائمة بدقة أحادية (32-بت) للرؤوس، لكن في بعض الحالات يكون من المقبول تقليل الدقة إلى 16-بت فقط، ما يتطلب نصف مساحة التخزين مقابل بعض الخسارة في الدقة.
ويمكن أيضًا كمّ الشبكات باستخدام دقة ثابتة من 8-بت أو 16-بت حسب المتطلبات.

تميل أجهزة وبرمجيات تعلم الآلة أو الشبكة العصبية إلى استخدام الدقة النصفية: فمثل هذه التطبيقات تُجري عادةً كمًا هائلًا من العمليات الحسابية، لكنها لا تتطلب دقة عالية.
ونظرًا لأن الأجهزة لا تدعم عادةً الأعداد العائمة بدقة نصفية (16-بت)، تستخدم الشبكات العصبية غالبًا تنسيق bfloat16، وهو تنسيق النقطة العائمة ذي الدقة الأحادية بعد تقطيعه إلى 16-بت.

إذا كانت العتاديات تحتوي على تعليمات لمعالجة العمليات الحسابية بدقة نصفية، فإنها غالبًا ما تكون أسرع من الدقة الأحادية أو المضاعفة. وإذا كان النظام يدعم تعليمات تعليمات وحيدة بيانات متعددة التي تتعامل مع عدة أعداد عائمة في تعليمة واحدة، فإن الدقة النصفية قد تكون أسرع بمرتين من خلال معالجة عدد مضاعف من القيم في آنٍ واحد.

 دعم لغات البرمجة 
تدعم زيغ الدقة النصفية عبر النوع f16.

أدخلت نواة دوت نت الإصدار 5 دعم الأعداد العائمة ذات الدقة النصفية عبر نوع المكتبة القياسية System.Half. اعتبارا من يناير 2024، لا توجد لغة من لغات .نت مثل سي شارب، إف شارب، فيجوال بيسك دوت نت، وسي++ تحتوي على ثابت عددي لهذا النوع (مثلًا في C#، 1.0f يكون من نوع System.Single أو 1.0m من نوع System.Decimal) أو على كلمة مفتاحية مخصصة له.

أدخلت سويفت الأعداد العائمة ذات الدقة النصفية في سويفت 5.3 باستخدام النوع Float16.

أوبن سي أل يدعم أيضًا الأعداد العائمة بنصف الدقة باستخدام نوع البيانات half وفقًا لتنسيق التخزين نصف الدقة IEEE 754-2008.

، تعمل رست (لغة برمجة) حاليًا على إضافة نوع جديد f16 لأعداد الفاصلة العائمة بنصف الدقة 16-بت وفق معيار IEEE.

توفر جوليا (لغة برمجة) دعمًا للأعداد العائمة بنصف الدقة باستخدام النوع Float16.

قدم سي++ دعمًا لنصف الدقة منذ معيار C++23 مع النوع std::float16_t. وتقوم مجموعة مصرفات جنو بتنفيذ الدعم له بالفعل.

 دعم الأجهزة 
تدعم عدة نسخ من معمارية آرم نصف الدقة.

يتم تحديد دعم التحويلات باستخدام أعداد نصف الدقة في إكس 86 مجموعة تعليمات ضمن امتداد مجموعة التعليمات F16C، والذي تم تقديمه لأول مرة عام 2009 من قبل AMD وتبناه بشكل واسع معالجات AMD وIntel بحلول 2012. وتم توسيع هذا الدعم لاحقًا ضمن امتداد مجموعة تعليمات AVX-512_FP16 الذي نُفذ في معالج سافير رابيدز من إنتل.

في ريسك-فايف، توفر تعليمات Zfh وZfhmin دعمًا للأجهزة لأعداد نصف الدقة 16-بت. وتمثل Zfhmin امتدادًا بديلاً مصغرًا لـZfh.

على باور آي إس أيه، توفر في إس إكس وامتداد SVP64 (غير الموافق عليه بعد) دعمًا للأعداد العائمة نصف الدقة 16-بت ابتداءً من PowerISA v3.1B وما بعدها.

يدعم آي بي إم زد نصف الدقة ضمن مرفق معالجة الشبكات العصبية الذي قدمته شركة آي بي إم مع معالج تيلوم. وتسمي IBM بيانات الأعداد العائمة بنصف الدقة NNP-Data-Type 1 (16-بت).

 انظر أيضًا 
 أي إي إي إي 754: المعيار IEEE لعمليات الأعداد العائمة
 أنواع البيانات الأولية

 المراجع 

 قراءة إضافية 
 تنسيق الأعداد العائمة 16-بت الموقع الرسمي لـ Khronos Vulkan

 وصلات خارجية 
 Minifloats (في Survey of Floating-Point Formats)
 موقع OpenEXR
 ثوابت نصف الدقة من دي ثري دي إكس
 معالجة نصف الدقة في OpenGL
 تحويلات سريعة للأعداد نصف الدقة
 نسخة Analog Devices (أسس بأربع بتات)
 كود مصدر C للتحويل بين الدقة المزدوجة، المفردة، ونصف الدقة وفق IEEE
 كود Java للتحويل بين الأعداد العائمة نصف الدقة
 نصف الدقة كميزة موسعة في GCC

تصنيف:حسابيات ثنائية