我需要一些帮助来理解GPU上的内核与CPU中的内核的概念,以便进行并行计算。
说到CPU中的核心,看起来很简单。我有一个超级密集的“for”循环,迭代四次。我的Intel i5 2.26GHz CPU有四个内核。我给每个核心一个循环。四个循环中的每一个都独立于另一个。繁荣 - 我现在创建了四个线程和100%CPU使用率(而不是只有一个核心的25%CPU使用率)。我的“for”循环现在运行速度比没有并行化时快四倍。顺便说一下,对于“for”循环,我使用了Microsoft Visual Studio 2012上提供的自动并行化,如在线示例所示:(http://msdn.microsoft.com/en-us/library/hh872235.aspx)。
相比之下,我甚至不知道我可以用于并行计算的笔记本电脑GPU(英特尔图形媒体加速器HD,或英特尔高清显卡,1696MB共享内存)中的内核数量。我甚至不知道将GPU与CPU进行比较的有效方法。当我在我的显卡描述旁边看到“12 @ 500MHz”时,我想知道这是否意味着显卡有12个并行核心,可以像CPU中的4个内核一样工作,除了GPU核心运行在500MHz [慢而不是2.26GHz [快]? GPU使用率是否与Windows任务管理器中的CPU使用率相当?我是一个试图在visual studio 2012中使用C ++库的新手,如果这有任何区别的话。当我编写实际的GPU软件时,并行化代码如下所示:(http://msdn.microsoft.com/en-us/library/hh265137.aspx)。
那么,请您填写我的知识中的一些空白或错误,或者帮助我比较两者?我不需要一个非常复杂的答案,就像“由于空白空白而无法将CPU核心与GPU核心进行比较”或“GPU核心不像CPU核心那样真正的核心”这样简单非常感谢。
答案 0 :(得分:4)
首先,只有当您在代码中询问时,操作系统才会启动更多内核。尝试使用OpenMP或Win32线程在i5上实现并行性。
其次,CPU时钟不仅仅是GPU时钟。如果GPU的时钟与CPU相同,您可以将其用作炉子烹饪。 GPU中的核心不仅仅是CPU。线程和核心之间存在差异。
第三,我建议您阅读CPU和GPU的规格和参考手册。另外,不要忘记PCI-e。它是并行编程实现的瓶颈。
希望这能澄清你的疑虑。还有其他问题,请随时提出。