الحوسبة المباشرة
Microsoft DirectCompute هي واجهة برمجة تطبيقات (API) تدعم تشغيل نوى الحوسبة على الحوسبة للأغراض العامة على وحدات معالجة الرسومات على أنظمة التشغيل Microsoft Windows Vista و Windows 7 والإصدارات الأحدث. DirectCompute هو جزء من مجموعة Microsoft DirectX من واجهات برمجة التطبيقات، وتم إصداره في البداية مع واجهة برمجة تطبيقات DirectX 11 ولكنه يعمل على وحدات معالجة الرسومات التي تستخدم إما DirectX 10 أو DirectX 11. [1] تشترك بنية DirectCompute في مجموعة من الواجهات الحسابية مع منافسيها: OpenCL من Khronos Group ، وتظليل الحوسبة في OpenGL ، و CUDA من NVIDIA .
توفر واجهة برمجة التطبيقات DirectCompute إمكانيات متعددة الخيوط محسّنة للاستفادة من موارد الحوسبة المتقدمة الناشئة. [2] تم تصميم واجهة برمجة التطبيقات للتطبيقات غير الرسومية للوصول إلى موارد وحدة معالجة الرسومات واستخدامها . [3]
حساب خط الأنابيب
خط أنابيب الحوسبة هو نوع من خطوط أنابيب الرسومات المستخدمة لإرسال وتنفيذ برامج تظليل الحوسبة . يتم تشغيل خطوط أنابيب الحوسبة من خلال قوائم أوامر الحوسبة ، والتي تقتصر على تسجيل أوامر النسخ والحوسبة فقط. تُستخدم برامج تظليل الحوسبة للخوارزميات والحسابات العامة، ويتم تشغيلها من خلال معالجات متوازية على وحدة معالجة الرسوميات. يتم تنظيم نموذج التنفيذ المتوازي هذا الذي يتم بواسطة خط أنابيب الحوسبة في إرسال ومجموعات خيوط وخيوط . الإرسال عبارة عن حاوية ثلاثية الأبعاد لمجموعات الخيوط، ومجموعة الخيوط عبارة عن حاوية ثلاثية الأبعاد للخيوط. [4] يتم تشغيل مجموعات الخيوط على وحدة معالجة الرسوميات في موجات. [5]
يتيح هذا الخط الأنبوبي إرسال أحمال العمل بسهولة إلى وحدة معالجة الرسومات دون الحاجة إلى إعادة هيكلة كود البرنامج بأكمله. [6]
يحتوي خط أنابيب الحوسبة النموذجي على عرض موارد shader للقراءة فقط كمدخل، وعرض مخزن ثابت لثوابت الموارد الإضافية، وعرض وصول غير مرتب لإخراج. من المهم ضبط حالات الموارد لهذه الموارد من أجل تحسين الأداء. [7]
مثال على الكود
تتضمن عملية تهيئة خط أنابيب الحوسبة إنشاء التوقيع الجذري وقراءة برنامج تظليل الحوسبة وإنشاء كائن حالة خط الأنابيب.
// تعيين التوقيع الجذر
CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC root_signature_desc {
1 ، معلمات الجذر ،
0 ، لا شيء
};
// تسلسل توقيع الجذر
مايكروسوفت :: WRL :: ComPtr < ID3DBlob > root_signature_blob { nullptr };
مايكروسوفت :: WRL :: ComPtr < ID3DBlob > error_blob { nullptr };
D3DX12SerializeVersionedRootSignature (
& root_signature_desc ، D3D_ROOT_SIGNATURE_VERSION_1_1 ،
root_signature_blob . GetAddressOf ()، error_blob . GetAddressOf ()
);
// إنشاء التوقيع الجذري
مايكروسوفت :: WRL :: ComPtr < ID3D12RootSignature > root_signature { nullptr };
الجهاز -> إنشاء توقيع الجذر (
0 ، كتلة توقيع الجذر -> GetBufferPointer ()،
جذر_توقيع_الكتلة -> GetBufferSize ()،
IID_PPV_ARGS ( root_signature . GetAddressOf ())
);
// قراءة برنامج التظليل الحسابي
Windows :: WRL :: ComPtr < ID3DBlob > compute_shader { nullptr };
D3DReadFileToBlob ( L "C:/path/to/compute/shader" ، compute_shader.GetAddressOf ( ) );
// إنشاء كائن حالة خط أنابيب الحوسبة (PSO)
هيكل حالة خط الأنابيب {
توقيع جذر خط الأنابيب CD3DX12_STATE_STREAM_ROOT_SIGNATURE ؛
حساب تظليل CD3DX12_PIPELINE_STATE_STREAM_CS ؛
} حالة خط الأنابيب_الدفق ؛
// تعيين التوقيع الجذري وبرنامج التظليل الحسابي إلى PSO
pipeline_state_stream . root_signature = root_signature . الحصول على ();
pipeline_state_stream . compute_shader = CD3DX12_SHADER_BYTECODE { compute_shader . الحصول على ()};
D3D12_PIPELINE_STATE_STREAM_DESC حالة خط الأنابيب_تدفق_الوصف {
حجم ( PipelineStateStream )، و pipeline_state_stream
};
// إنشاء حالة خط الأنابيب
الجهاز -> إنشاء حالة خط الأنابيب (
& وصف حالة خط الأنابيب ،
IID_PPV_ARGS ( pipeline_state_stream . GetAddressOf ())
);
بعد تهيئة خط أنابيب الحوسبة، يجب تعيين حالة خط الأنابيب لكل إطار، وتعيين توقيع جذر الحوسبة، ثم تشغيل الإرسال.
قائمة الأوامر -> SetPipelineState ( pipeline_state );
قائمة الأوامر -> SetComputeRootSignature ( root_signature );
قائمة الأوامر -> الإرسال ( المجموعات_x ، المجموعات_y ، المجموعات_z )؛
انظر أيضا
قراءة إضافية
- حساب التظليل في D3D12
مراجع
- ^ "DirectCompute". developer.nvidia.com . NVIDIA . 28 سبتمبر 2010 . تم الاسترجاع في 22 مارس 2015 .
- ^ جيمس، ديف؛ شيابيتا، ماركو. "تطور دايركت إكس" (PDF) . الحد الأقصى للكمبيوتر الشخصي . 19 (8): 52–59. ISSN 1522-4279 . تم الاسترجاع في 2024-08-07 – عبر MasterFILE Complete.
- ^ Mohr, Neil. "Beyond Graphics with Gpgpus: Maximum PC". Maximum PC : 46–51. ISSN 1522-4279 – via MasterFILE Complete.
- ^ يونغ، إيريك (2010-09-20). "DirectCompute - Optimizations and Best Practices" (PDF) . تم الاسترجاع في 2024-02-14 .
- ^ Lively, David; Gruen, Holger (2017-03-03). "Wave Programming in D3D12 and Vulkan" (PDF) . gpuopen . تم الاسترجاع في 2024-02-15 .
- ^ جراهام سميث، دارين (سبتمبر 2021). "عودة الحوسبة باستخدام وحدة معالجة الرسوميات". PCPro (323): 44–47. ISSN 1355-4603 . تم الاسترجاع في 2024-06-10 – عبر MasterFILE Complete.
- ^ كرامر، لو (2022-07-22). "Compute Shaders" (PDF) . gpuopen . تم الاسترجاع في 2024-03-11 .
روابط خارجية
- نظرة عامة على Compute Shader
- سلسلة محاضرات DirectCompute
- DirectX 11 المتقدم: DirectCompute بالمثال
- GTC حسب الطلب
