Myページ
ホーム
コミュニティの人々
ソフトウェア
技術紹介
適用分野
Tyzohとは
ご意見お問い合わせ

kkatoのブログ

Ubuntu 10.04で、CUDAを使うための設定

Ubuntuのバージョンを8.10→10.04に一気にあげました。
つまりdo-release-upgradeを3回やりました。

まだCUDAのインストールまで言ってないのですが、NVIDIAのドライバーで思わぬ罠があったので報告。
9.10までは問題なかったのですが、9.10→10.04でおかしくなった模様。

結論を言うと、xserver-xorg-video-nouveauというパッケージがドライバのインストールと競合するのでアンインストールする必要があります。
つまり、10.04にアップグレード後にセーフモードで
sudo aptitude remove xserver-xorg-video-nouveau
を実行しましょう。

これだけでは不十分で、カーネルモジュールとしてnouveauが走っている可能性があるので、
sudo modprobe -r nouveau
を実行しましょう。

ちなみに、既存のCUDAインストール済みの環境のアップグレードだったので、/etc/default/linux-restricted-modules-commonは書き換え済みでした。スクラッチからインストールする人は、このファイルも書き換える必要があります。それについてはこちらを参照してください。

以上のことをやってからドライバーのインストールをすればOKです。

さ〜て、これからCUDA3.2入れるぞ〜。

追記(2011/1/14):
カーネルモジュールの停止が必要になることがあるので、加筆しました。
linux-restricted-modules-commonの設定は必要ないことが分かったので、削除しました。

kkato (2011-01-11 20:48) | コメント(0)| トラックバック(0)

haskell-modeで関数名入力を省力化

シルバーウィーク特別企画、Emacs haskell-modeをカスタマイズしてみる。

例えば、

fibonacci :: [Integer]
と入力したあとは、当然
fibonacci n =...
と続くわけで、その「fibonacci」の部分を省力化したいですよね。

普通のHaskell-modeでもTABを2回押せばできるんですが、以下はそれが面倒くさいというニッチなニーズ向け。

で、haskell-modeには手を入れず、.emacsだけでやってみた。以下そのコード
(defun haskell-newline ()
  ""
  (interactive)
  (let ((line-start) (line-end) (s) (ss))
      (setq line-end (point))
      (if  (= line-end (line-end-position))
	  (progn (save-excursion 
		   (re-search-backward "^" nil t)
		   (setq line-start (match-beginning 0)))
	   (setq s (buffer-substring line-start line-end))
	   (end-of-line)
	   (newline)
	   (if (string-match "^\\([_a-zA-Z][_a-zA-Z0-9']*\\) *::" s)
	       (progn (setq ss (substring s (match-beginning 1) (match-end 1)))
		      (insert ss " "))))
	(newline))))
