تنفيذ تعليمات وحدة المعالجة المركزية/وحدة معالجة الرسومات من التعليمات البرمجية المدارة
سؤال
مع الأخذ في الاعتبار تعطيل تنفيذ البت ، ما هي الطريقة الموصى بها لتنفيذ التعليمات مقابل معالج أصلي من بيئة مُدارة عالية المستوى مثل VB.NET 2008 أو C#. بالإضافة إلى ذلك ، هل حقق أي شخص مماثلة في تنفيذ تعليمات GPU مقابل معالج الرسومات؟
المحلول
هناك عدد قليل من خيارات GPU لـ C#، للوصول المباشر دون العودة إلى P/استدعاء أو كتابة أغلفة C ++ الخاصة بك:
- براهما مثيرة للاهتمام للغاية. يوفر الوصول إلى وحدة معالجة الرسومات مباشرة عبر مزود LINQ مخصص. يتضمن الرمز بعض عينات الأساليب الحسابية للغاية التي يتم تشغيلها على وحدة معالجة الرسومات ، وكلها مكتوبة في C# عبر LINQ.
- Slimdx يوفر غلافًا لطيفًا .NET لجميع وظائف DirectX الرئيسية. مع تظليل مخصص ، يمكنك إجراء حساب على وحدة معالجة الرسومات عبر DirectX. ويشمل أيضًا دعم DX11 ، بحيث يمكنك استخدام تظليل الحساب مباشرة (إذا كان لديك الأجهزة الخاصة به).
- يمكنك الوصول إلى CUDA عبر cuda.net.
- يمكنك استخدام opencl عبر opencl.net.
أما بالنسبة لتعليمات وحدة المعالجة المركزية ، فإن هذا يتطلب عادةً الانخفاض إلى رمز أصلي من المستوى الأدنى مع تعليمات التجميع. من المحتمل أن يكون الخيار الأكثر إثارة للاهتمام المدارة (على الأقل جزئيًا) هو الاستخدام Mono.simd, ، والذي يوفر الوصول المباشر إلى تعليمات SIMD في وحدة المعالجة المركزية من التعليمات البرمجية المدارة عند التشغيل على مكدس Mono.
نصائح أخرى
ذلك ليس خيارا. سيتعين عليك p/استدعاء وظيفة في DLL التي تم إنشاؤها بواسطة MASM أو مكتوبة في C/C ++ غير المدارة ، باستخدام التجميع المضمّن أو الجوهارات. أو استخدم برنامج التحويل البرمجي C ++/CLI وقم بإنشاء رمز الوضع المختلط مع إدارة #Pragma.
احذر الآن أنك لم تعد قادرًا على الاعتماد على برنامج التحويل البرمجي JIT الذي يولد أي رمز النظام الأساسي مناسب لنظام التشغيل. استخدم Project + Properties ، Tab Build ، هدف النظام الأساسي لإجبار الهندسة المعمارية على مطابقة الرمز غير المُدار.
انظر إلى CUDA لرمز GPU المدارة.
قم بإنشاء مكتبة. DLL غير مُدارة مع أي إرشادات تريدها واستخدمها للدعوة.