我需要使用不可分离的内核实现图像卷积的高效版本(因此 CUDA 的 sdk 仅对 FFT 示例有用,但明确指出它仅适用于大内核大小)
除了从头开始实现它之外,我还需要对先验未知大小的矩阵和内核进行操作(它们可以是 10x10 和 20.000x20.000,我根本无法预测)
您对 FFT 示例有何建议?(如果这是你最好的选择,请给我一些好点子,让我开始弄清楚它是如何工作的)
对于第二个选择(我自己手动实现卷积),最大化内存合并的建议是什么?
我需要使用不可分离的内核实现图像卷积的高效版本(因此 CUDA 的 sdk 仅对 FFT 示例有用,但明确指出它仅适用于大内核大小)
除了从头开始实现它之外,我还需要对先验未知大小的矩阵和内核进行操作(它们可以是 10x10 和 20.000x20.000,我根本无法预测)
您对 FFT 示例有何建议?(如果这是你最好的选择,请给我一些好点子,让我开始弄清楚它是如何工作的)
对于第二个选择(我自己手动实现卷积),最大化内存合并的建议是什么?
我对gpu的建议:
先把它弄对。首先在 CPU 上使用您想在 GPU 上实现的算法。您将不得不处理更多的低级细节,因此知道输出必须是什么很重要。
快一点。如果可以使用 FFT 方法(大多数情况下),它是最快的方法。
为了达到您的第一个目标,我建议您尝试使用 OpenCv 来实现它。它有一个非常好的 python 包装器,并提供了一个过滤框架
一旦你确定了你的结果以及你是如何使用 OpenCv 实现的,测试你是否可以使用 FFT 做同样的事情。将整体移植到 GPU 上会容易得多
您可能想查看 theano 中卷积的实现(它们使用非基于 FFT 的内核)......或者只使用 theano。