CUDA如何执行cudaMemset()
功能?如果通过启动线程数=元素数来实现内存初始化,我已经观察到相当多的时间节省。为什么要实现这种节约?
答案 0 :(得分:2)
cudaMemset调用cuMemsetD8或cuMemsetD8Aysnc。这很容易在工具中确定。驱动程序实现将尝试根据目标地址的对齐方式,要写入的值的大小以及要写入的字节数来优化执行。通过编写一些基准可以很容易地确定这一点。 CUDA实现必须处理所有情况(8位对齐,尾部,......)。如果您有非常特殊的情况(32位对齐,可被4整除),那么您应该能够编写一个内核,该内核在CPU开销方面将超过驱动程序实现的性能。 GPU执行时间可能类似。
在有效写入内存方面,您需要考虑几个设备限制。
每个元素1个线程(无论是8位还是128位)的简单映射很容易实现,如果大小不是WARP_SIZE的倍数,则很容易处理条件检查。