قصة أول GPU: Rendition Vérité 1000

صورة

هناك الكثير من الأدبيات الجيدة حول محرك الزلزال: الكتب والمقالات التي لا تعد ولا تحصى على الإنترنت والمدونات والمواقع الإلكترونية. من بين الأشياء المفضلة لدي هي كتاب البرمجة السوداء للكاتب مايكل أبراش ، الذي نُشر عام 1997 ، و Rocket Jump: Quake and the Golden Age of First Person Shooters by David L. Craddock (2018).

لسوء الحظ ، يمكنك العثور على معلومات قليلة جدًا حول المعدات التي تم تطويرها في عام 1996 تقريبًا ، مما أتاح تحسين العرض ثلاثي الأبعاد ، وعلى وجه الخصوص ، رسومات برنامج معرف اللعبة الثورية. داخل العمارة وتصميم هذه القطع من السيليكون يكمن تاريخ المبارزة التكنولوجية بين Rendition V1000 و 3dfx Interactive Voodoo.

بعد إصدار vQuake في أوائل ديسمبر عام 1996 ، بدا أن Rendition قد تولى المهمة. كانت V1000 بطاقة سريعة قادرة على إطلاق Quake مع تسريع الأجهزة ، والتي وفقًا للمطور ، توفر معدل تعبئة يبلغ 25 ميجابكسل / ثانية [1] . قبل عيد الميلاد مباشرة ، سيطرت Rendition على السوق ، مما سمح للاعبين بإطلاق اللعبة بدقة عالية ومعدل إطارات ولون 16 بت [2] . ولكن كما أظهر التاريخ ، تبين أن الخلل في تصميم Vérité 1000 كان قاتلاً للشركة المبتكرة.

الوقت المحدد بشكل صحيح والتطبيقات القاتل


فكرة المعدات المتخصصة لتسريع الرسومات لم تظهر فجأة. مرة أخرى في عام 1954 ، كان لدى الخطوط الجوية المتحدة أجهزة محاكاة الطيران لتدريب الطيارين. أكبر لاعب في هذا المجال ، Silicon Graphics، Inc. (SGI) ، ظهرت في عام 1982 وفي ذلك الوقت عرضت محطات عمل قوية مثل Indy و O2 و Indigo². ومع ذلك ، لم تسمح أسعار هذه الآلات بشرائها من قبل المستهلكين العاديين (يمكن بيع SGI Infinite Reality لعام 1993 بمبلغ 100،000 دولار ، أي ما يعادل 177،262 دولارًا في 2019). كان سبب الموقف الذي نشأ في أواخر التسعينيات هو مزيج من ثلاثة عوامل.


أولاً ، انخفض سعر ذاكرة الوصول العشوائي بشكل ملحوظ. على الرغم من وجود نقص كبير في ذاكرة الوصول العشوائي (RAM) في عام 1995 (ويرجع ذلك أساسًا إلى أنه تم التوصية بـ 8 ميغابايت من الذاكرة لنظام التشغيل Microsoft Windows 95) ، فقد انخفض سعر ذاكرة الوصول العشوائي (RAM) بنسبة 90٪ تقريبًا على مدار العام. هذا يفتح آفاقا للحصول على بطاقات مع المخازن المؤقتة إطار ضخم مذهل (640 × 480 مع لون RGB 16 بت) التي يمكن تخزين القوام محليا.

ثانيا ، زيادة أداء ذاكرة الوصول العشوائي. كان FastPage RAM خطوة إلى الأمام مقارنةً بـ DRAM ، ولكن بعد إصدار ذاكرة الوصول العشوائي (EDO RAM) ، انخفضت التأخيرات بنسبة 30٪ ، وكان وقت الوصول إلى RAM 50 نانو ثانية [3] .