(add-hook 'haskell-mode-hook 
	  (lambda () (local-set-key (kbd "RET") 'haskell-newline)))
これで、
hogehoge :: Integer -> Integer
と入力した後に[Enter]キーを押すと次の行に自動で
hogehoge 
と入ります。カーソルが行末ある状態から[Enter]を押したときだけ有効で、他は普通の改行と同じように動きます。

あと何をやっているかは、コードを読めば分かるでしょう。:-)

追記:
書き込んだ直後に気づいたのですが、型が複雑で複数行に分けて書きたいときとかにこれだと困りますね。他にもRETを乗っとると色々と不都合がありそう。

kkato (2010-09-21 12:25) | コメント(0)| トラックバック(0)

emacsマクロ:C言語でポインタ型への置き換え

Cでコード書いていて、t型の変数を後でt*型(tへのポインタ型)に変更したくなることってよくありませんか?(あまりないですか、すみません)

例えばaをintの配列のつもりで使っていたのに、後で配列へのポインタに変更したくなったりすると、
a[i]=hoge;
というのを
(*a)[i]=hoge;
に書き換えなければいけません。

こういうのが大量にあっていやになるケースに出くわしたので、emacsのマクロ書いてみました。以下そのコード


(defun f ()
  "thisandthat."
  (interactive)
  (re-search-forward "[_a-zA-z]+" nil t)
  (setq s (buffer-substring (match-beginning 0) (match-end 0)))
  (delete-region (match-beginning 0) (match-end 0))
  (insert "(*") (insert s) (insert ")")
  (goto-char (+ (match-end 0) 3))
)
あとは何か適当なキーにバインドして、置き換えたい変数の直前にカーソルを持っていって実行すればいいです。

ちなみにemacsでまともなマクロ書いたのは初めてです。


kkato (2010-09-10 19:32) | コメント(2)| トラックバック(0)

博士号を取るとはどういうことか

The illustrated guide to a Ph.D
の解説がおもしろく、妙に腑に落ちたので、訳してみることにした。
以下訳
(絵は原文をコピーしました)

---
博士号への絵付きのガイド

私は毎年秋になると新しい博士課程学生数人に「博士号とは何か」を説明するようにしている。
言葉で表すのは難しい。
だから、絵を使うこととする。
博士号への絵付きのガイドとして、以下を読んで欲しい。

---
人類の知識をすべて含む円を考えてみよう。
PhDKnowledge.001.jpg

小学校を卒業するとちょっとだけ知るようになる。
PhDKnowledge.002.jpg

高校を卒業するころにはさらにもう少し知るようになる。
PhDKnowledge.003.jpg

学士を取ると、専門性が身につく。
PhDKnowledge.004.jpg

修士号をとると、さらに専門性が深まる。
PhDKnowledge.005.jpg

研究論文を読むことで人類の知識のふちにまでたどり着くことができる。
PhDKnowledge.006.jpg

ふちに着いたら、ここに集中する。
PhDKnowledge.007.jpg

このふちを数年押し続ける。
PhDKnowledge.008.jpg

ふちが壊れるまで。
PhDKnowledge.009.jpg

こうしてできたくぼみが博士号(Ph.D)と呼ばれる。
PhDKnowledge.010.jpg

もちろん、今度は世界が違って見えるだろう。
PhDKnowledge.011.jpg

だからこそ、大きな絵を忘れてはいけない。
PhDKnowledge.012.jpg

押しつづけよう。



kkato (2010-08-16 12:30) | コメント(0)| トラックバック(0)

設定メモ:UbuntuでNISの設定

超久しぶりのブログですが、UbuntuでNISの設定をしたので、忘れないようにメモ。
ここ
http://www.tyzoh.jp/community/kkato/2009/03/31_140828.html
にも書いたのですが、情報不足だったと思うので、加筆してまとめ。

それにしてもNISの情報って少なくて苦労した。

●NIS(Network Information Service)とは何か
ログイン名とパスワードを複数のサーバ(ドメイン内)で使うための仕組み。主にLinuxなどのUNIX系OSで用いられている。
つまり同じログイン名とパスワードで複数のマシンにログインできるようになる。クラスタなんかを組むときは楽。

●簡単な仕組み
ログイン名・パスワードなどの情報を提供するのが「サーバ」で、それを利用するのが「クライアント」。サーバには2種類あって、すべての情報のもとになるのが「マスターサーバ」、マスターサーバの内容をバックアップしておくのが「スレーブサーバ」。スレーブサーバのおかげで、マスターサーバが死んでてもログインできる。

クライアントは必要に応じてサーバ(マスターまたはスレーブ)に問い合わせる。マスターは情報に変更があるとスレーブに通知する。

●Ubuntuでの設定の仕方
以下、3つのサーバで設定するものとし、サーバ名をubuntu1, ubuntu2, ubuntu3とする。
ubuntu1をマスターサーバとし、ubuntu2とubuntu3をスレーブサーバとする。
(実際にマシンの台数が少ないときは、マスター以外をすべてスレーブとしていいんじゃないかと思う。その方が頑健。)

1) まずは/etc/hostsをいじって、ubuntu1, ubuntu2, ubuntu3のアドレスを登録
2) nisをインストール
sudo aptitude install nis
3) クライアントの設定
yp.confに
ypserver ubuntu1
ypserver ubuntu2
ypserver ubuntu3
を加える。(これがクライアントが参照するサーバ)
/etc/nsswitchを編集して
passwd:         compat nis
group:          compat nis
shadow:         compat nis
とする。(こうしないと、ログイン時にnisの情報を見にいかない)

