Vulkan®용 AMD 오픈 소스 드라이버는 Linux®의 Radeon™ 그래픽 어댑터용 오픈 소스 Vulkan 드라이버입니다. 이는 많은 AMD 3D 및 컴퓨팅 드라이버에 대한 특정 하드웨어 및 OS별 프로그래밍 세부 정보를 캡슐화하도록 설계된 공유 구성 요소인 AMD 플랫폼 추상화 라이브러리(PAL)를 기반으로 구축되었습니다. PAL을 활용하면 최근 출시된 GPU 지원 및 AMD 개발자 도구와의 호환성을 포함하여 플랫폼 전반에 걸쳐 일관된 경험을 제공하는 데 도움이 될 수 있습니다.
특정 VkPipeline
객체를 구성하는 셰이더는 LLPC(LLVM 기반 파이프라인 컴파일러) 라이브러리를 사용하여 단일 엔터티로 컴파일됩니다. LLPC는 AMD GPU용 LLVM의 기존 셰이더 컴파일 인프라를 기반으로 PAL의 파이프라인 ABI와 호환되는 코드 개체를 생성합니다. 특히, AMD의 폐쇄 소스 Vulkan 드라이버는 현재 다른 파이프라인 컴파일러를 사용하는데, 이는 AMD의 오픈 소스와 폐쇄 소스 Vulkan 드라이버 간의 주요 차이점입니다.
Vulkan용 AMD 오픈 소스 드라이버는 다음 AMD GPU를 지원하도록 설계되었습니다.
참고 GFX10 이전 GPU의 경우 v-2023.Q3.3 또는 이전 릴리스를 사용하십시오.
Vulkan용 AMD 오픈 소스 드라이버는 AMDGPU 업스트림 드라이버 스택과 AMDGPU Pro 드라이버 스택 모두에서 다음 배포판과 버전을 지원하도록 설계되었습니다.
드라이버는 다른 배포판 및 버전에서 제대로 테스트되지 않았습니다. 원하는 다른 배포판과 버전에서 사용해 볼 수 있습니다.
참고 SI 및 CI 생성 GPU에서 AMDGPU 업스트림 드라이버 스택을 사용하여 Vulkan 드라이버를 실행하려면 amdgpu.si_support 및 amdgpu.cik_support를 커널에서 활성화해야 합니다.
Vulkan용 AMD 오픈 소스 드라이버는 다음 기능을 지원하도록 설계되었습니다.
향후 릴리스에서는 다음 기능과 개선 사항이 계획되어 있습니다(각 릴리스의 업데이트는 릴리스 노트를 참조하십시오).
uname -r
uname -r
또는 sudo mkinitcpio --generate /boot/initrd .img- uname -r
uname -r
)Vulkan용 AMD 오픈 소스 드라이버에 대한 코드 기여를 제출하실 수 있습니다.
드라이버는 LLVM, XGL, LLPC, GPURT 및 PAL의 5개 리포지토리에 있는 소스 코드로 구축되었습니다.
LLVM에 대한 변경 사항의 경우 LLVM 트렁크에 기여를 제출해야 합니다. 거기에서 커밋은 주기적으로 amd-gfx-gpuopen-master 브랜치에 병합되도록 평가됩니다.
XGL, LLPC, GPURT 및 PAL을 변경하려면 dev 브랜치 에 대한 풀 요청을 생성하세요. 변경 사항을 검토한 후 승인되면 후속 정기 프로모션에서 마스터 브랜치로 병합되도록 평가됩니다.
중요 : 끌어오기 요청을 생성하면 MIT 라이선스 조건에 따라 프로젝트 소유자가 귀하의 기여에 라이선스를 부여하는 데 동의하게 됩니다.
XGL, LLPC, GPURT 및 PAL에 기여할 때 코드는 다음과 같아야 합니다.
각 기부금을 합리적으로 작게 만드십시오. 새로운 기능이나 확장과 같이 큰 기여를 하고 싶다면 먼저 문제를 제기하여 작업을 평가하고 검토할 수 있도록 하세요.
참고 PAL은 다른 API, 다른 운영 체제 및 사전 프로덕션 하드웨어를 지원해야 하는 공유 구성 요소이므로 순수 Linux Vulkan 드라이버 관점에서는 명확하지 않을 수 있는 이유로 PAL 변경 사항을 수정하라는 요청을 받을 수 있습니다.
빌드 시스템에 최소 16GB RAM을 설치하는 것이 좋습니다.
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
레이트레이싱 지원을 구축하려면 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 ../../
amdvlk 드라이버 빌드 전에 env PATH 및 LD_LIBRARY_PATH를 설정하십시오.
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
참고 "repo init" 명령에 "-b dev"를 사용하면 dev 브랜치의 소스 코드를 얻을 수 있습니다.
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)를 빌드하려면 repo init에
-m build_with_tools.xml
추가하고 빌드 옵션-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
사용자 정의된 디렉터리에 드라이버를 설치하려면 cmake 빌드 명령에 "-DCMAKE_INSTALL_PREFIX={설치 디렉터리}"를 추가하면 됩니다. JSON 파일은 /etc/vulkan/icd.d에 설치되고 다른 파일은 지정한 설치 디렉터리에 설치됩니다.
RADV도 시스템에 설치되어 있는 경우 AMDVLK 드라이버는 설치 후 기본적으로 활성화됩니다. 환경 변수 AMD_VULKAN_ICD = AMDVLK 또는 RADV를 사용하여 AMDVLK와 RADV 간에 드라이버를 전환할 수 있습니다.
참고: 나머지 단계는 AMDGPU 업스트림 드라이버 스택을 실행할 때만 필요합니다.
/usr/share/X11/xorg.conf.d/10-amdgpu.conf에 다음 줄을 추가합니다.
Section "Device"
Identifier "AMDgpu"
Option "DRI" "3"
EndSection
그리고 섹션에 다음 줄이 포함되어 있지 않은지 확인하세요.
Driver "modesetting"
libdrm 버전이 2.4.92보다 낮은 AMDGPU 업스트림 드라이버 스택에서 제출당 최대 IB 수는 4로 제한되어야 합니다 (Vulkan용 AMD 오픈 소스 드라이버의 기본 설정은 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: 모든 제출을 삭제합니다. | 무한히 빠른 하드웨어. 제출 호출은 하드웨어로 전송되기 전에 삭제됩니다. CPU 제한 성능을 측정하는 데 유용합니다. |
EnableVmAlwaysValid | 0: 비활성화 1: 기본값 2: 강제 활성화 | 1은 커널 4.16 이상에 대해 VM-always-valid 기능을 활성화하는 기본 설정입니다. 이 기능은 가상 메모리 관리와 관련된 명령 버퍼 제출 오버헤드를 줄일 수 있습니다. |
IdleAfterSubmitGpuMask | GPU의 비트마스크(즉, 비트 0은 GPU0 등) | 지정된 GPU 세트에서 각 GPU 제출이 완료될 때까지 CPU가 즉시 기다리도록 합니다. |
사용 가능한 모든 설정은 해당 설정을 정의하는 아래 소스 파일을 검사하여 확인할 수 있습니다.
런타임 설정은 장치 초기화 시에만 읽혀지며 애플리케이션을 다시 시작하지 않으면 변경할 수 없습니다. 여러 GPU가 있는 시스템에서 실행하는 경우 모든 GPU에 동일한 설정이 적용됩니다. ;
로 시작하는 설정 파일의 줄 댓글로 처리됩니다.
개발 중인 확장은 드라이버에서 기본적으로 활성화되지 않습니다. 환경 변수를 통해 활성화할 수 있습니다.
export AMDVLK_ENABLE_DEVELOPING_EXT=" [...]"
또는
export AMDVLK_ENABLE_DEVELOPING_EXT="all"
확장명 이름은 대소문자를 구분하지 않습니다.
GpuProfiler는 기본 GPU 프로파일링 지원을 제공하기 위해 PAL 인터페이스를 가로채도록 설계된 선택적 레이어입니다. 현재 이 레이어는 런타임 설정을 통해서만 제어되며 그 결과를 파일로 출력합니다.
다음 런타임 설정을 사용하여 애플리케이션의 지정된 프레임 동안 수행된 작업의 GPU 타이밍이 포함된 .csv 파일을 생성할 수 있습니다(프레임당 하나의 파일).
설정 이름 | 값 | 논평 |
---|---|---|
GpuProfilerMode | 0: 비활성화 1: sqtt를 끈 상태에서 활성화 2: 스레드 추적을 위해 sqtt로 활성화 3: RGP에 대해 sqtt를 사용하여 활성화 | GPU 성능 프로파일러 레이어에 대한 SQTT 모드를 활성화하고 설정합니다. 성능 데이터의 실제 캡처는 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 평균, CPU 및 GPU 프레임 시간, 사용 가능한 각 힙에서 할당된 비디오 메모리 양을 추적하는 원장이 포함됩니다. 벤치마킹(예: "벤치마크(F11)")은 현재 지원되지 않습니다.
설정 이름 | 값 | 논평 |
---|---|---|
DebugOverlayEnabled | 0, 1 | 디버그 오버레이를 활성화합니다. |
DebugOverlayConfig.DebugOverlayLocation | 0: 왼쪽 상단 1: 오른쪽 상단 2: 왼쪽 하단 3: 오른쪽 하단 | 오버레이 텍스트가 표시되어야 하는 위치를 결정합니다. 애플리케이션의 중요한 렌더링과의 충돌을 방지하는 데 사용할 수 있습니다. |
DebugOverlayConfig.PrintFrameNumber | 0, 1 | 현재 프레임 번호를 보고합니다. GpuProfiler 레이어를 사용한 프로파일링에 적합한 프레임 범위를 결정할 때 유용합니다. |
DebugOverlayConfig.TimeGraphEnable | 0, 1 | 최근 CPU 및 GPU 프레임 시간 그래프 렌더링을 활성화합니다. |
Vulkan용 AMD 오픈 소스 드라이버에는 제3자가 작성한 코드가 포함되어 있습니다.
여기에 포함된 정보는 정보 제공의 목적으로만 제공되며 예고 없이 변경될 수 있습니다. 이 문서에는 기술적 부정확성, 누락 및 인쇄상의 오류가 포함될 수 있으며 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.의 등록 상표입니다.