كانت القطعة الثالثة والأخيرة من اللغز تطبيقات قاتلة. يحتوي الكمبيوتر على وحدات معالجة مركزية قوية ، على سبيل المثال ، Intel Pentium بتردد 166 ميجا هرتز ، والذي استخدمه المطورون لإنشاء ألعاب ثلاثية الأبعاد عالية الجودة. في عام 1996 ، كان الجميع يتحدثون عن لعبتين: كور ديزاين تومب رايدر و "آي دي زلزال البرمجيات".



التسليم و V1000


تأسست Rendition Inc في عام 1993. بعد ذلك بعامين ، في عام 1995 ، أعلنت الشركة عن إنشاء بنية V1000 ، والتي تم ترخيصها بسرعة من قبل أربعة مصنعي المعدات الأصلية. كانت Creative Labs 3D Blaster PCI و Sierra Screamin '3D و Canopus Total 3D و Intergraph Reactor أول من ظهر في السوق ، وسرعان ما تولت MiRO المسؤولية.


مفاعل انترجراف. صورة من vgamuseum.ru.


مختبرات الإبداعية 3D الناسف. صورة لنادي "بطاقات الرسومات الرجعية".

لاحظ أنه تم استبدال رقاقة V1000-E الأولى لاحقًا ببطاقة V1000L-P مع انخفاض استهلاك الطاقة وأسرع بنسبة 20٪ [4] .


MiroCrystal VRX. صورة من vgamuseum.info.


كانوب Total3D. صورة من vgamuseum.ru.


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

  1. منفذ VGA للاتصال بشاشة CRT.
  2. Ramdac ، عادة من Bt ، ولكن في بعض الأحيان شريحة AT&T.
  3. جوهر البطاقة هو شريحة V1000-E أو V1000-P أو v1000-L.
  4. ثماني رقائق 512 DRAM / EDO kibyte (إجمالي 4 ميغا بايت) لتخزين المخازن المؤقتة للإطار والقوام.
  5. 64 كيلو بايت من EEPROM يحتوي على BIOS.

كان V1000 اثنين من الخصائص الكامنة التي من المهم أن نلاحظ لأن 3dfx الفودو (والتي سأناقشها لاحقا) تستخدم نهجا مختلفا جذريا.

أولاً ، كان من المفترض أن تكون البطاقة بديلاً لما تم تثبيته بالفعل لدى المشتري. تدعم الشريحة تقديم كل من 2D و 3D في VGA ، وبفضل مفاتيح السياق ، فقد كان ثلاثي الأبعاد مثير للإعجاب في وضع النافذة. لذلك ، كان البطاقة منفذ VGA إخراج واحد.

الميزة الثانية هي بنية "الحديد الكبير" ، القائمة على وحدة Mips واحدة ، والتي يمكنها الوصول إلى جميع وحدات بايت الذاكرة الأربعة. ناقل البيانات 64 بت بينهما ليس له خصائص خاصة. سهّل هذا التصميم الموحد برمجة البطاقة باستخدام الرمز الصغير القابل للتمهيد (هذا حوّل البطاقة إلى أول وحدة معالجة الرسومات لجهاز الكمبيوتر ، قبل وقت طويل من طرح Nvidia بهذا التعريف.)

V1000 البرمجة


يأتي SDK [5] مع مجموعة من ملفات الرأس للتفاعل مع لغة C (RRedline على Windows و Speedy3D على DOS). يشبه تقديم المثلث المحكم ما يقدمه Vulkan مع VRAM اليدوي اليوم. واجهة برمجة التطبيقات ، القادرة على تقديم مثلثات محكم بزاوية رؤية ، دعمت أيضًا اختبارات ألفا ومزج ألفا والضباب.

