برنامج تشغيل AMD مفتوح المصدر لـ Vulkan® هو برنامج تشغيل Vulkan مفتوح المصدر لمحولات رسومات Radeon™ على Linux®. إنه مبني على مكتبة تجريد النظام الأساسي (PAL) الخاصة بـ AMD، وهو مكون مشترك تم تصميمه لتغليف بعض الأجهزة وتفاصيل البرمجة الخاصة بنظام التشغيل للعديد من برامج تشغيل الكمبيوتر ثلاثية الأبعاد الخاصة بـ AMD. يمكن أن تساعد الاستفادة من PAL في توفير تجربة متسقة عبر الأنظمة الأساسية، بما في ذلك دعم وحدات معالجة الرسومات التي تم إصدارها مؤخرًا والتوافق مع أدوات مطور AMD.
يتم تجميع التظليلات التي تشكل كائن VkPipeline
معين ككيان واحد باستخدام مكتبة LLVM-Based Pipeline Compiler (LLPC). تعتمد LLPC على البنية التحتية الحالية لتجميع التظليل الخاصة بـ LLVM لوحدات معالجة الرسومات AMD لإنشاء كائنات تعليمات برمجية متوافقة مع خط أنابيب PAL's ABI. والجدير بالذكر أن برنامج تشغيل Vulkan مغلق المصدر من AMD يستخدم حاليًا مترجمًا مختلفًا لخطوط الأنابيب، وهو الفرق الرئيسي بين برامج تشغيل Vulkan مفتوحة المصدر ومغلقة المصدر من AMD.
تم تصميم برنامج تشغيل AMD مفتوح المصدر لـ Vulkan لدعم وحدات معالجة الرسومات AMD التالية:
ملاحظة بالنسبة لوحدات معالجة الرسومات Pre-GFX10، يرجى استخدام الإصدار v-2023.Q3.3 أو الإصدار الأقدم.
تم تصميم برنامج تشغيل AMD مفتوح المصدر لـ Vulkan لدعم التوزيعات والإصدارات التالية على كل من حزمة برامج تشغيل AMDGPU الأولية ومكدس برامج تشغيل AMDGPU Pro:
لم يتم اختبار برنامج التشغيل جيدًا على التوزيعات والإصدارات الأخرى. يمكنك تجربتها على توزيعات وإصدارات أخرى من اختيارك.
ملاحظة لتشغيل برنامج تشغيل Vulkan مع مكدس برنامج تشغيل AMDGPU الرئيسي على وحدات معالجة الرسومات من الجيل SI وCI، يجب تمكين amdgpu.si_support وamdgpu.cik_support في kernel
تم تصميم برنامج تشغيل AMD مفتوح المصدر لـ Vulkan لدعم الميزات التالية:
تم التخطيط للميزات والتحسينات التالية في الإصدارات المستقبلية (يرجى الرجوع إلى ملاحظات الإصدار لتحديث كل إصدار):
uname -r
uname -r
أو sudo mkinitcpio --generate /boot/initrd.img- uname -r
uname -r
)مرحبًا بك لتقديم مساهمات التعليمات البرمجية إلى برنامج تشغيل AMD Open Source لـ Vulkan.
تم إنشاء برنامج التشغيل من كود المصدر في خمسة مستودعات: LLVM، وXGL، وLLPC، وGPURT، وPAL.
لإجراء تغييرات على LLVM، يجب عليك إرسال المساهمة إلى قناة LLVM. سيتم تقييم الالتزامات هناك لدمجها في فرع amd-gfx-gpuopen-master بشكل دوري.
لإجراء تغييرات على XGL وLLPC وGPURRT وPAL، يرجى إنشاء طلب سحب مقابل فرع التطوير . بعد مراجعة التغيير الخاص بك وفي حالة قبوله، سيتم تقييمه لدمجه في الفرع الرئيسي في ترقية منتظمة لاحقة.
هام : من خلال إنشاء طلب سحب، فإنك توافق على السماح بترخيص مساهمتك من قبل مالكي المشروع بموجب شروط ترخيص MIT.
عند المساهمة في XGL وLLPC وGPURRT وPAL، يجب أن يكون الكود الخاص بك:
يرجى جعل كل مساهمة صغيرة بشكل معقول. إذا كنت ترغب في تقديم مساهمة كبيرة، مثل ميزة جديدة أو ملحق جديد، فيرجى إثارة مشكلة أولاً للسماح بالتخطيط لتقييم عملك ومراجعته.
ملاحظة نظرًا لأن PAL هو مكون مشترك يجب أن يدعم واجهات برمجة التطبيقات الأخرى وأنظمة التشغيل الأخرى وأجهزة ما قبل الإنتاج، فقد يُطلب منك مراجعة تغيير PAL لأسباب قد لا تكون واضحة من منظور برنامج تشغيل Linux Vulkan الخالص.
يوصى بتثبيت ذاكرة وصول عشوائي (RAM) سعة 16 جيجابايت على الأقل في نظام التصميم الخاص بك.
sudo apt-get install build-essential cmake curl g++-multilib gcc-multilib git ninja-build pkg-config python3 python3-jinja2 python3-ruamel.yaml
sudo apt-get install libssl-dev libx11-dev libxcb1-dev x11proto-dri2-dev libxcb-dri3-dev libxcb-dri2-0-dev libxcb-present-dev libxshmfence-dev libxrandr-dev libwayland-dev
dpkg --add-architecture i386
sudo apt-get install libssl-dev:i386 libx11-dev:i386 libxcb1-dev:i386 libxcb-dri3-dev:i386 libxcb-dri2-0-dev:i386 libxcb-present-dev:i386 libxshmfence-dev:i386 libwayland-dev libwayland-dev:i386 libxrandr-dev:i386
sudo yum -y install openssl-devel gcc-c++ python3 python3-pip curl glibc-devel libstdc++-devel libxcb-devel libX11-devel libxshmfence-devel libXrandr-devel wayland-devel
pip3 install jinja2 ruamel.yaml
sudo yum -y install openssl-devel.i686 gcc-c++ python3 python3-pip curl glibc-devel.i686 libstdc++-devel.i686 libxcb-devel.i686 libX11-devel.i686 libxshmfence-devel.i686 libXrandr-devel.i686 wayland-devel.i686
pip3 install jinja2 ruamel.yaml
يجب تثبيت أدوات التحويل البرمجي Shader مثل DirectXShaderCompiler وglslang لإنشاء دعم لتتبع الأشعة.
يوصى بتثبيتها من VulkanSDK 1.3.290 أو أعلى.
أوبونتو 22.04 (جامي)
wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list
sudo apt update
sudo apt install vulkan-sdk
احصل على كود مصدر DirectXShaderCompiler وglslang وقم ببناء الأدوات على المستوى المحلي.
#!/bin/bash
if [ ! -d DirectXShaderCompiler ]; then
git clone --depth=1 -b release-1.8.2403 https://github.com/microsoft/DirectXShaderCompiler.git
fi
if [ ! -d glslang ]; then
git clone --depth=1 -b vulkan-sdk-1.3.290.0 https://github.com/KhronosGroup/glslang.git
fi
cd DirectXShaderCompiler
git submodule init
git submodule update
cmake -H. -Bbuilds -GNinja -DCMAKE_BUILD_TYPE=Release -C ./cmake/caches/PredefinedParams.cmake
cmake --build builds
cd ..
cd glslang
cmake -H. -Bbuilds -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX='builds/install'
cd builds
make -j8 install
cd ../../
قم بتعيين env PATH وLD_LIBRARY_PATH قبل إنشاء برنامج تشغيل amdvlk.
export PATH=/builds/bin:/install/bin:$PATH
export LD_LIBRARY_PATH=/builds/lib:$LD_LIBRARY_PATH
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:"$PATH"
mkdir vulkandriver
cd vulkandriver
repo init -u https://github.com/GPUOpen-Drivers/AMDVLK.git -b master
repo sync
ملاحظة: يمكن الحصول على التعليمات البرمجية المصدر في فرع dev باستخدام "-b dev" في أمر "repo init".
cmake -G Ninja -S xgl -B builds/Release64
cmake --build builds/Release64
cmake -G Ninja -S xgl -B builds/Release32 -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32
cmake --build builds/Release32
ملحوظة
- من أجل بناء تصحيح الأخطاء، استخدم
-DCMAKE_BUILD_TYPE=Debug -DLLVM_PARALLEL_LINK_JOBS=2
(يتطلب ربط بناء تصحيح الأخطاء لـ llvm ذاكرة كبيرة جدًا، لذلك نستخدم وظيفتين متوازيتين فقط).- إذا كنت تريد إنشاء أدوات (مثل amdllpc) مع برنامج التشغيل، فأضف
-m build_with_tools.xml
في repo init وأضف خيار الإنشاء-DXGL_BUILD_TOOLS=ON
.
يمكنك تنزيل وتثبيت حزمة SDK هنا.
sudo apt install libssl3
sudo yum install openssl-libs
sudo cmake --install builds/Release64 --component icd
sudo cmake --install builds/Release32 --component icd
إذا كنت تريد تثبيت برنامج التشغيل على الدليل المخصص، فيمكنك إضافة "-DCMAKE_INSTALL_PREFIX={دليل التثبيت}" في أمر cmake build. سيتم تثبيت ملفات JSON على /etc/vulkan/icd.d بينما سيتم تثبيت الملفات الأخرى على دليل التثبيت الذي حددته.
إذا تم تثبيت RADV أيضًا في النظام، فسيتم تمكين برنامج تشغيل AMDVLK افتراضيًا بعد التثبيت. يمكنك تبديل برنامج التشغيل بين AMDVLK وRADV بواسطة متغير البيئة AMD_VULKAN_ICD = AMDVLK أو RADV.
ملاحظة: الخطوات المتبقية مطلوبة فقط عند تشغيل حزمة برامج تشغيل AMDGPU الأولية.
أضف الأسطر التالية في /usr/share/X11/xorg.conf.d/10-amdgpu.conf:
Section "Device"
Identifier "AMDgpu"
Option "DRI" "3"
EndSection
وتأكد من عدم تضمين السطر التالي في القسم:
Driver "modesetting"
في مكدس برنامج تشغيل AMDGPU مع إصدار libdrm أقل من 2.4.92، يجب أن يقتصر الحد الأقصى لعدد IB لكل إرسال على 4 (الإعداد الافتراضي في برنامج تشغيل AMD Open Source لـ Vulkan هو 16). يمكن تحقيق ذلك عبر آلية إعدادات وقت التشغيل عن طريق إضافة السطر التالي إلى amdPalSettings.cfg:
MaxNumCmdStreamsPerSubmit,4
CommandBufferCombineDePreambles,1
يمكنك إنشاء حزمة التثبيت باستخدام الأمر أدناه أثناء إنشاء برنامج التشغيل:
cmake -G Ninja -S xgl -B builds/Release64 [-DPACKAGE_VERSION=package version]
cmake --build builds/Release64 --target makePackage
cmake -G Ninja -S xgl -B builds/Release64 [-DPACKAGE_VERSION=package version]
cmake --build builds/Release64 --target makePackage
يمكنك أيضًا تنزيل الحزمة المعدة مسبقًا من https://github.com/GPUOpen-Drivers/AMDVLK/releases لكل ترويج للكود في الفرع الرئيسي.
وفيما يلي تعليمات التثبيت:
sudo dpkg -r amdvlk # If old version is installed on the machine, remove it first
sudo dpkg -i amdvlk_x.x.x_amd64.deb
sudo apt-get -f install
sudo rpm -e amdvlk # If old version is installed on the machine, remove it first
sudo rpm -i amdvlk-x.x.x.x86_64.rpm
بالنسبة إلى Ubuntu، يمكنك أيضًا تثبيت أحدث إصدار من برنامج التشغيل من https://repo.radeon.com:
sudo wget -qO - http://repo.radeon.com/amdvlk/apt/debian/amdvlk.gpg.key | sudo apt-key add -
sudo sh -c 'echo deb [arch=amd64,i386] http://repo.radeon.com/amdvlk/apt/debian/ bionic main > /etc/apt/sources.list.d/amdvlk.list'
sudo apt-get remove amdvlk # If old version is installed on the machine, remove it first
sudo apt update
sudo apt-get install amdvlk
يعرض برنامج التشغيل العديد من الإعدادات التي يمكنها تخصيص سلوك برنامج التشغيل وتسهيل تصحيح الأخطاء. يمكنك إضافة/تحرير الإعدادات في ملف amdVulkanSettings.cfg أو amdPalSettings.cfg ضمن أحد المسارات أدناه، المنسقة name,value
لكل سطر:
بعض إعدادات الأمثلة مذكورة أدناه:
اسم الإعداد | القيم الصالحة | تعليق |
---|---|---|
AllowVkPipelineCachingToDisk | 0: عدم السماح 1: الافتراضي | 1 هي القيمة الافتراضية التي تتيح التخزين المؤقت المستند إلى ملف أرشيف Pal. يتم تخزين ملف الأرشيف ضمن ~/.cache/AMD/VkCache. |
ShaderCacheMode | 0: تعطيل ذاكرة التخزين المؤقت 1: ذاكرة التخزين المؤقت لوقت التشغيل 2: ذاكرة التخزين المؤقت على القرص | ذاكرة التخزين المؤقت لوقت التشغيل هي الوضع الافتراضي. بالنسبة إلى "التخزين المؤقت على القرص"، يتم إنشاء ملف ذاكرة التخزين المؤقت ضمن $AMD_SHADER_DISK_CACHE_PATH/AMD/LlpcCache أو $XDG_CACHE_HOME/AMD/LlpcCache أو $HOME/.cache/AMD/LlpcCache |
IFH | 0: افتراضي 1: إسقاط كافة المشاركات | أجهزة سريعة بلا حدود. يتم إسقاط مكالمات الإرسال قبل إرسالها إلى الأجهزة. مفيد لقياس الأداء المحدود لوحدة المعالجة المركزية. |
EnableVmAlwaysValid | 0: تعطيل 1: الافتراضي 2: تمكين القوة | 1 هو الإعداد الافتراضي الذي يمكّن ميزة VM-always-valid لـ kernel 4.16 وما فوق. يمكن أن تقلل هذه الميزة من عبء إرسال المخزن المؤقت للأوامر المتعلق بإدارة الذاكرة الظاهرية. |
IdleAfterSubmitGpuMask | قناع نقطي لوحدات معالجة الرسومات (على سبيل المثال، البت 0 هو GPU0، وما إلى ذلك) | يفرض على وحدة المعالجة المركزية الانتظار فورًا حتى يكتمل كل إرسال لوحدة معالجة الرسومات على المجموعة المحددة من وحدات معالجة الرسومات. |
يمكن تحديد جميع الإعدادات المتاحة من خلال فحص الملفات المصدرية أدناه التي تحددها.
تتم قراءة إعدادات وقت التشغيل فقط عند تهيئة الجهاز، ولا يمكن تغييرها دون إعادة تشغيل التطبيق. إذا كنت تعمل على نظام به وحدات معالجة رسوميات متعددة، فسيتم تطبيق نفس الإعدادات عليها جميعًا. الأسطر الموجودة في ملف الإعدادات والتي تبدأ بـ ;
سيتم التعامل معها كتعليقات.
لا يتم تمكين الملحقات قيد التطوير بشكل افتراضي في برنامج التشغيل. يمكنك تمكينها من خلال متغير البيئة:
export AMDVLK_ENABLE_DEVELOPING_EXT=" [...]"
أو
export AMDVLK_ENABLE_DEVELOPING_EXT="all"
اسم الملحق غير حساس لحالة الأحرف.
إن GpuProfiler عبارة عن طبقة اختيارية تم تصميمها لاعتراض واجهة PAL لتوفير دعم أساسي لملف تعريف GPU. حاليًا، يتم التحكم في هذه الطبقة حصريًا من خلال إعدادات وقت التشغيل وإخراج نتائجها إلى ملف.
يمكنك استخدام إعدادات وقت التشغيل التالية لإنشاء ملفات بتنسيق .csv مع توقيتات GPU للعمل المنجز أثناء الإطارات المحددة للتطبيق (ملف واحد لكل إطار):
اسم الإعداد | قيمة | تعليق |
---|---|---|
GpuProfilerMode | 0: تعطيل 1: تمكين مع إيقاف تشغيل sqtt 2: تمكين باستخدام sqtt لتتبع الخيط 3: تمكين مع sqtt لRGP | تمكين وتعيين وضع SQTT لطبقة ملف تعريف أداء GPU. يجب تحديد الالتقاط الفعلي لبيانات الأداء عبر رقم الإطار باستخدام GpuProfilerConfig_StartFrame أو بالضغط على Shift-F11. |
GpuProfilerConfig.LogDirectory | <مسار الدليل> | يرتبط مسار الدليل بـ $AMD_DEBUG_DIR أو $TMPDIR أو /var/tmp/، والقيمة الافتراضية هي "amdpal/". يجب أن يتمتع تطبيقك بأذونات الكتابة إلى الدليل. يتم إخراج سجلات ملفات التعريف إلى دليل فرعي يتم تسميته بتنسيق مثل |
GpuProfilerConfig.Granularity | 0: لكل رسم 1: لكل cmdbuf | يحدد ما يتم قياسه/توصيفه. يقوم كل رسم بضرب الأوامر الفردية (مثل السحب والإرسال وما إلى ذلك) داخل المخازن المؤقتة للأوامر، بينما يقوم كل cmdbuf فقط بتوصيف المخازن المؤقتة للأوامر بأكملها بشكل إجمالي. |
GpuProfilerConfig.StartFrame | عدد صحيح موجب | الإطار الأول لالتقاط البيانات ل. إذا لم يتم تعيين StartFrame وFrameCount، فسيتم تعريف جميع الإطارات. |
GpuProfilerConfig.FrameCount | عدد صحيح موجب | عدد الإطارات التي سيتم التقاط البيانات لها. |
GpuProfilerConfig.RecordPipelineStats | 0، 1 | يجمع بيانات الاستعلام الإحصائية لخط الأنابيب لكل إدخال إذا تم تمكينه. |
يمكنك استخدام البرنامج النصي TimingReport.py لتحليل سجل التوصيف:
python timingReport.py
يتضمن إخراج timeReport.py معلومات أهم خطوط الأنابيب كما هو موضح أدناه:
Top Pipelines (>= 1%)
Compiler Hash | Type | Avg. Call Count | Avg. GPU Time [us] | Avg. Frame %
1. 0xd91d15e42d62dcbb | VsPs | 43 | 11,203.15 | 10.20 %
2. 0x724e9af55f2adf1b | Cs | 1 | 9,347.50 | 8.51 %
3. 0x396e5ad6f7a789f7 | VsHsDsPs | 468 | 8,401.35 | 7.65 %
يمكنك إضافة الإعدادات التالية إلى amdPalSettings.cfg لتفريغ المعلومات الخاصة بكل خط أنابيب:
EnablePipelineDump,1
PipelineDumpDir,
PipelineDumpDir هو مسار فرعي يتعلق بـ $AMD_DEBUG_DIR أو $TMPDIR أو /var/tmp/، والقيمة الافتراضية هي "spvPipeline/". تتم تسمية ملف تفريغ خط الأنابيب بتنسيق مثل Pipeline
يمكن تمكين تراكب تصحيح الأخطاء الخاص بـ PAL لعرض الإحصائيات والمعلومات في الوقت الفعلي أعلى التطبيق قيد التشغيل. يتضمن ذلك متوسط FPS المتداول، وأوقات إطارات وحدة المعالجة المركزية ووحدة معالجة الرسومات، ودفتر أستاذ يتتبع مقدار ذاكرة الفيديو التي تم تخصيصها من كل كومة الذاكرة المؤقتة المتوفرة. قياس الأداء (على سبيل المثال، "قياس الأداء (F11)") غير مدعوم حاليًا.
اسم الإعداد | قيمة | تعليق |
---|---|---|
DebugOverlayEnabled | 0، 1 | تمكين تراكب التصحيح. |
DebugOverlayConfig.DebugOverlayLocation | 0: أعلى اليسار 1: أعلى اليمين 2: أسفل اليسار 3: أسفل اليمين | يحدد المكان الذي يجب أن يتم عرض نص التراكب فيه. يمكن استخدامه لتجنب الاصطدام بالعرض المهم بواسطة التطبيق. |
DebugOverlayConfig.PrintFrameNumber | 0، 1 | يُبلغ عن رقم الإطار الحالي. مفيد عند تحديد نطاق إطار جيد للتوصيف باستخدام طبقة GpuProfiler. |
DebugOverlayConfig.TimeGraphEnable | 0، 1 | لتمكين عرض رسم بياني لأوقات إطارات وحدة المعالجة المركزية ووحدة معالجة الرسومات الحديثة. |
يحتوي برنامج تشغيل AMD مفتوح المصدر لـ Vulkan على تعليمات برمجية مكتوبة بواسطة جهات خارجية.
المعلومات الواردة هنا هي لأغراض إعلامية فقط، وهي عرضة للتغيير دون إشعار. قد يحتوي هذا المستند على معلومات فنية غير دقيقة وسهو وأخطاء مطبعية، ولا تتحمل شركة AMD أي التزام بتحديث هذه المعلومات أو تصحيحها بأي شكل آخر. لا تقدم شركة Advanced Micro Devices, Inc. أي تعهدات أو ضمانات فيما يتعلق بدقة محتويات هذا المستند أو اكتمالها، ولا تتحمل أي مسؤولية من أي نوع، بما في ذلك الضمانات الضمنية الخاصة بعدم الانتهاك أو قابلية التسويق أو الملاءمة لأغراض معينة، فيما يتعلق بـ تشغيل أو استخدام أجهزة AMD أو برامجها أو غيرها من المنتجات الموضحة هنا. لا يمنح هذا المستند أي ترخيص، بما في ذلك الترخيص الضمني أو الناشئ عن طريق الإغلاق الحكمي، لأي حقوق ملكية فكرية. الشروط والقيود المطبقة على شراء أو استخدام منتجات AMD هي كما هو منصوص عليه في اتفاقية موقعة بين الطرفين أو في شروط وأحكام البيع القياسية الخاصة بشركة AMD.
تعد AMD وشعار AMD Arrow وRadeon وFirePro ومجموعاتها علامات تجارية لشركة Advanced Micro Devices, Inc. وأسماء المنتجات الأخرى المستخدمة في هذا المنشور هي لأغراض التعريف فقط وقد تكون علامات تجارية للشركات المعنية.
Vega هو اسم رمزي لهندسة AMD، وليس اسم منتج.
Linux هي علامة تجارية مسجلة لشركة Linus Torvalds في الولايات المتحدة وبلدان أخرى.
Vulkan وشعار Vulkan هما علامتان تجاريتان مسجلتان لشركة Khronos Group, Inc.