How to decide maximum size of the data using 1D CUFFT
Hello everyone,

I am using CUFFT library for 1D FFT computation. For small data set, the program works fine. But when the data set goes to a certain size, the program can not run correctly.

My GPU is FX 380, the following is basic GPU information info:

Device 0: "Quadro FX 380"
CUDA Driver Version / Runtime Version 4.0 / 4.0
CUDA Capability Major/Minor version number: 1.1
Total amount of global memory: 255 MBytes (267714560 bytes)
( 2) Multiprocessors x ( 8) CUDA Cores/MP: 16 CUDA Cores
GPU Clock Speed: 1.10 GHz
Memory Clock rate: 700.00 Mhz
Memory Bus Width: 128-bit
Max Texture Dimension Size (x,y,z) 1D=(8192), 2D=(65536,32768), 3D=(2048,2048,2048)
Max Layered Texture Size (dim) x layers 1D=(8192) x 512, 2D=(8192,8192) x 512
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 16384 bytes
Total number of registers available per block: 8192
Warp size: 32
Maximum number of threads per block: 512
Maximum sizes of each dimension of a block: 512 x 512 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 1
Maximum memory pitch: 2147483647 bytes
Texture alignment: 256 bytes
Concurrent copy and execution: Yes with 1 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Concurrent kernel execution: No
Alignment requirement for Surfaces: Yes
Device has ECC support enabled: No
Device is using TCC driver mode: No
Device supports Unified Addressing (UVA): No
Device PCI Bus ID / PCI location ID: 15 / 0

Can I somehow calculate what the maximum size of data that CUFFT funtions can handle is?
Hello everyone,



I am using CUFFT library for 1D FFT computation. For small data set, the program works fine. But when the data set goes to a certain size, the program can not run correctly.



My GPU is FX 380, the following is basic GPU information info:



Device 0: "Quadro FX 380"

CUDA Driver Version / Runtime Version 4.0 / 4.0

CUDA Capability Major/Minor version number: 1.1

Total amount of global memory: 255 MBytes (267714560 bytes)

( 2) Multiprocessors x ( 8) CUDA Cores/MP: 16 CUDA Cores

GPU Clock Speed: 1.10 GHz

Memory Clock rate: 700.00 Mhz

Memory Bus Width: 128-bit

Max Texture Dimension Size (x,y,z) 1D=(8192), 2D=(65536,32768), 3D=(2048,2048,2048)

Max Layered Texture Size (dim) x layers 1D=(8192) x 512, 2D=(8192,8192) x 512

Total amount of constant memory: 65536 bytes

Total amount of shared memory per block: 16384 bytes

Total number of registers available per block: 8192

Warp size: 32

Maximum number of threads per block: 512

Maximum sizes of each dimension of a block: 512 x 512 x 64

Maximum sizes of each dimension of a grid: 65535 x 65535 x 1

Maximum memory pitch: 2147483647 bytes

Texture alignment: 256 bytes

Concurrent copy and execution: Yes with 1 copy engine(s)

Run time limit on kernels: Yes

Integrated GPU sharing Host Memory: No

Support host page-locked memory mapping: Yes

Concurrent kernel execution: No

Alignment requirement for Surfaces: Yes

Device has ECC support enabled: No

Device is using TCC driver mode: No

Device supports Unified Addressing (UVA): No

Device PCI Bus ID / PCI location ID: 15 / 0



Can I somehow calculate what the maximum size of data that CUFFT funtions can handle is?

#1
Posted 09/17/2011 08:46 AM   
[quote name='ScottWang' date='17 September 2011 - 09:46 AM' timestamp='1316249195' post='1294175']
Hello everyone,

I am using CUFFT library for 1D FFT computation. For small data set, the program works fine. But when the data set goes to a certain size, the program can not run correctly.

My GPU is FX 380, the following is basic GPU information info:

