Ở bài đăng trước mình đã hướng dẫn cách chạy ứng dụng chưa hỗ trợ Wayland, trong đó cũng fix được lỗi crash app của Davinci Resolve. Vấn đề tiếp theo như tiêu đề thì đa số ae nào dùng Laptop Optimus có iGPU và dGPU sẽ hay gặp phải. Với trường hợp này iGPU là AMD Radeon và dGPU là Nvidia RTX
Tái hiện lại vấn đề:
- Chạy Davinci Resolve như bình thường
- Trường hợp 1: Tạo project mới
- Video import vào không có preview
- Mở Setting -> Tùy chỉnh -> Chế độ cài đặt GPU
- Menu xổ ra chỉ có OpenCL, không có CUDA
- Phần “Lựa chọn GPU” có chú thích của iGPU là “GPU hiển thị tổng”
- Trường hợp 2: Mở project có sẵn
- Thanh loading treo ở 90% hoặc 100% tùy project
- App không phản hồi buộc phải chờ Terminate hoặc KILL
- Kiểm tra logs:
- Nhập lệnh:
# fish cat ~/.local/share/DaVinciResolve/logs/ResolveDebug.txt | grep ERROR
- Kết quả trả về có dòng:
# fish 0x7f4ff07af000 | DVIP | ERROR | 2000-01-01 00:00:00,000 | Failed to create OpenCL context: 0x7f4ff07af000 | GPU.SingleBoardMgr | ERROR | 2000-01-01 00:00:00,000 | Failed to initialize OpenCL board manager for "<iGPU name>" (gpu:94d8aebe.cdee4eb0): Failed to initialize OpenCL context 0x7f4ff1fb2000 | GPU.SingleBoardMgr | ERROR | 2000-01-01 00:00:00,000 | Failed to initialize SingleBoardManager. 0x7f4ff1fb2000 | GPU.MultiBoardMgr | ERROR | 2000-01-01 00:00:00,000 | Failed to initialize board manager for gpu:94d8aebe.cdee4eb0.
- Nhập lệnh:
Bước giải quyết ban đầu:
- Ép chạy bằng dGPU qua
prime-run
,CUDA_VISIBLE_DEVICES=0
, etc - Mở Setting -> Tùy chỉnh -> Lựa chọn GPU -> Tắt iGPU
- Bật Mux Switch hoặc tương tự để ép dùng dGPU xuất hình
Kết quả: Vẫn lỗi tương tự như trên
Chẩn đoán: Davinci Resolve vẫn sử dụng OpenCL với iGPU và gặp lỗi trước mà không tiếp tục hoặc fallback sang dGPU -> không thể khởi tạo và thực hiện các tác vụ đồ họa tương ứng
Cách giải quyết: Vô hiệu hóa icd của iGPU trong OpenCL để Davinci Resolve không thể tìm và sử dụng được buộc phải chuyển sang dGPU.
# fish
cd /etc/OpenCL/vendors/
ls
# Hiển thị các file có đuôi .icd
# Trong trường hợp này là 2 file `amdocl64.icd` là icd của iGPU AMD và `nvidia.icd` là icd của dGPU Nvidia
sudo mv ./amdocl64.icd ./amdocl64.icd.disabled # Vô hiệu hóa icd của iGPU bằng cách đổi tên
Sau bước này iGPU sẽ bị vô hiệu hóa và Davinci Resolve sẽ tự chuyển sang dGPU và nhận CUDA nếu có.
Lưu ý nho nhỏ:
- Việc disable ICD chỉ ảnh hưởng đến OpenCL/Vulkan/DirectX compute, không làm iGPU ngừng hoạt động hoàn toàn.
- iGPU vẫn hoạt động bình thường cho đồ hoạ hiển thị: desktop, video playback, game, etc
- Nghĩa là chỉ các nền tảng tính toán sẽ không thể sử dụng iGPU (trong trường hợp này chỉ có OpenCL không dùng iGPU được) còn các tác vụ khác, bao gồm cả desktop và chơi game đều có thể chạy qua iGPU để tiết kiệm điện
- Để khôi phục chỉ cần đổi lại tên cũ, ví dụ:
# fish cd /etc/OpenCL/vendors/ && sudo mv ./amdocl64.icd.disabled ./amdocl64.icd
Chúc bạn thành công.