我的笔记本电脑同时具有Intel集成显卡和NVidia专用显卡,我可以通过右键单击菜单选择运行特定程序的计算机。我正在学习OpenGL,并渲染了一个基本的多维数据集,并将两者的帧率进行了比较。我很惊讶地发现,在专用显卡上它的速度约为600 FPS,而在集成显卡上它的速度约为1300 FPS,这没有任何意义……有人知道为什么吗?这是相关的渲染代码:
GLuint VBO;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(VertexData), VertexData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
GLuint VAO;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
GLuint ElementArray;
glGenBuffers(1, &ElementArray);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ElementArray);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(ElementData), ElementData, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
size_t ColorData = 4 * 8 * sizeof(float);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, (void*)ColorData);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ElementArray);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glFrontFace(GL_CW);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LEQUAL);
glDepthRange(0.0f, 1.0f);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClearDepth(1.0f);
glBindVertexArray(VAO);
while(!Window.ShouldClose())
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawElements(GL_TRIANGLE_FAN, 8, GL_UNSIGNED_SHORT, 0);
glDrawElements(GL_TRIANGLE_FAN, 8, GL_UNSIGNED_SHORT, (void*) (8*sizeof(GLshort)));
Window.PollEvents();
Window.SwapBuffers();
}
也许是驾驶员效率低下?
如果有帮助,我的集成显卡芯片组是Intel HD Graphics 4000,我的专用显卡是Geforce GT 630 M,我的CPU是Core i5 3230M,具有6 GB RAM
最佳答案
我假设第二个是集成图形,而不是专用的,正如woostar评论的那样。
从内存来看,英特尔集成GPU可以直接与cpu和/或内存对话,因此,对于视频编码而言,它过去比专用GPU可以获得更好的性能。
话虽如此,但与新一代GPU(拼写为“便宜”)相比,它们内部通常是垃圾。
另外,请注意,它绝对没有区别,因为无论如何您都不会注意到600 fps和1300 fps之间的区别(只考虑您的屏幕刷新率:))。
可能在您加载更多内容后,您可能会看到不同的结果,但这应为您提供“为什么”的基本概念。
即使已将其标记为已回答,也可以在上面阅读以下一些额外的链接: