CUDAでの計算機用にGeforce GTX 560 Tiを購入しました。価格はドスパラで19990円でした。
CUDAで使うということだけ考えれば値段の割に性能もそこそこでコストパフォーマンスが一番高いと思ってこれにしました。
今回購入したGeforce GTX 560 Tiはあくまで計算機用なので、ディスプレイ用は今まで通りQuadro FX 580を使います。つまり、グラボの2枚差しです。
ただでさえごちゃごちゃしていたPCケースの中身がさらに密度が上がって熱量が心配です。
PCを立ち上げてCUDA SDKの中にあるdeviceQuery.exeを実行してみるとちゃんと2枚のGPUがCUDA Deviceとして認識されていることがわかります。
2枚のGPUの主な性能の比較表です。
最大使用電力はQuadro FX 580が40WでGeforce GTX 560 Tiが170 Wなので合わせて210Wとなります。
もともと使っていたQuadro FX 580の消費電力が低かったおかげで大きいGPU一枚挿したのと同じくらいの消費電力で済みました。
CUDAでのデバイスの切り替えは次のようにcudaSetDevice(デバイス番号)を使えば行えるようです。
せっかくなのでさっそくCUDAで1000x1000の2次元拡散方程式を解かせてみました。
以下が結果です。
Quadro FX 580が26秒に対してGeforce GTX 560Tiが19秒。
しかもQuadro FX 580の方はディスプレイに表示する処理もしているのでそもそも不利な条件です。
消費電力がかなり増大した割にそんなに大して高速にはならないという結果で少し残念ですが、プログラムの書き方で処理時間もいろいろと変わってくると思うので、これからこの環境でCUDAの開発を行っていこうと思います。
CUDAで使うということだけ考えれば値段の割に性能もそこそこでコストパフォーマンスが一番高いと思ってこれにしました。
今回購入したGeforce GTX 560 Tiはあくまで計算機用なので、ディスプレイ用は今まで通りQuadro FX 580を使います。つまり、グラボの2枚差しです。
ただでさえごちゃごちゃしていたPCケースの中身がさらに密度が上がって熱量が心配です。
PCを立ち上げてCUDA SDKの中にあるdeviceQuery.exeを実行してみるとちゃんと2枚のGPUがCUDA Deviceとして認識されていることがわかります。
[deviceQuery] starting...
deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Found 2 CUDA Capable device(s)
Device 0: "GeForce GTX 560 Ti"
CUDA Driver Version / Runtime Version 4.0 / 4.0
CUDA Capability Major/Minor version number: 2.1
Total amount of global memory: 962 MBytes (1008402432 bytes)
( 8) Multiprocessors x (48) CUDA Cores/MP: 384 CUDA Cores
GPU Clock Speed: 1.64 GHz
Memory Clock rate: 2004.00 Mhz
Memory Bus Width: 256-bit
L2 Cache Size: 524288 bytes
Max Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536,65535), 3D=(2048,2048,2048)
Max Layered Texture Size (dim) x layers 1D=(16384) x 2048, 2D=(16384,16384) x 2048
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 32768
Warp size: 32
Maximum number of threads per block: 1024
Maximum sizes of each dimension of a block: 1024 x 1024 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 65535
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 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: Yes
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: 4 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
Device 1: "Quadro FX 580"
CUDA Driver Version / Runtime Version 4.0 / 4.0
CUDA Capability Major/Minor version number: 1.1
Total amount of global memory: 461 MBytes (483000320 bytes)
( 4) Multiprocessors x ( 8) CUDA Cores/MP: 32 CUDA Cores
GPU Clock Speed: 1.13 GHz
Memory Clock rate: 800.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: 3 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 4.0, CUDA Runtime Version = 4.0, NumDevs = 2, Device = GeForce GTX 560 Ti, Device = Quadro FX 580
[deviceQuery] test results...
PASSED
deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Found 2 CUDA Capable device(s)
Device 0: "GeForce GTX 560 Ti"
CUDA Driver Version / Runtime Version 4.0 / 4.0
CUDA Capability Major/Minor version number: 2.1
Total amount of global memory: 962 MBytes (1008402432 bytes)
( 8) Multiprocessors x (48) CUDA Cores/MP: 384 CUDA Cores
GPU Clock Speed: 1.64 GHz
Memory Clock rate: 2004.00 Mhz
Memory Bus Width: 256-bit
L2 Cache Size: 524288 bytes
Max Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536,65535), 3D=(2048,2048,2048)
Max Layered Texture Size (dim) x layers 1D=(16384) x 2048, 2D=(16384,16384) x 2048
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 32768
Warp size: 32
Maximum number of threads per block: 1024
Maximum sizes of each dimension of a block: 1024 x 1024 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 65535
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 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: Yes
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: 4 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
Device 1: "Quadro FX 580"
CUDA Driver Version / Runtime Version 4.0 / 4.0
CUDA Capability Major/Minor version number: 1.1
Total amount of global memory: 461 MBytes (483000320 bytes)
( 4) Multiprocessors x ( 8) CUDA Cores/MP: 32 CUDA Cores
GPU Clock Speed: 1.13 GHz
Memory Clock rate: 800.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: 3 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 4.0, CUDA Runtime Version = 4.0, NumDevs = 2, Device = GeForce GTX 560 Ti, Device = Quadro FX 580
[deviceQuery] test results...
PASSED
2枚のGPUの主な性能の比較表です。
Quadro FX 580 | Geforce GTX 560 Ti | |
CUDAプロセッサコア | 32基 | 384基 |
メモリ | 512 MB GDDR3 | 1024 MB GDDR5 |
メモリバンド幅(GB/sec) | 25.6 | 128 |
メモリインターフェース幅 | 128-bit | 256-bit |
最大消費電力(W) | 40 | 170 |
最大使用電力はQuadro FX 580が40WでGeforce GTX 560 Tiが170 Wなので合わせて210Wとなります。
もともと使っていたQuadro FX 580の消費電力が低かったおかげで大きいGPU一枚挿したのと同じくらいの消費電力で済みました。
CUDAでのデバイスの切り替えは次のようにcudaSetDevice(デバイス番号)を使えば行えるようです。
int dev=0;
CUDA_SAFE_CALL(cudaSetDevice(dev));
CUDA_SAFE_CALL(cudaSetDevice(dev));
せっかくなのでさっそくCUDAで1000x1000の2次元拡散方程式を解かせてみました。
以下が結果です。
Quadro FX 580が26秒に対してGeforce GTX 560Tiが19秒。
しかもQuadro FX 580の方はディスプレイに表示する処理もしているのでそもそも不利な条件です。
消費電力がかなり増大した割にそんなに大して高速にはならないという結果で少し残念ですが、プログラムの書き方で処理時間もいろいろと変わってくると思うので、これからこの環境でCUDAの開発を行っていこうと思います。