完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我有一个应用程序,我想在具有M60的VM中运行,该应用程序需要GPU加速显示。
在裸机硬件上,此应用程序通常覆盖4个显示器,但在VM中,我只能在NVIDIA控制面板中显示一个桌面。 如何在NVIDIA控制面板中显示多个显示? 我需要欺骗EDID吗? 以上来自于谷歌翻译 以下为原文 I have an application that I want to run in a VM with an M60, that application requires GPU accelerated displays. On bare metal hardware this application typically covers 4 Displays but in the VM I can only get one Desktop to show up in the NVIDIA Control Panel. How can I get multiple displays to show up in the NVIDIA Control Panel? Do I need to spoof EDID? |
|
相关推荐
3个回答
|
|
从技术上讲,是的。
可以使用Nvidia NvAPI EDID上载(NvAPI_GPU_SetEDID())启用更多监视器,直到vGPU配置文件监视器/显示限制计数(NvAPI_GPU_GetAllDisplayIds()/ NvAPI_GPU_GetConnectedDisplayIds())。 使用指定的EDID启用/禁用辅助监视器/显示的演示代码: NvAPI_Status ret; NvU32 nDisplayIds = 0; NvU32 physicalGpuCount = 0; NV_GPU_DISPLAYIDS pDisplayIds [NVAPI_MAX_DISPLAYS]; NvPhysicalGpuHandle hPhysicalGpu [NVAPI_MAX_PHYSICAL_GPUS]; NV_EDID edid; ret = NvAPI_Initialize(); if(ret!= NVAPI_OK)返回-1; //枚举物理GPU句柄并获取DisplayID ret = NvAPI_EnumPhysicalGPUs(hPhysicalGpu,& physicalGpuCount); if(ret!= NVAPI_OK)返回-1; //查询显示ID的总数 printf(“物理GPU:%d n”,physicalGpuCount); ret = NvAPI_GPU_GetAllDisplayIds(hPhysicalGpu [0],NULL,& nDisplayIds); if(ret!= NVAPI_OK)返回-1; printf(“在physical [0]上显示:%d n”,nDisplayIds); //将所有显示ID检索到pDisplayID中 pDisplayIds [0] .version = NV_GPU_DISPLAYIDS_VER; ret = NvAPI_GPU_GetAllDisplayIds(hPhysicalGpu [0],pDisplayIds,& nDisplayIds); if(ret!= NVAPI_OK)返回-1; //设置EDID memset(& edid,0,sizeof(edid)); edid.version = NV_EDID_VER; memcpy(edid.EDID_Data,remoteEDID,sizeof(remoteEDID)); edid.sizeofEDID = sizeof(remoteEDID); //设置EDID以启用监视器(在重新启动之间保持不变) //edid.sizeofEDID = 0; //删除EDID以禁用监视器 printf(“物理[0]显示[1] n”的NvAPI_GPU_SetEDID); ret = NvAPI_GPU_SetEDID(hPhysicalGpu [0],pDisplayIds [1] .displayId,& edid); if(ret!= NVAPI_OK)返回-1; 您可以制作自己的远程VDI协议(https://gridforums.nvidia.com/default/topic/752/benchmarks/vdi-click-to-photon-with-raspberry-pi/)或使用“VMware Horizon / PCoIP / Blast Extreme“,”Citrix ICA / HDX“或”RedHat SPICE“(以及许多其他的https://www.leostream.com/blog/making-vdi-work-choosing-a-display-protocol)应扫描EDID 在远程VDI客户端上连接监视器并将其转发回VDI服务器,捕获桌面(通常使用NVidia Capture API),编码(通常使用NVidia Codec API)并将编码屏幕转发到VDI客户端。 以上来自于谷歌翻译 以下为原文 Technically, yes. The more monitors can be enabled with Nvidia NvAPI EDID upload (NvAPI_GPU_SetEDID()) upto vGPU profile monitor/displays limit count (NvAPI_GPU_GetAllDisplayIds()/NvAPI_GPU_GetConnectedDisplayIds()). Demo code to enable/disable secondary monitor/display with specified EDID: NvAPI_Status ret; NvU32 nDisplayIds = 0; NvU32 physicalGpuCount = 0; NV_GPU_DISPLAYIDS pDisplayIds[NVAPI_MAX_DISPLAYS]; NvPhysicalGpuHandle hPhysicalGpu[NVAPI_MAX_PHYSICAL_GPUS]; NV_EDID edid; ret = NvAPI_Initialize(); if (ret != NVAPI_OK) return -1; // Enumerate the physical GPU handle and get the DisplayID ret = NvAPI_EnumPhysicalGPUs(hPhysicalGpu, &physicalGpuCount); if (ret != NVAPI_OK) return -1; // Query the total number of Display IDs printf("physical GPUs: %dn", physicalGpuCount); ret = NvAPI_GPU_GetAllDisplayIds(hPhysicalGpu[0], NULL, &nDisplayIds); if (ret != NVAPI_OK) return -1; printf("displays on physical[0]: %dn", nDisplayIds); // Retrieve all of the Display IDs into pDisplayIDs pDisplayIds[0].version = NV_GPU_DISPLAYIDS_VER; ret = NvAPI_GPU_GetAllDisplayIds(hPhysicalGpu[0], pDisplayIds, &nDisplayIds); if (ret != NVAPI_OK) return -1; // set EDID memset(&edid, 0, sizeof(edid)); edid.version = NV_EDID_VER; memcpy(edid.EDID_Data, remoteEDID, sizeof(remoteEDID)); edid.sizeofEDID = sizeof(remoteEDID);// to set EDID to enable monitor (it is persistent between reboots) //edid.sizeofEDID = 0;// to remove EDID to disable monitor printf("NvAPI_GPU_SetEDID for physical[0] display[1]n"); ret = NvAPI_GPU_SetEDID(hPhysicalGpu[0], pDisplayIds[1].displayId, &edid); if (ret != NVAPI_OK) return -1; You can make your own remoting VDI protocol (https://gridforums.nvidia.com/default/topic/752/benchmarks/vdi-click-to-photon-with-raspberry-pi/) or use "VMware Horizon/PCoIP/Blast Extreme", "Citrix ICA/HDX" or "RedHat SPICE" (and many others https://www.leostream.com/blog/making-vdi-work-choosing-a-display-protocol) that should scan EDID of attached monitor on remote VDI client and forward it back to VDI server, capture desktop (usually with NVidia Capture API), encode (usually with NVidia Codec API) and forward encoded screen to VDI client. |
|
|
|
我为我的无知道歉,在哪里可以找到有关如何使用此代码的文档?
以上来自于谷歌翻译 以下为原文 My apologies for my ignorance, where can I find documentation on how to use this code? |
|
|
|
EDID上传代码适用于NvAPI - https://developer.nvidia.com/nvapi和https://devtalk.nvidia.com/default/board/77/nvapi/。
正如我所写的那样,如果您使用VDI供应商的一些“专业”解决方案(包括这样的代码)则无关紧要。 您应该要求他们进行营销jabbering,产品组合和$$$许可费用和/或向NGCA(http://www.nvidia.com/object/vgpu-advisory-council.html)询问实施者,例如后天 @ http://info.nvidia.com/vdi-panel-discussion-2018-aug-reg-page.html。 以上来自于谷歌翻译 以下为原文 The EDID upload code is for NvAPI - https://developer.nvidia.com/nvapi and https://devtalk.nvidia.com/default/board/77/nvapi/. As I wrote it is irrelevant if you are using some "professional" solution from VDI vendors that should include such a code. You should ask them for marketing jabbering, product portfolio and $$$ licensing fees and/or ask implementors from NGCA (http://www.nvidia.com/object/vgpu-advisory-council.html) for example the day after tomorrow @ http://info.nvidia.com/vdi-panel-discussion-2018-aug-reg-page.html. |
|
|
|
只有小组成员才能发言,加入小组>>
使用Vsphere 6.5在Compute模式下使用2个M60卡遇到VM问题
3127 浏览 5 评论
是否有可能获得XenServer 7.1的GRID K2驱动程序?
3533 浏览 4 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 20:03 , Processed in 0.932582 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号