为什么float4会以前缀和执行浮点运算

问题描述 投票:0回答:1

[在OpenCL中,马修·斯卡皮诺(Matthew Scarpino)评论说,将其前缀和从32位浮点数转换为4位浮点数的128位集合可以显着提高性能,快将近4倍!

当您运行Ch10 / reduction应用程序时,它将同时执行reduction_scalar和reduction_vector内核。除了检查结果将衡量每个内核执行所需的时间。上我的系统,结果如下:

reduction_scalar:检查通过。总时间= 489031

reduction_vector:检查通过。总时间= 136157

Matthew Scarpino

GPU Gems提出了类似的主张,理由是似乎是某个班级的课程项目,该项目不再可用。

我们采用了David Lichterman建议的技术,每个线程八个元素,而不是两个,只需加载两个float每个线程4个元素,而不是两个float元素(Lichterman,2007年)。

Parallel Prefix Sum (Scan) with CUDA

一种解释是每个线程的内存请求增加,但这对我来说没有意义,因为我希望发出相同数量的内存请求,也许会导致相同的整体性能。

或者,每个扭曲都发出请求,然后进入睡眠状态。在float4情况下,它会唤醒4倍以上的数据,但在float情况下,数据不会被缓存,因此后续线程也需要进入睡眠状态并等待新数据。另一方面。我期望随着扭曲中的线程被唤醒,内存将以流方式传输。

[我想知道是否有些专家可以插话并提供顺序说明,以解释为什么float4在内存访问或计算方面比float显着更快。

[在OpenCL中,马修·斯卡皮诺(Matthew Scarpino)评论说,将其前缀和从32位浮点数转换为4位浮点数的128位集合会带来显着的性能提高,几乎提高了4倍...

performance opencl gpu
1个回答
3
投票

实际上,这里有两件事在起作用。一种是更有效地利用内存带宽,另一种是提高了计算与内存事务的比率,从而改善了延迟隐藏。

© www.soinside.com 2019 - 2024. All rights reserved.