我的任务是编写一个程序,以可能的绝对最大速度将向量总和流式传输到分散的内存位置。输入数据是一个目标 ID 和一个 XYZ 浮点向量,例如:
[198, {0.4,0,1}], [775, {0.25,0.8,0}], [12, {0.5,0.5,0.02}]
我需要像这样将它们汇总到内存中:
memory[198] += {0.4,0,1}
memory[775] += {0.25,0.8,0}
memory[12] += {0.5,0.5,0.02}
更复杂的是,将有多个线程同时执行此操作,从不同的输入流读取但汇总到相同的内存。我预计不会有很多争用相同的内存位置,但会有一些。数据集将非常大 - 我们将同时从多个 SSD 流式传输每个 10+ GB 的多个流,以获得尽可能高的读取带宽。我假设 SSE 用于数学,尽管它当然不必那样。
结果暂时用不上,所以不用污染缓存了……不过我是在内存中求和,不只是写,所以不能用MOVNTPS之类的东西吧?但是由于线程不会互相踩踏那么多,我怎么能在没有大量锁定开销的情况下做到这一点?你会用记忆栅栏来做这个吗?
谢谢你的帮助。我可以假设 Nehalem 及以上,如果这有所作为。