雑記帳

ちょっとした文章とかメモ書きとか。

グラボを新調したので色々と。

グラボを新調.
GTS250→GTX 550Tiに。

ドライバが見つからない?

Linuxではドライバが遅れているというのはよくあること・・と思いきやNvidiaのダウンロードページにありました。

最近はどれもほぼ同じリリースなんですねぇ。

いやはや、最新のグラボがLinuxで使えるとは。

まず、gdmが動いているとドライバのインストールが出来ないので
Ctrl + Alt +#(F1 ~ F6)
として端末モードに移行。(Ctrl+Alt +F5辺りで良いかと。)
$sudo su
pasword …
#stop gdm
でgdm停止。

これでNvidiaのドライバをインストール。
#bash ./NVIDIA-Linux-(architecture)-(version number).run
後はほぼAccept(了解)を選択していくだけです。
architectureとversion numberは適宜読み替えてください。

本題

CUDAのデバイスを確認してみます。

NVIDIA GeForce GTX 550 TiでCUDA…の準備。

CUDAデバイスの確認はLinuxだと
/usr/local/cuda/include

にある、driver_types.hに定義されているcudaDeviceProp構造体を使ってやれば確認できます。

これを使用するにはcuda_runtime.hをインクルードしてやれば良いです。

コード例:※HTMLタグの対策のため<>は全角になっています。コンパイルするときは半角に直してください。

#include <stdio.h>
#include <cuda_runtime.h>

int main()
{
	cudaDeviceProp dev;
	int count;
	cudaGetDeviceCount( &count );
	for (int i = 0; i < count; i++) {
		cudaGetDeviceProperties( &dev, i );
		printf( " --- General Information for device %d --- \n", i);
		printf( "Name: %s\n", dev.name );
		printf( "Compute capability %d.%d\n", dev.major, dev.minor );
		printf( "Clock rate:  %dMHz\n", dev.clockRate / 1000 );

		if (dev.integrated)
			printf("integrated GPU.\n");
		else
			printf("discrete GPU.\n");

		printf( " --- Memory Information for device %d ---\n", i);
		printf( "Total global mem: %ldMB\n", (long)dev.totalGlobalMem/1024/1024 );
		printf( "Total constant Mem: %ldKB\n", (long)dev.totalConstMem/1024 );
		printf( "Max mem pitch: %ldMB\n", (long)dev.memPitch/1024/1024/8 );
		printf( "Texture Alignment: %ldbyte(s).\n", (long)dev.textureAlignment );

		printf( " --- MP Information for device %d ---\n", i );
		printf( "Multiprocessor count: %d processor(s).\n", dev.multiProcessorCount );
		printf( "Max threads per block: %d Thread(s) per block.\n", dev.maxThreadsPerBlock );
		printf( "Max thread dimension: (%d, %d, %d)\n",
				dev.maxThreadsDim[0], dev.maxThreadsDim[1],
				dev.maxThreadsDim[2] );
		printf( "Max grid dimensions: (%d, %d, %d)\n",
				dev.maxGridSize[0], dev.maxGridSize[1],
				dev.maxGridSize[2] );
		printf( "\n" );
	}
}

これをcudainf.cuなどどして保存し、

$nvcc -o cudainf cudainf.cu

としてコンパイルします。-lcudaが要るかも知れないし、要らないかも知れない。
出力例:

$./cudainf
--- General Information for device 0 ---
Name: GeForce GTX 550 Ti
Compute capability 2.1
Clock rate:  1800MHz
discrete GPU.
 --- Memory Information for device 0 ---
Total global mem: 1023MB
Total constant Mem: 64KB
Max mem pitch: 255MB
Texture Alignment: 512byte(s).
 --- MP Information for device 0 ---
Multiprocessor count: 4 processor(s).
Max threads per block: 1024 Thread(s) per block.
Max thread dimension: (1024, 1024, 64)
Max grid dimensions: (65535, 65535, 65535)

どうやらFermiアーキテクチャではz方向のスレッドも強化されているらしくmulti processor数は減っていますが、1プロセッサあたりの起動できるスレッド数は増えているのかも?
あと、地味〜に使われてない時はクロックダウンするようになったので(GTS250のドライバが古かっただけかも)、GPU温度はアイドル時25〜30℃です。高負荷時は50〜60℃

クロックは3段階に変化します。

パフォーマンスレベル	グラフィック	メモリー	プロセッサ
0			50MHz		135MHz		101MHz
1			405MHz		324MHz		810MHz
2			900MHz		2050MHz		1800MHz

では。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。