我有一个关于如何设计我的应用程序的一般性问题。我读过Cuda文档,但仍然不知道应该调查什么。真的很感激,如果有人可以阐明它。
我想对股票进行一些实时分析,比如100只股票。我有实时市场数据源,它将以更新的市场价格流动。我想做的是:
为cuda卡上的每个股票预先分配内存黑色,并在白天保留内存。
当新数据进入时,直接更新Cuda卡上的相应内存。
更新后,会发出信号或触发事件以开始分析计算。
计算完成后,将结果写回CPU内存。
以下是我的问题:
将数据从CPU内存流式传输到GPU内存的最有效方法是什么?因为我想要实时,所以每秒将内存快照从CPU复制到GPU是不可接受的。
我可能需要为CPU和GPU上的100个库存分配内存块。如何将CPU内存单元映射到每个GPU内存单元?
如何在新数据到达Cuda卡时触发分析计算?
我在Windows XP上使用带有Cuda 3.2的Tesla C1060。
非常感谢您的任何建议。
答案 0 :(得分:2)
您的要求没有任何异常。
只要应用程序正在运行,您就可以将信息保存在GPU内存中,并进行小的更新以使数据与CPU上的数据保持同步。您可以使用cudaMalloc()
分配GPU内存,并使用cudaMemcpy()
将更新的数据写入已分配内存的各个部分。或者,您可以在Thrust结构中保存数据,例如thrust::device_vector
。更新device_vector
时,CUDA内存副本将在后台完成。
更新数据后,只需重新运行内核即可获得更新的计算结果。
你可以扩展问题(2)吗?