Device 0: "Quadro FX 380"
CUDA Driver Version / Runtime Version 4.0 / 4.0
CUDA Capability Major/Minor version number: 1.1
Total amount of global memory: 255 MBytes (267714560 bytes)
( 2) Multiprocessors x ( 8) CUDA Cores/MP: 16 CUDA Cores
GPU Clock Speed: 1.10 GHz
Memory Clock rate: 700.00 Mhz
Memory Bus Width: 128-bit
Max Texture Dimension Size (x,y,z) 1D=(8192), 2D=(65536,32768), 3D=(2048,2048,2048)
Max Layered Texture Size (dim) x layers 1D=(8192) x 512, 2D=(8192,8192) x 512
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 16384 bytes
Total number of registers available per block: 8192
Warp size: 32
Maximum number of threads per block: 512
Maximum sizes of each dimension of a block: 512 x 512 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 1
Maximum memory pitch: 2147483647 bytes
Texture alignment: 256 bytes
Concurrent copy and execution: Yes with 1 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Concurrent kernel execution: No
Alignment requirement for Surfaces: Yes
Device has ECC support enabled: No
Device is using TCC driver mode: No
Device supports Unified Addressing (UVA): No
Device PCI Bus ID / PCI location ID: 15 / 0


Can I somehow calculate what the maximum size of data that CUFFT funtions can handle is?
[/quote]

Hello,


This is copied from the cufft library manual (http://developer.download.nvidia.com/compute/DevZone/docs/html/CUDALibraries/doc/CUFFT_Library.pdf), page 4:

Transform sizes up to [b]64 million elements in single precision[/b] and up to [b]128 million elements in double precision[/b] in any dimension, [b]limited by the available GPU memory[/b].

In practice I think maximum size you use depends on the gpu memory available. If you do inplace transform you would need about 2.6*(matrix_size)*size(type of the array). If it out of place I think you need about 2.*(matrix_size)*size(type of the array).

Enjoy
[quote name='ScottWang' date='17 September 2011 - 09:46 AM' timestamp='1316249195' post='1294175']

Hello everyone,



I am using CUFFT library for 1D FFT computation. For small data set, the program works fine. But when the data set goes to a certain size, the program can not run correctly.



My GPU is FX 380, the following is basic GPU information info:



Device 0: "Quadro FX 380"

CUDA Driver Version / Runtime Version 4.0 / 4.0

CUDA Capability Major/Minor version number: 1.1

Total amount of global memory: 255 MBytes (267714560 bytes)

( 2) Multiprocessors x ( 8) CUDA Cores/MP: 16 CUDA Cores

GPU Clock Speed: 1.10 GHz

Memory Clock rate: 700.00 Mhz

Memory Bus Width: 128-bit

Max Texture Dimension Size (x,y,z) 1D=(8192), 2D=(65536,32768), 3D=(2048,2048,2048)

Max Layered Texture Size (dim) x layers 1D=(8192) x 512, 2D=(8192,8192) x 512

Total amount of constant memory: 65536 bytes

Total amount of shared memory per block: 16384 bytes

Total number of registers available per block: 8192

Warp size: 32

Maximum number of threads per block: 512

Maximum sizes of each dimension of a block: 512 x 512 x 64

Maximum sizes of each dimension of a grid: 65535 x 65535 x 1

Maximum memory pitch: 2147483647 bytes

Texture alignment: 256 bytes

Concurrent copy and execution: Yes with 1 copy engine(s)

Run time limit on kernels: Yes

Integrated GPU sharing Host Memory: No

Support host page-locked memory mapping: Yes

Concurrent kernel execution: No

Alignment requirement for Surfaces: Yes

Device has ECC support enabled: No

Device is using TCC driver mode: No

Device supports Unified Addressing (UVA): No

Device PCI Bus ID / PCI location ID: 15 / 0





Can I somehow calculate what the maximum size of data that CUFFT funtions can handle is?





Hello,





This is copied from the cufft library manual (http://developer.download.nvidia.com/compute/DevZone/docs/html/CUDALibraries/doc/CUFFT_Library.pdf), page 4:



Transform sizes up to 64 million elements in single precision and up to 128 million elements in double precision in any dimension, limited by the available GPU memory.



In practice I think maximum size you use depends on the gpu memory available. If you do inplace transform you would need about 2.6*(matrix_size)*size(type of the array). If it out of place I think you need about 2.*(matrix_size)*size(type of the array).



Enjoy

#2
Posted 09/19/2011 06:08 AM   
Scroll To Top