#include <string.h> #include <windows.h> #include <redline.h> WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdLine, int cmdShow){ int WIDTH=640, HEIGHT = 480; HWND hWndMain = ... ; // Setup Verite board and resolution/refresh rate v_handle verite; VL_OpenVerite(hWndMain, &verite); V_SetDisplayType(verite, V_FULLSCREEN_APP); V_SetDisplayMode(verite, WIDTH, HEIGHT, 16, 75); // Copy texture to VRAM bmp_info bmp = loadBMP("data\\rlogo.bmp"); v_memory memObj = V_AllocLockedMem(verite, bmp.linebytes*bmp.height); memcpy(V_GetMemoryObjectAddress(memObj), bmp.addr, bmp.linebytes*bmp.height); v_surface *display, *texture; VL_CreateSurface(verite, &display, V_SURFACE_PRIMARY, 2, V_PIXFMT_565, WIDTH, HEIGHT); VL_CreateSurface(verite, &texture, 0, 1, V_PIXFMT_565, bmp.width, bmp.height); v_cmdbuffer cmdbuffer = V_CreateCmdBuffer(verite, 0, 0); VL_LoadBuffer(&cmdbuffer, texture, 0, bmp.linebytes, bmp.width, bmp.height, memObj, 0); VL_InstallDstBuffer(&cmdbuffer, display); VL_InstallTextureMap(&cmdbuffer, texture); VL_SetSrcFunc(&cmdbuffer, V_SRCFUNC_REPLACE) // Clear screen to black VL_FillBuffer(&cmdbuffer, display, 1, 0, 0, display->width, display->height,0); // Populate cmd with triangle coo and textCoo v_kaxyzuvq vertex[3] = ... ; VL_Triangle(&cmdbuffer, V_FIFO_KAXYZUVQ, &vertex[0], &vertex[1], &vertex[2]); V_IssueCmdBuffer(verite, cmdbuffer); VL_SwapDisplaySurface(&cmdbuffer, display); } 

قام RRedline بتحميل 128 كيلو بايت من الرمز الصغير في Vérité ومكالمات C المترجمة إلى استدعاءات دالة المجمّع V1000.

حقيقة مثيرة للاهتمام: اسم API "RRedline" تغلب على عبارة "Rendition Ready" وعلى الأرجح تم اختياره جماعيًا. ومع ذلك ، كان اسم سبيدي 3 دي فكرة والت دونوفان.

في الواقع ، كان الإصدار v1000 مجرد وحدة المعالجة المركزية البطيئة (25 ميجاهرتز) ، حيث يحتوي على 32 * 32 من الضرب أحادي الدورة (يشغل جزءًا كبيرًا من الشريحة!) ، وتعليمات دورة واحدة لحساب القيمة العكسية التقريبية (على سبيل المثال ، قسم عدد صحيح تقريبي من دورتين) ، ومجموعة مشتركة من إرشادات RISC. أوه ، وأيضًا تعليمة "التحميل الخطي" ، التي قرأت كتلة ذاكرة خطية 2 × 2 وأجرت عملية تصفية خطية استنادًا إلى القيم الكسرية u و v التي تم تمريرها إلى التعليمات. يبدو أن هناك ذاكرة تخزين مؤقت صغيرة للغاية في الخريطة ، على ما يبدو ، 4 بكسل فقط. لذلك ، إذا ظهرت كتلة 2 × 2 مطابقة تمامًا ، فقد تلقينا انخفاضًا في الحمل على عرض النطاق الترددي للذاكرة.

لم يكن هناك دعم الأجهزة Z- المخازن المؤقتة. لذلك ، كان على البرنامج الذي يعمل بنظام v1000 قراءة Z ، وإجراء مقارنة ، ثم تحديد ما إذا كان يجب الكتابة أم لا.

- والت دونوفان (خوارزمية المهندس المعماري)

لإرسال القوام والرمز الصغير إلى البطاقة ، استخدم برنامج التشغيل DMA لنقل البيانات عبر PCI دون تدخل وحدة المعالجة المركزية. في الممارسة العملية ، لم يكن لدى العديد من اللوحات الأم التحكم في الناقل بشكل صحيح ، لذلك كان على الألعاب العودة إلى وضع PCI FIFO ، مما أثر سلبًا على الأداء [6] . داخل البطاقة ، تم تنفيذ جميع العمليات في أعداد صحيحة ذات 32 نقطة ثابتة.