4) サーバの設定
マスターにするサーバ(ubuntu1)で
/usr/lib/yp/ypinit -m
スレーブにするサーバ(ubuntu2, ubuntu3)で、
/usr/lib/yp/ypinit -s ubuntu1
セキュリティが気になるんならypserv.securenetsを編集してアクセス元を制限できる。そのまま放っておいても動く。
5) 自動起動の設定
/etc/default/nisを開いて編集。
マスターでは
NISSERVER=master
スレーブでは
NISSERVER=slave
として、あと
NISMASTER=ubuntu1
と設定
6) cronの設定
/etc/cron.hourlyになにか書くといいらしい(よくわかってない

●ユーザを追加するとき
adduserをして
cd /var/yp
sudo make


●追記
2010/8/2
yp.confの設定が間違っていたので訂正しました。

kkato (2010-07-28 15:18) | コメント(0)| トラックバック(0)

CUDA3.0リリース

http://developer.nvidia.com/object/cuda_3_0_downloads.html

Release Highlightsを適当に訳してみる。
(網羅的ではなく、感想も含むので、注意)

  • Fermiアーキテクチャのサポート
  • C++のクラス継承とテンプレート継承のサポート →既存コードの移植には便利そうだけど、パフォーマンスが落ちたりしないかな?
  • Direct3DとOpenGLの相互操作性のサポート
  • CUDAドライバ/ランタイムバッファの相互操作性のサポート →何言ってるかよく分からなかったが、多分2つのレイヤーのAPIを同時に使えるということなのかな
  • CUBLASがBLAS1,2,3に対応
  • cuda-gdbがいろいろとよくなるらしい
  • CUDAメモリチェッカーが境界チェックやアライメントチェックをしてくれるようになる
  • CUDA Toolkitがバージョン付きになるので、アプリケーションが特定のバージョンを要求するようなコードがかける
  • CUDA C/C++カーネルが標準ELFフォーマットに変換される →これは驚愕。GPUがPTXじゃなくても動くということか?よくわからない。
  • エミュレーションモードは別パッケージになる。要するににもうあまりエミュレーションは必要ないという雰囲気。デバッグの際は、WindowsならVisual Nsight、Linuxならcuda-gdbとcuda-memcheckを使え、ときたもんだ。
  • OpenCLはいろいろと頑張ってサポートするよ、といっている
以上超訳でした。



kkato (2010-03-23 11:05) | コメント(0)| トラックバック(0)

CUDAのアップグレードでトラブル(パート2)

今度は他のマシンをUbuntu 8.04→8.10にして、CUDA2.3をインストール。
でも、なぜかGPUを認識しないなと思っていたら、GPUの電源ケーブルが抜けていた。
これで1日くらいつぶれたかも。

そういえば、NVIDIAのCEOがこんなこと言ってたなあと思い出す。

kkato (2010-02-09 21:14) | コメント(0)| トラックバック(0)

rubyでtwitterのタイムライン取得

Ubuntu上rubyで、twitterのタイムラインを取得しようと思ったのですが、ちょっとトラブったのでメモ。

まず当然の前提として
sudo aptitude install ruby ruby-dev ruby gems
は必要

あと、
gem install twitter
で、twitterライブラリをインストール
twitterやりたいだけなら必ずしも必要でないが、コマンドラインパスワード入力のためhighlineライブラリをインストール。gemじゃなくて、aptパッケージで見つけたので、
sudo aptitude install libhighline-ruby

でもこれでサンプルコードを実行しようとすると
no such file to load -- net/https
とエラーになる。どうしてかと思いきや、ググってここで解決策発見。

なので、追加で、
sudo aptitude install libopenssl-ruby

そして、サンプルコードがこれ


#!/usr/bin/ruby

require 'rubygems'
require 'twitter'
require 'highline'

id=HighLine.new.ask("ID: ")
pw=HighLine.new.ask("Password: "){|q| q.echo='*'}

PROXY_HOST="hogehoge"
PROXY_PORT="8080"
Twitter::HTTPAuth.http_proxy( PROXY_HOST, PROXY_PORT )
auth = Twitter::HTTPAuth.new(id,pw)
t=Twitter::Base.new(auth)

t.user_timeline{:public}.each do |l|
  puts l.text + " : " + l.user.name
end



kkato (2010-02-05 09:41) | コメント(0)| トラックバック(0)

どうぶつしょうぎ

最近どうぶつしょうぎが気になっていたのですが、このくらい単純だと多分完全解析されてるんだろうなと思いググってみたら、やっぱり。

http://media.itc.u-tokyo.ac.jp/ktanaka/dobutsushogi/

あまりにも予想通りの展開でがっかり。

kkato (2010-01-21 17:20) | コメント(1)| トラックバック(0)

みなさまあけましておめでとうございます

大晦日に初めて知って感動したこと:
AKB48の48って、16進数だったんだ

kkato (2010-01-02 20:45) | コメント(0)| トラックバック(0)

プロフィール

kkato

・10年以上前からのdebian使いです。
・C++, Ruby, perl, ocamlなどの言語をよく使います。
・数値計算などが得意です。
・スパムメールの文面をよく読むのが好きです。
ホームページ:
http://sites.google.com/site/kimikazu/

カテゴリ

RSSフィード

コミュニティの人々 | ソフトウェア | 技術紹介 | 適用分野 | Tyzohとは | ご意見お問い合わせ

Copyright (C) 2004-2011 Nihon Unisys, Ltd. All Rights Reserved.
Powered by Movable Type Open Source