Design: الحساب بالحمل

تم إنشاؤها على ٢٨ مارس ٢٠١٧  ·  7تعليقات  ·  مصدر: WebAssembly/design

(هذه نسخة موسعة من المشكلة (https://github.com/WebAssembly/spec/issues/446))

يتطلب الحساب متعدد الدقة معالجة خاصة. هذا متاح في شكل ما في جميع ISAs ، ولكن غير متوفر حاليًا في webasm.

هناك ثلاث طرق أساسية للقيام بذلك (يبدو لي) ، ولا أحد منها مقبول بشكل خاص في سياق التصميم الحالي:

الخيار 1. إضافة سجل أعلام خاص ، جنبًا إلى جنب مع التعليمات التي تقوم بالحسابات مع هذا السجل.

هذا هو النهج التقليدي في الأجهزة السائدة.

تحصل على تعليمات مثل

العنوان

والتي ستضيف رقمين ، وقيمة علامة الحمل ، وتعيين علامة الحمل على النتيجة.

هذا ليس لطيفا لأنه يضيف سجلا خاصا.

الخيار 2.
دعم شكل من أشكال الحساب 60 بت مع 4 بت للأعلام.

الخيار 3.
دعم الحساب متعدد الكلمات: تأخذ الإضافة 3 وسيطات وتنتج ناتجين.

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

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

التعليق الأكثر فائدة

هل كان هناك أي تقدم في هذه القضية؟ هناك حاجة إلى حمل واستعارة لتنفيذ التشفير الحديث (مثل SIDH) بكفاءة. إضافة عدد كبير بدون ADDC هي عدة عوامل أبطأ من مع. الأمر نفسه ينطبق على الطرح والضرب.

ال 7 كومينتر

يبدو لي أنه بالنسبة للخيار 3 هناك تحسينات معقولة من شأنها أن تجعل هذا عمليًا. لنفترض أن {i32، i64} .addc يأخذ ثلاثة مدخلات ، op2 في الأعلى ، op1 أدناه ، يحمل في الأسفل وينتج مخرجات ، ينتج عنها في الأعلى وتحمل أسفلها. من أجل الجدل ، افترض أن عملية النقل هي دائمًا من نفس نوع المعاملات الأخرى. حدد addc فقط لاستخدام البت المنخفض للحمل ولحمل اليسار بعد العملية ليكون صفرًا أو واحدًا. تم إعداد الأشياء الآن بشكل معقول لإضافة متعددة الكلمات ، على سبيل المثال. في حلقة غير متحكم فيها بشكل مناسب ، يجب أن يكون مترجم JIT / Wasm قادرًا حقًا على رؤية أن الحمل هو الذي يتم نشره ، وأن ينشئ رمزًا جيدًا. (وإذا لم تكن الحلقة غير مسجلة ، فإن الحمل الزائد للحلقة سيخفف من استخراج / إدخال الحمل على أي حال.) أعتقد أن الكود الخالي من الفروع الأسوأ لاستخراج الحمل يجب أن يكون mov rd, 0; adc rd, 0 ؛ للإدراج ، شيء مثل and rc, 1; add rc, ~0 حيث rc عبارة عن سجل يحتوي على قيمة يتم التعامل معها على أنها عملية نقل.

في ARM ، يكون استهلاك حقيبة منفصلة عن إنتاج حمل: تستهلك ADC ، وتستهلك ADC.S وتنتج ، وتنتج ADD.S فقط. هل نريد كل هذه المتغيرات؟ وماذا عن الفائض؟

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

هل هناك شخص على استعداد لدعم هذا الاقتراح؟ سنحتاج إلى دلالات مقترحة ، وتشفير ثنائي ، وأود على الأقل على الأقل من حالات الاستخدام وتنفيذ بأرقام أداء لحالات الاستخدام هذه (قارن MVP WebAssembly الحالي ، مع هذه الإضافة المقترحة ، والكود الأصلي).

من حيث المبدأ ، سأكون على استعداد لمناصرة هذا الأمر.
ومع ذلك ، فإن التغييرات الشخصية تعني أن لدي موارد محدودة على الأقل للأشهر القليلة القادمة.
———
فرانك مكابي
مهندس برمجيات أول
الهاتف: 650-740 6673 | البريد الإلكتروني: [email protected] [email protected]
Instart Logic | 450 لامبرت افي ، بالو ألتو ، كاليفورنيا 94306 | instartlogic.com http://instartlogic.com/

في 11 مايو 2017 ، الساعة 10:14 صباحًا ، كتب JF Bastien [email protected] :

هل هناك شخص على استعداد لدعم هذا الاقتراح؟ سنحتاج إلى دلالات مقترحة ، وتشفير ثنائي ، وأود على الأقل على الأقل من حالات الاستخدام وتنفيذ بأرقام أداء لحالات الاستخدام هذه (قارن MVP WebAssembly الحالي ، مع هذه الإضافة المقترحة ، والكود الأصلي).

-
أنت تتلقى هذا لأنك قمت بتأليف الموضوع.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو قم بعرضها على GitHub https://github.com/WebAssembly/design/issues/1021#issuecomment-300856161 ، أو كتم صوت الموضوع https://github.com/notifications/unsubscribe-auth/ADfCzd9le4ufXm6DSsArpfXCYsGdV4M5Iks .

من المحتمل أن يكون لدي وقت لأخصصه لهذا الأمر ، ولكن ليس كثيرًا حتى يونيو أو نحو ذلك ، ثم في الخريف. تعد هذه الوظيفة في IMO مهمة إلى حد ما ، وأعتقد أن علامة تجاوز السعة لا تقل أهمية عن علامة الحمل على الرغم من حالات الاستخدام المختلفة (Fixnum للغات الديناميكية -> انتقال bignum).

ناقش هذا الأمر مع بعض قوم موزيلا اليوم. باختصار:

  • ربما نريد تعليمات مخصصة هنا لأن محاكاة السلوك ستكون بطيئة ولا نريد عمومًا إجراء مطابقة نمط سحرية للتعرف على المحاكاة وتحويلها إلى رمز آلة فعال خلف الكواليس
  • نحن نهتم بالحمل / الاستعارة والفيضان ، بالتأكيد ؛ أعلام أخرى TBD
  • نحن نهتم بالجمع والطرح بالتأكيد ؛ الضرب والقسمة والتدوير (التدوير من خلال الحمل أمر شائع ولكن هل هو مفيد لـ Wasm؟)
  • الحالة الشائعة هي أننا نهتم فقط بعلم واحد في كل مرة وربما يكون من المناسب تغطية هذه الحالة ، وليس حالة عامة "التقاط أعلام A و B و C"
  • للحمل ، تكون التعليمات التي تستهلك دائمًا حقيبة يد وتنتج دائمًا تنفيذًا كافية ؛ المتغيرات التي تستهلك ولكن لا تنتج أو العكس ليست ضرورية ، وعدم وجودها ربما لن يؤثر على ناتج مترجم جيد
  • نريد تحفيز هذا العمل ببيانات من مكتبات MP الجيدة الموجودة (مثل Gnu MP) ؛ قد تكون هذه حقائق (لا تحتوي المكتبة X / لا تحتوي على إجراءات فرعية للمجمع أو تستخدم عناصر مادية للاستفادة من العلامات ؛ تستخدم التعليمات A و B) أو بيانات الأداء (يمكن للمكتبة Y استخدام إجراءات فرعية للمجمع أو محاكاة في C ؛ فرق الأداء هو N٪ ) أو حالات الاستخدام (الحساب العام ، التشفير ، أي شيء آخر يتبادر إلى الذهن)
  • قد نرغب في الانتظار مع اقتراح تعليمات محددة حتى نبدأ في مناقشة تعليمات إنتاج قيم متعددة بشكل عام ، على سبيل المثال ، عوائد متعددة القيم

هل كان هناك أي تقدم في هذه القضية؟ هناك حاجة إلى حمل واستعارة لتنفيذ التشفير الحديث (مثل SIDH) بكفاءة. إضافة عدد كبير بدون ADDC هي عدة عوامل أبطأ من مع. الأمر نفسه ينطبق على الطرح والضرب.

أعتقد أننا على الأقل ننتظر الانتهاء من القيم المتعددة حتى نتمكن من التعبير بسهولة عن عملية بأكثر من نتيجة واحدة. متعدد القيم "على وشك الانتهاء".

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات