GPU 上可执行操作的范围是否有限制?
例如,你能像在 Java 或 C# 中那样创建字典/哈希表吗?从套接字接收数据包怎么样?你能否通过 PCI Express 总线、CPU 和 GPU 路由它们?
我对使用 GPU 以极低的延迟处理网络数据包数据很感兴趣。
答案1
GPU 无法访问连接到主机的任何硬件。
GPU 程序的典型执行过程是:
- 数据从主机内存传输到 GPU 设备内存
- GPU设备进行一些处理
- 数据从 GPU 设备内存传回到主机内存
然后主机对数据进行一些有用的操作,例如将其显示给用户或保存到文件。
内存传输并不是免费的,所以通常你需要积累足够的数据,然后将其发送到 GPU 设备才能使其值得。
另外需要考虑的是 GPU 设备数据并行(相对于任务并行)。与可以并行运行不同代码的 CPU 不同,GPU 在不同数据上并行运行相同代码。这使得它们不适合用作 Web 服务器,但对于某些可以并行处理的科学和数学问题却非常有用。
如果您需要低延迟网络数据包处理,GPU 可能不太合适。您需要:
- 接收网络数据包
- 将其发送到 GPU(有些延迟)
- GPU 上的处理
- 发送回主机(更多延迟)
GPU 可行的唯一方式是:
- 单个数据包分析可以并行化为多个较小的块
- 你愿意等待大量网络数据包进来,并一次性分析其中的大部分