قرر المطورون أن Rendition سيكون قابلاً للبرمجة بالكامل ، لكنهم لم يستخدموا أي خط أنابيب ذكي أو مزامنة سريعة. لذلك ، إذا كانت هناك حاجة إلى 25 تعليمات لتسجيل بكسل ، فسنحصل على 1 ميجا بكسل / ثانية فقط. إذا كنت تستخدم جهازًا ذا وظائف ثابتة ، فيمكنك إنشاء ناقل مكافئ لهذه الإرشادات الـ 25 وتحقيق 25 ميجا بكسل / ثانية. جاء موظفو 3dfx من SGI ، لذا اختاروا النهج الذي اتضح أنه القرار الصحيح - لإنشاء محرك معالجة مثلث مع وظائف ثابتة ومجموعة فرعية من وظائف OpenGL للإدارة في المعدات. كان لدى مطوري V1000 تجربة مختلفة تمامًا ، ولم يكونوا يعرفون برنامج OpenGL ، وبالتالي قرروا أنه من الأصح إنشاء وحدة المعالجة المركزية.

- والت دونوفان (خوارزمية المهندس المعماري)

بالإضافة إلى كل هذه المجموعة من الوظائف ، كان للبطاقة أيضًا نظام مبتكر لمكافحة التعرج ، والذي كان له تأثير جانبي مضحك.

تم الحصول على براءة اختراع لخوارزمية مكافحة التعرجات المستخدمة في vQuake (رقم براءة الاختراع 6005580). كان هناك نكتة مضحكة حول هذه الخوارزمية. كان يعمل فقط مع المثلثات ، ولكن ليس فترات. استخدم Quake مفهوم "التخزين المؤقت z المثالي" ، حيث تم تقسيم الرسومات إلى فواصل وفرزها بصريًا باستخدام BSP / PVS (تقسيم المساحة الثنائية / مجموعة من العناصر التي يحتمل أن تكون مرئية). لذلك ، أنشأ المحرك مجموعة من الفواصل الزمنية التي غطت بشكل مثالي الشاشة دون تراكبات وفقدان بكسل ، وللتقديم ، كانت هناك حاجة لعملية كتابة واحدة (بدون z - التخزين المؤقت!) في ذاكرة العرض. ومع ذلك ، فإن البيانات الأولية لهذه الفواصل كانت مثلثات. بحثت خوارزمية الحواف عن حواف الصور الظلية وخففتها. (لمزيد من المعلومات حول هذه الفكرة ، راجع humus.name ، إدخال الحواف الهندسي بعد العملية من مارس 2011 - قام المؤلف باختراع هذه التقنية مرة أخرى!) ولكن منذ إجراء عملية مكافحة التعرجات بعد عرض الشاشة (تم رسم جميع الفواصل الزمنية بالفعل) ، خوارزمية المفهوم كان ، على ما يبدو ، ضلع أم لا. انه رسمها على أي حال. (إذا تم استخدام z-buffer ، فسيتم إعادة رسم الحواف المرئية فقط!) في الممارسة العملية ، لم تكن هذه مشكلة كبيرة ، لأن BSP عادةً ما يقطع المثلثات غير المرئية جيدًا.

ولكن ليس مع نماذج شخصية! لذلك ، سمح اللاعب vquake للاعب برؤية أشخاص يختبئون خلف الأبواب والجدران ، مما يؤدي إلى تشويه صغير ومؤثر في القوام!

- والت دونوفان (خوارزمية المهندس المعماري)

vQuake


في وقت إصدار البطاقات ، دعموا بعض الألعاب الجيدة. نعم ، كان Descent II و Grand Prix Legends و IndyCar Racing II و Myst و Nascar Racing و EF2000 و Tomb Raider من الألعاب الجيدة ، لكن Quake كان الماس الحقيقي في التاج ، وهو أكثر عمليات البيع ترويجًا وتشجيعًا. تلقت لعبة معرف البرمجيات منفذها الخاص تحت Vérité يسمى vQuake ، الذي صدر في 2 ديسمبر 1996. كتبه والت دونوفان وستيفان شير من Vérité بالتعاون مع id Abrash Michael.

