When performing in-place real to hermitian interleaved 2D transforms the memory usage seems to consistently be around 5 times the size of the buffer. For instance for transforming a 8194x8192 buffer so that the buffer size is 256 MB given sizeof(float) = 4 bytes, the VRAM utilization after the transform is ~1500 MB. This is significantly limiting the size of transforms that can be computed.
I understand that the memory usage is likely due to internally allocated buffers, but what is the reasoning for ~5x? If it is not possible to reduce this, is it at the very least possible to predict exactly how much will be used, so the maximum possible transform size can be calculated given memory constraints?
When performing in-place real to hermitian interleaved 2D transforms the memory usage seems to consistently be around 5 times the size of the buffer. For instance for transforming a 8194x8192 buffer so that the buffer size is 256 MB given sizeof(float) = 4 bytes, the VRAM utilization after the transform is ~1500 MB. This is significantly limiting the size of transforms that can be computed.
I understand that the memory usage is likely due to internally allocated buffers, but what is the reasoning for ~5x? If it is not possible to reduce this, is it at the very least possible to predict exactly how much will be used, so the maximum possible transform size can be calculated given memory constraints?
My example plan is created by
And the transform is executed by
clfftEnqueueTransform(planHandle, CLFFT_FORWARD, 1, &queue, 0, NULL, NULL, &buffer, NULL, NULL);
Here is a complete minimal reproducible example: https://pastebin.com/XPxCmy1g