为了进行并行计算,我需要一些帮助来理解 GPU 上的内核与 CPU 中的内核的概念。
当谈到 CPU 中的内核时,这似乎很简单。我有一个 super 密集的“for”循环,它迭代四次。我的 Intel i5 2.26GHz CPU 有四个内核。我给每个核心一个循环。四个循环中的每一个都相互独立。 Boom - 我现在创建了四个线程并且 CPU 使用率为 100%(而不是只有一个内核时 CPU 使用率为 25%)。我的“for”循环现在的运行速度几乎是我没有并行化时的四倍。顺便说一下,对于“for”循环,我使用了 Microsoft Visual Studio 2012 上可用的自动并行化,如这个在线示例:( http://msdn.microsoft.com/en-us/library/hh872235.aspx )。
相比之下,我什至不知道我的笔记本电脑 GPU(Intel Graphics Media Accelerator HD,或 Intel HD Graphics,具有 1696MB 共享内存)中可用于并行计算的内核数量。我什至不知道将 GPU 与 CPU 进行比较的有效方法。当我在我的显卡描述旁边看到“12@500MHz”时,我想知道这是否意味着显卡有 12 个并行化内核,可以像 CPU 中的 4 个内核一样工作,除了 GPU 内核运行在 500MHz [慢] 而不是 2.26GHz [快]?是否有与 Windows 任务管理器中的 CPU 使用率相当的 GPU 使用率?我是一个完全新手,试图在 Visual Studio 2012 中使用 C++ 库,如果这有什么不同的话。当我编写实际的 GPU 软件时,并行化代码如下所示:( http://msdn.microsoft.com/en-us/library/hh265137.aspx )。
那么,请您填补我知识中的一些空白或错误,或者帮助我比较两者?我不需要一个 super 复杂的答案,就像“由于空白而无法将 CPU 内核与 GPU 内核进行比较”或“GPU 内核并不是真正像 CPU 内核那样的内核”这样简单的答案。非常感谢。
最佳答案
首先,只有当您在代码中要求时,操作系统才会启动更多内核。尝试使用 OpenMP 或 Win32 线程在 i5 上实现并行性。
其次,CPU 时钟比 GPU 时钟多。如果 GPU 的时钟与 CPU 相同,则可以将其用作炉灶来做饭。 GPU 中的核心不仅仅是 CPU。线程和核心之间存在差异。
第三,我建议您阅读 CPU 和 GPU 的规范和引用手册。另外,不要忘记 PCI-e。它是并行编程实现的瓶颈。
希望这能澄清您的疑虑。如有更多问题,请随时提问。
关于multithreading - GPU vs CPU? GPU中用于程序计算加速的内核/线程数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16138688/