كان العمل شاقًا للغاية ، لكن الميناء كان يعمل. بنتيوم 166 ميجا هرتز ، قادرة على تقديم الزلزال بدقة 320 × 200 بمعدل 26 إطارًا في الثانية ، ويمكن القفز إلى 640 × 480 مع الترشيح ثنائي الخط وما زال العرض عند 22 إطارًا في الثانية [8] . في الممارسة العملية ، اختار اللاعبون دقة 512 × 384 ، والتي بدت جميلة وجعلت من الممكن توفير 32 لقطة في الثانية على P166. لفترة قصيرة ، كان vQuake بلا شك أفضل طريقة للعب الزلزال.

صورة

تقديم البرمجيات

صورة

Vérité V1000

شكرًا جزيلاً لمستخدمswaaye من منتدى vogons.org للحصول على لقطات شاشة من V1000 و Fruit Of Dojo على ميناء Quake عالي الجودة وسهل الاختراق على MacOSX [9] .

صورة

تقديم البرمجيات

صورة

Vérité V1000

عيب Z العازلة


ما كان يفتقر V1000 (وبشكل غير مباشر خلفه V2200) هو تسريع الأجهزة من المخزن المؤقت z. بمجرد تضمين المطور لاختبار العمق ، انخفض معدل التعبئة إلى 12.5 ميجا بكسل / ثانية وكان معدل الإطار إلى النصف. كما أوضح ستيفان بودل لاحقًا [10] ، تم نقل vQuake (وجميع الألعاب الأخرى) إلى V1000 بطريقة تقلل من قراءة z-buffer.

وجد المطورون أن الطريقة الوحيدة لضمان السرعة اللازمة هي نقل الجزء الرئيسي من العمل إلى وحدة المعالجة المركزية. في حالة vQuake ، كان هذا يعني أنه سيتم استخدام الخريطة كجهاز عرض فاصل أفقي فائق السرعة يكتب دائمًا إلى z-buffer ، لكن تتم قراءة z ومقارنته فقط عند تقديم الأعداء. وعلى الرغم من أن المطورين تمكنوا من إنشاء منتجات جيدة ، إلا أن عواقب مثل هذا الاختيار من الهندسة المعمارية تحوم لفترة طويلة.

3dfx وإسقاط التسليم السري


أصدرت شركة id Software GLQuake في 22 يناير 1997. تم تطبيقه استنادًا إلى miniGL (مجموعة فرعية من معيار OpenGL 1.0 ، والتي ، من بين أمور أخرى ، تفتقر إلى GL_LIGHT و GL_FOG). هذا الثنائي فتح الباب لجميع الأجهزة تسارع بطاقات الكمبيوتر. في هذا الصدد ، تم تمييز بطاقات الفودو ثلاثية الأبعاد الخاصة بـ 3dfx Interactive بشكل خاص ، وأصبح أدائها المذهل (41 إطارًا في الثانية بدقة 512 × 384 بلون 16 بت على P166 [11] ) هو المعيار الفعلي للمعجلات ثلاثية الأبعاد. أصبح معدل ملء V1000 البالغ 25 ميجابكسل / ثانية ، والذي كان يُقارن ذات مرة مع عرض برنامج Pentium ، متواضعًا على خلفية 50 ميجابكسل / ثانية من بطاقة Voodoo ، والتي لم تتأثر حتى بإجراء اختبارات z.

كانت استجابة Rendition هي أقوى محرك V2x00 ، الأمر الذي أدى إلى تفاقم الموقف. تم الإعلان عن أنه بفضل نظام z-buffer ، كان V2x00 أسرع مرتين ، إلا أنه لم يكن قادراً على تحسين معدل الإطارات في vQuake. قوضت هذه الحالة الشاذة ثقة العملاء وكان لها تأثير سلبي على مطور vQuake ، ستيفان شاريل ، الذي شعر أنه بحاجة لشرح سبب محدودية أداء vQuake بواسطة وحدة المعالجة المركزية بدلاً من GPU [12] .

