Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

优化显卡选择并实现监听显卡变化 #1037

Merged
merged 10 commits into from
Dec 24, 2024
Merged

优化显卡选择并实现监听显卡变化 #1037

merged 10 commits into from
Dec 24, 2024

Conversation

Blinue
Copy link
Owner

@Blinue Blinue commented Dec 24, 2024

这个 PR 引入了对显卡选择的重大更改,配置文件也不再兼容旧版。

一直以来 Magpie 使用索引选择显卡,-1 表示默认显卡(即枚举到的第一个显卡),非负值为枚举适配器的次第。这无法处理显卡变化,最常见的情况是有些笔记本电脑可以在混合架构和独显直连之间切换,这会导致 Magpie 的显卡配置的混乱。

这个 PR 添加了两个额外字段来识别显卡:vendor id 和 device id,索引字段依然存在,作用变为用于区分多个同型号显卡以及作为性能优化。使用以下步骤选择显卡:

  1. 如果索引为 -1,转到第 4 步
  2. 如果索引非负,使用索引获取适配器,检查 vendor id 和 device id 是否匹配以及是否支持 FL 11,失败则进入下一步
  3. 枚举适配器查找 vendor id 和 device id 匹配的显卡,找不到或该显卡不支持 FL 11 则进入下一步
  4. 枚举适配器查找第一个支持 FL11 的显卡,找不到则使用 WARP

新配置可以处理显卡变化,考虑一个典型场景:存在两个显卡,集成显卡 A 和独立显卡 B,配置文件如下:

  • 配置文件 1:idx=-1, (vendorId, deviceId)=0
  • 配置文件 2:idx=0, (vendorId, deviceId)=A
  • 配置文件 3:idx=1, (vendorId, deviceId)=B

配置文件 1 使用默认显卡,配置文件 2 使用显卡 A,配置文件 3 使用显卡 B。

切换到独显直连后显卡 A 不再存在,配置文件将变为:

  • 配置文件 1:idx=-1, (vendorId, deviceId)=0
  • 配置文件 2:idx=-1, (vendorId, deviceId)=A
  • 配置文件 3:idx=0, (vendorId, deviceId)=B

配置文件 1 无需修改,配置文件 2 的显卡已不存在,因此将索引置为 -1 以使用默认显卡,但 vendorId 和 deviceId 不变,配置文件 3 需要更新索引。

再次切换回混合架构,配置文件将变为:

  • 配置文件 1:idx=-1, (vendorId, deviceId)=0
  • 配置文件 2:idx=0, (vendorId, deviceId)=A
  • 配置文件 3:idx=1, (vendorId, deviceId)=B

配置文件 1 无需修改,配置文件 2 由于保留了 vendorId 和 deviceId,可以重新找到显卡 A,索引更新为 0,配置文件 3 需要再次更新索引。注意到现在配置文件和初始状态相同,无论显卡配置如何变化,新配置始终可以找到最合适的显卡。


这个 PR 的其他更改包括:

  • 支持在运行中途监测显卡变化并自动更新配置文件
  • 用户界面不再显示不支持 FL11 的显卡
  • 找不到可用的显卡时显示警告

@Blinue Blinue added the enhancement New feature or request label Dec 24, 2024
@Blinue Blinue merged commit d8dd777 into dev Dec 24, 2024
4 checks passed
@Blinue Blinue deleted the feat/adapter branch December 24, 2024 12:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant