ฉันจะตั้งค่าแอปพลิเคชันของฉันให้ทำงานบน GPU ประสิทธิภาพสูงเป็นค่าเริ่มต้นได้อย่างไร


12

ปัจจุบันแล็ปท็อปจำนวนมากมาพร้อมกับ GPU 2 ตัวซึ่งเป็นรุ่นที่มีประสิทธิภาพสูงและรุ่นประหยัดพลังงานหนึ่งตัว (มีประสิทธิภาพน้อยลง) แอพพลิเคชั่นส่วนใหญ่ที่ฉันใช้บนแล็ปท็อปของฉันทำงานด้วย GPU ในตัว (ประหยัดพลังงาน) แต่ก็ยังมีบางส่วนที่เปิดไว้พร้อมการ์ดประสิทธิภาพสูง ฉันพยายามกำหนดค่าแอพที่ฉันกำลังสร้างเพื่อให้ทำงานบน GPU ประสิทธิภาพสูงโดยค่าเริ่มต้น แต่ฉันไม่สามารถหาข้อมูลเกี่ยวกับหัวข้อใดก็ได้ ฉันหวังว่าบางคนสามารถหลั่งน้ำตาของแสงนี้ ฉันจะแจกจ่ายแอปพลิเคชันของฉันด้วยโปรแกรมติดตั้ง NSIS และฉันเดาว่าฉันจะต้องเพิ่มเส้นทางของแอปพลิเคชันของฉันไปยังรายการแอปพลิเคชันสำหรับการ์ด NVidia / ATI แอปพลิเคชันได้รับการโปรแกรมใน C # นอกจากนี้ไม่มีใครรู้ว่าสิ่งที่ยืนอยู่กับเดสก์ทอปพีซี? จะเกิดอะไรขึ้นถ้าพีซีมี GPU 2 ตัวและฉันต้องเลือกอันทรงพลังมากขึ้น?

Milcho

คำตอบ:


7

NVIDIA มีเอกสารสรุปกลยุทธ์บางอย่างที่อาจเป็นประโยชน์สำหรับคุณ: http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf - น่าเสียดายที่ข้าอยากจะแนะนำ NvOptimusEnablement ส่งออก - เป็นเอกสารสำหรับ C ++ เท่านั้น อาจเป็นไปได้ที่จะทำเช่นนี้กับ C # แต่คนที่รู้จริงจะต้องพูดสอดกับข้อมูล

ฉันไม่ได้ตระหนักถึงสิ่งที่คล้ายกันสำหรับ AMD

ดังนั้นน่าเสียดายที่ดูเหมือนว่าไม่มีวิธีที่ผู้จำหน่ายไม่เชื่อในการทำเช่นนี้ (แม้การแจกแจงอุปกรณ์แสดงผลจะทำให้คุณอยู่ในความเมตตาของผู้ใช้ที่บังคับให้ตั้งค่าผ่านแผงควบคุมไดรเวอร์ซึ่งผู้ใช้มีแนวโน้มที่น่าเสียดาย เกมที่ไม่ได้มาพร้อมการตั้งค่ากราฟิกที่ปรับแต่งได้อย่างเต็มที่) ในกรณีที่ไม่มีคุณอาจต้องใช้ readme และหวังว่าผู้คนจะอ่านมัน!


+1: ฉันไม่รู้จักNvOptimusEnablementเคล็ดลับOptimus นี้แต่ควรมี ดูเหมือนว่ามันเป็นสิ่งล่าสุด (คนขับ 302.x +) ขอบคุณ
Sean Middleditch

1
stackoverflow.com/questions/17458803/… สำหรับคนอื่น ๆ ที่อยากรู้เกี่ยวกับรายการเทียบเท่าของ AMD ฉันถามคำถามนี้ (บน SO เนื่องจากไม่ใช่เกมเฉพาะ)
Sean Middleditch

1
คุณสามารถเรียกใช้ฟังก์ชัน C ++ จาก C # โดยใช้ p / invoke เป็นทางเลือกสุดท้าย
BlueRaja - Danny Pflughoeft

@ BlueRaja-DannyPflughoeft - ไม่ใช่ฟังก์ชัน C ++; มันเป็นตัวแปรทั่วโลกที่ส่งออก
Maximus Minimus

5

โดยทั่วไปแล้วคุณไม่สามารถ

ไดร์เวอร์แบบ dual-GPU ซ่อนสอง GPU ไว้ด้านหลังอินเทอร์เฟซเดียวดังนั้นโซลูชันเช่น Nathan Reed โดยทั่วไปจะไม่ทำงานในการตั้งค่า GPU แบบคู่ความเร็วสูง / พลังงานต่ำ

