(use klib.list) (use klib.sdl) (use klib.turtle) (use klib.l-system) (define-rule x->x 'x '(x + y f)) (define-rule y->x 'y '(f x - y)) (define gen (make <G> :init '(f x) :rules `(,x->x ,y->x))) (define (dragon-curve n level) (convert (gen level) `(f . ,(lambda (x) (forward (/. n (expt 1.4 level))))) `(+ . ,(lambda (x) (turn 90))) `(- . ,(lambda (x) (turn -90))) `(x . ,(lambda (x) (turn 0))) `(y . ,(lambda (x) (turn 0))) )) (define (main args) (set-caption! "Dragon Curve") (turtle-main args (color (make <color> :r 0 :g 0)) (move 300) (dragon-curve 250 13) )) |
#!/usr/bin/env gosh
(use util.list)
(define (count-char ht file)
(with-input-from-file file
(lambda ()
(port-for-each
(lambda (c)
(hash-table-update! ht c (cut + 1 <>) 0))
read-char)
))
ht)
(define (main args)
(for-each
print
(sort (hash-table->alist
(count-char (make-hash-table) (cadr args)))
(lambda (x y)
(> (cdr x) (cdr y)))))
)
|
TOP500において一位の座を勝ち取った日本の次世代スーパーコンピューター、京。
ITProにそのアーキテクチャーの図解が載っています。
http://itpro.nikkeibp.co.jp/article/COLUMN/20111104/372504/?ST=system&P=1
スーパーコンピューター、響きを聞くとなんか恐れをなしちゃいますね。しかし、その演算を行うプロセッサユニットはSPARCの亜種の様なものです。なんら普通の演算器(コンピューター)と変わりません。
しかし、スーパーコンピューターの何が凄いのかというと、圧倒的なスケールにおけるその並列性です。
例えば「京」の構成は次のようになっています:
CPU: SPARC64 VIIIfx (4基)
メモリ: 16GB (4枚)
これだけでは並列処理向けに設計された優秀なRISC汎用プロセッサ(もちろんSIMDは積んでますよ)と64GBのメモリです。まだスーパー、しかも次世代とは呼びがたいものがあります。
そこでスーパーコンピューターは、並列性を高めるためにモジュールを増やすのです。
京はこのボードを24枚 × 約800ラック、 合計約19200枚をネットワークで繋いで一つの「スーパーコンピューター」としました。その結果、このスパコンが叩き出す性能は10PFLOPS、世界最高水準となっているのです。
この並列性は、現在スパコンだけでなく、私達一般向けのパソコンにも応用されています。最近は2コア、4コアなんて当たり前の時代になりました。それによって性能も伸び、コンピューティングも随分豊かなものになってきました。
しかし、アーキテクチャーはいまだ変わっていません。
64ビットになった今も、CISCの8086系列の影を引き継いでいます。
これ以上の性能向上を目指すためには、x86のしがらみを抜け新しいアーキテクチャーを創造するという、私達の一般向けパソコンにも大きなイノベーションが必要なのかもしれませんね。