据我了解,有些问题可以高度并行化,例如渲染、视频解码。由于 CPU 在此类任务中表现不佳,因此创建了 GPU。它们使用不同的架构来采用 SIMD 执行。它们还有一种特殊类型的内存,非常适合独立访问 GPU“线程”。
然而,我们看到 x86 架构获得了大量专注于流处理的扩展,例如 SSE 或 AVX。它们也是 SIMD,并且由于某种原因在 CPU 端运行。那么添加它们有什么意义呢?
与常规 GPU 相比,这些扩展有哪些优势?我的意思是 GPU 具有更高的内存带宽和其他性能,但这是否会让具有扩展功能的 CPU 处于劣势?他们不会遇到内存带宽问题吗?
据我所知,并非每台计算机都应该有专用的 GPU,例如服务器或工作站。但如果有效载荷很小,这应该不是问题。如果有效负载足够大,您就会为该任务购买显卡。SIMD 扩展就像 CPU 和 GPU 之间的中间地带。
如果 SIMD 扩展使 CPU 更有能力执行通常由 GPU 执行的任务,那不是会让 GPU 变得更加过时吗?我的意思是,如果他们可以使 CPU 对 SIMD 更加友好,为什么他们不首先做到这一点并决定将这个问题外包给其他设备?
我只是想知道这些扩展在性能很重要的软件中接收的应用程序。例如,游戏引擎或渲染器肯定会使用 GPU,SIMD 扩展会有所不同吗?
仅仅因为您可以在 GPU 上执行某些操作,并不意味着在 GPU 上执行该操作是执行此操作的最佳位置。
当您有大量数据需要在其中运行相同的操作时,GPU 的工作效果最佳。对于较小批量的数据,与 CPU 代码内联运行可能会更有效。
GPU 的问题之一是它需要 CPU 从某处获取数据,将其加载到 RAM 中,通过 PCIe 总线复制它,在 GPU 上加载程序来处理数据,运行该程序,然后复制结果返回到CPU RAM。只有完成所有这些工作后,CPU 才能对数据执行某些操作。
如果您的 CPU 有一组针对此类操作的指令,并且不需要完成设置 GPU 的所有工作,那么您很可能会发现,对于少量数据,CPU 实际上更快。
当数据紧密依赖于 CPU 控制结构或数据寿命特别短时尤其如此。
如果 CPU 使用 SSE 或 AVX 执行SHA 哈希只需 0.1 秒,那么真的值得花 0.1 秒将数据发送到 GPU,再花 0.25 秒为特定 GPU 编译着色器程序,然后等待数据到来吗?后退?
当你饿了并且现在需要一些东西时,你会在网上订购食物并等待,还是只是从已经储备好的冰箱里拿一些东西?