การเลือก GPU จะต้องได้รับการจัดการโดยไดรเวอร์ในบางวิธี ด้วย NVIDIA Optimus คุณมักจะอัพเดตโปรไฟล์ Optimus เพื่อเพิ่มแอพพลิเคชั่นไปยังรายการแอพพลิเคชั่นที่ใช้ GPU แยกโดยทั่วไปโดยคลิกขวาที่ EXE และคลิกที่ Properties นอกจากนี้คุณยังสามารถใช้การโทรที่เฉพาะเจาะจงมากที่สุดเพื่อ Optimus ตามคำตอบของ mh01 ด้วยการตั้งค่าของ AMD สิ่งนี้แตกต่างอย่างสิ้นเชิง

ในระบบอื่น ๆ ยังมีสวิตช์ฮาร์ดแวร์หรือธงระบบปฏิบัติการเพื่อตัดสินว่า GPU ตัวใดเปิดใช้งานอยู่ แอปพลิเคชั่นไม่สามารถควบคุมได้ว่าจะใช้ GPU ตัวใด

นี่คือสิ่งที่ฉันหวังว่า "คงที่" ในการอัพเดท DirectX ในอนาคต โดยหลักการแล้ว GPU ทั้งสองตัวจะมีการแจกแจงอย่างที่ Nathan แนะนำไว้และจะมีคำแนะนำในการบ่งบอกว่าเป็นแบบใดสำหรับความเร็วสูงหรือพลังงานต่ำดังนั้นแอปพลิเคชันสามารถเลือกหนึ่งหรือแม้กระทั่งอุปกรณ์ที่ใช้อย่างชาญฉลาด ปัจจัย (เช่นให้เว็บเบราว์เซอร์เลือกขึ้นอยู่กับโหลดของ WebGL)


อ่าน่าสนใจ ฉันไม่ได้ใช้หนึ่งในระบบ dual-GPU เหล่านี้ดังนั้นฉันจึงไม่ทราบว่าไดรเวอร์แสร้งทำเหมือนกัน คุณคิดว่าคนขับสามารถตรวจสอบระดับการใช้ GPU ของแอพที่กำหนดและเปลี่ยนเป็นแอพที่มีประสิทธิภาพสูงในกรณีที่จำเป็น
นาธานรีด

1
มันไม่สามารถ ฮาร์ดแวร์มีความสามารถแตกต่างกัน ลองนึกภาพถ้าคุณเปลี่ยนจาก GPU ที่มีขนาดพื้นผิวสูงสุด 2048 เป็นหนึ่งด้วยสูงสุด 1024 หรือลักษณะอื่น ๆ - แอปทั้งหมดของคุณจะแตก ถ้าหากไปที่ GPU ที่มีความสามารถมากกว่านี้ในทุก ๆ ครั้งบัฟเฟอร์จะต้องทำการโยกย้าย (ใช้เวลาและทำให้เกิดการแฮ็กเฟรมที่ไม่ต้องการ) และตัวขัดเงาจะต้องมีการคอมไพล์ใหม่ แอพต้องรับผิดชอบกระบวนการนี้และเลือกหรือยกเลิกการใช้สวิตช์ใด ๆ APIs สำหรับมันยังไม่ได้รับการแก้ไข แต่น่าเสียดายที่
Sean Middleditch

1
สิ่งนี้ซับซ้อนเนื่องจากผู้ใช้มักต้องการแทนที่การสลับ GPU บนแล็ปท็อปของพวกเขาบางทีเพื่อประหยัดแบตเตอรี่ นี่คือเหตุผลหนึ่งที่ฉันชอบมอบหมายการสลับ GPU กับระบบปฏิบัติการเพราะมันรู้สถานะพลังงานของแล็ปท็อป
ชื่อปลอม

4

คุณควรจะสามารถระบุ GPU ในระบบและเลือกว่าจะใช้อันไหนเมื่อเริ่มต้นแอปพลิเคชันของคุณ คุณไม่ได้พูดถึงซึ่ง API คุณกำลังใช้ แต่เช่นใน D3D11 คุณต้องการใช้IDXGIFactory :: EnumAdaptersที่จะได้รับรายชื่อของ GPUs และผ่านที่คุณต้องการที่จะD3D11CreateDevice

DXGI สามารถให้ข้อมูลที่ จำกัด เกี่ยวกับ GPU เช่นสตริงคำอธิบายรหัสผู้จำหน่ายและรหัสอุปกรณ์ ฉันคิดว่าคุณสามารถใช้ข้อมูลนี้เพื่อบอกว่า GPU ตัวใดเป็นประสิทธิภาพสูง แต่คุณต้องสร้างฐานข้อมูลของ GPU บางประเภทหรือลองใช้ฮิวริสติกเพื่อคาดเดา หรือคุณสามารถให้ผู้ใช้เลือก GPU ที่จะใช้เมื่อเริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.