... تبين أن سمعتي أصبحت ملوثة بحقيقة أن VQuake و VHexen2 لم يعملا بشكل أسرع على V2x00 ، لذلك يجب أن أشرح لماذا حدث هذا.

[...]

قرر Walt و Michael أنه نظرًا لأن أداء Verite 1000 لم يحقق أداءً جيدًا بالبكسل مع التخزين المؤقت Z ، فإن ترك Pentium يقوم بهذا الفرز من الفترات سيقلل من عدد البكسلات التي يحتاج Verite إلى رسمها. علاوة على ذلك ، يمكننا تعطيل وظيفة المقارنة Z في Verite.

[...]

... مهما كانت شريحة Verite ، حصلت وحدة المعالجة المركزية على الكثير من العمل.

- ستيفان بوديل

علاوة على ذلك ، كانت هناك مشاكل كبيرة في بنية الأجهزة ، والتي أدت في البداية إلى فشل [13] V2x00. استغرق الأمر عدة أشهر لإصلاح المشكلة ، وحتى بعد ذلك ، لا تزال اللوحة تعمل بتردد 50 MHz ، بينما وصل NVidia NV3 و Voodoo2 بالفعل إلى 100 MHz.

يمكن للجيل الثالث ، على أساس V3300 ، أن يغير مجرى التاريخ ، لكنه خرج بعد فوات الأوان. تم إلغاء المشروع في عام 1998 ، بعد أن تم الاستحواذ على Rendition بواسطة Micron Technology.

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

عملت vQuake بشكل جيد فقط لأن v1000 لم تفعل الكثير من العمل. "اجعل هذه القائمة من الفواصل الزمنية" ، "قم بسلاسة هذه الحافة" - هذا كل ما فعله تقريبًا. قضيت أنا ومايك أبرش وقتًا طويلاً في جعل Quake متوافقًا مع V1000 ، لذلك لم يكن هذا الطراز مناسبًا على المدى الطويل.

- والت دونوفان (خوارزمية المهندس المعماري)

بعد انهيار Rendition ، ضاعفت 3dfx جهودها لتعزيز Voodoo2 ، التي سمحت الخصائص المميزة لها باجتياح جميع المنافسين. استبعد ملك الرسومات ثلاثية الأبعاد على الكمبيوتر السوق لفترة من الوقت. ثم استمرت اللعبة ، ظهر منافسون جدد على الساحة ، وكان من بينهم ATI الكندي وشركة غير معروفة تقريبًا في ذلك الوقت تسمى Nvidia.

المواد المرجعية


[1] المصدر: متحف VGA ، V1000 Texel Fillrate (MTexel / s) الذي يبلغ 25

[2] المصدر: جون كارماك. خطة 22 أغسطس 1996 "في 512 * 384 وهو ما يقرب من ضعف سرعة"

[3] المصدر: 3dfx VOODOO1 Reference Rev. 1.0

[4] المصدر: مراجعة لل V1000

[5] المصدر: Rendition Verite V1000 SDK

[6] المصدر: عدم نضج ناقل PCI [...] الناجم عن أخطاء DMA على السطح

[7] المصدر: دليل برمجة RRedline

[8] المصدر: معايير للمقارنة بين Rendition Vérité V1000-E و V1000L-P

[9] المصدر: MacOSX X Quake port source code على github.com

[10] المصدر: ستيفان بوديل BSS post

[11] المصدر: مقارنة معدلات الإطار في GLQuake باستخدام Voodoo1

[12] المصدر: ستيفان بوديل BSS

[13] المصدر: wikipedia.com ، قسم السقوط

Source: https://habr.com/ru/post/ar446570/


All Articles