2012-05-10 23 views
23

Tôi đang lập trình một trò chơi DirectX, và khi tôi chạy nó trên một máy tính xách tay Optimus GPU Intel được sử dụng, dẫn đến hiệu suất khủng khiếp. Nếu tôi buộc GPU NVIDIA sử dụng menu ngữ cảnh hoặc bằng cách đổi tên tệp thực thi của tôi thành bf3.exe hoặc một số tên thực thi trò chơi nổi tiếng khác, hiệu suất như mong đợi.
Rõ ràng không phải là một giải pháp có thể chấp nhận khi tôi phải phân phối lại trò chơi của tôi, như vậy là có một cách để lập trình buộc các máy tính xách tay sử dụng GPU NVIDIA?

Tôi đã cố gắng sử dụng DirectX để liệt kê các adapter (IDirect3D9 :: GetAdapterCount, IDirect3D9 :: GetAdapterIdentifier) ​​và nó không hoạt động: chỉ có 1 GPU đang được báo cáo (một trong những sử dụng).Buộc NVIDIA GPU lập trình trong máy tính xách tay Optimus

Trả lời

4

Báo cáo chính thức Optimus tại http://www.nvidia.com/object/LO_optimus_whitepapers.html không rõ ràng chính xác những gì cần trước khi chuyển sang GPU được thực hiện. Báo cáo này cho biết các cuộc gọi DX, DXVA và CUDA được phát hiện và sẽ khiến GPU được bật. Nhưng ngoài ra quyết định dựa trên hồ sơ được duy trì bởi NVIDIA và, tất nhiên, quyết định chưa tồn tại cho trò chơi của bạn.

Một điều để thử sẽ được thực hiện cuộc gọi CUDA, ví dụ để cuInit(0);. Trái ngược với DX và DXVA, không có cách nào để đồ họa tích hợp của Intel xử lý được, vì vậy nó sẽ buộc phải chuyển sang GPU.

+0

Có ai có thành công thực sự với phương pháp này không? Tôi chỉ cố gắng gọi 'cuInit' trước khi tạo bối cảnh OpenGL của mình, và tôi nhận được bối cảnh Intel không phải là bối cảnh của NVIDIA. – rotoglup

+0

@rotoglup: Vui lòng cho chúng tôi biết bạn đang chạy hệ điều hành nào và nếu bạn tìm thấy giải pháp, hãy thêm giải pháp đó làm câu trả lời cho câu hỏi này. –

+0

Tôi đang chạy trình điều khiển Win7 home x64 SP1 + NVidia 296.16. Tôi khá CLUELESS về cách thức tiến hành: các [NVIDIA CUDA Hướng dẫn cho nhà phát triển cho nền tảng NVIDIA Optimus] (http://developer.download.nvidia.com/compute/cuda/docs/CUDA_Developer_Guide_for_Optimus_Platforms.pdf) doc đề cập rằng ràng buộc một OpenGL BUDA không hoạt động trên nền tảng Optimus, nó nói rằng bạn yêu cầu 'hồ sơ ứng dụng' trong Bảng điều khiển NVidia ... Có thể NVAPI cho phép lập trình một hồ sơ như vậy, nhưng trang web dành cho nhà phát triển của NVidia bị ngừng hoạt động. – rotoglup

32

Theo http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf bắt đầu từ trình điều khiển 302 nó là đủ để liên kết tĩnh với một trong những thư viện sau: vcamp110.dll, vcamp110d.dll, nvapi.dll, nvapi64.dll, OpenCL . .dll, nvcuda.dll, cudart * *, hoặc để xuất khẩu một biến NvOptimusEnablement trong chương trình của bạn:

extern "C" { 
    _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; 
} 
+3

+1 cho biến kích hoạt (và liên kết tương ứng); Lưu ý: Không hoạt động cho trình điều khiển 310 của tôi, nhưng hoạt động sau khi cập nhật lên 320 – NobodysNightmare

+1

Cần lưu ý rằng cài đặt bộ xử lý đồ họa ưu tiên trong Bảng điều khiển NVIDIA phải được đặt thành "Tự động chọn" để hoạt động. – Nathan

+0

Tính năng này không hoạt động nữa (GTX 960M - trình điều khiển v385.41) – Matthias

Các vấn đề liên quan