PS4の話(例1, 例2)もすでにいろいろ出ている中で、新しいPS3が発表されました。
高性能なゲーム機あるいはBDプレーヤーを求めている方には朗報なのでしょうが、私にとっては少し残念なニュースです。
新しいPS3では、「他のシステムのインストール」ができないそうです(参考)。「PS3でGNU/Linux、何するの?」の答えの一つ試すことはできなくなるのです(公式には)。高速、高画質H.264ソフトウェアエンコーダ for PS3のようなものを作るのも難しくなるでしょう。
PS3に最適化した単精度計算プログラムの性能は、Core i7のような最新のCPUを超えています。PS3の発売時期を考えると驚異的なことです。簡単な例を紹介しましょう。単純な行列のかけ算です(C++で使っているものから抜き出したので、C言語なのにmatrix_mul_blas.ccです)。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#ifdef __PPU__
#include <blas.h>
#include <malloc_align.h>
#endif
//単精度の場合
typedef float Number;
#define GEMM sgemm_
//倍精度の場合
//typedef double Number;
//#define GEMM dgemm_
#ifndef _PPU__
extern "C" int GEMM(char*, char*, int*, int*, int*, Number*, Number*, int*, Number*, int*, Number*, Number*, int*);
#endif
int main(int argc, char** argv){
int SIZE=atoi(argv[1]);
int REPEAT=atoi(argv[2]);
#ifdef __PPU__
Number* A=(Number*)_malloc_align(sizeof(Number)*SIZE*SIZE, 7);
Number* B=(Number*)_malloc_align(sizeof(Number)*SIZE*SIZE, 7);
Number* C=(Number*)_malloc_align(sizeof(Number)*SIZE*SIZE, 7);
#else
Number* A=(Number*)calloc(SIZE*SIZE, sizeof(Number));
Number* B=(Number*)calloc(SIZE*SIZE, sizeof(Number));
Number* C=(Number*)calloc(SIZE*SIZE, sizeof(Number));
#endif
char transa='n';
char transb='n';
int size=SIZE;
Number alpha=1;
Number beta=0;
int i, j;
for (i=0; i<SIZE; ++i){
for (j=0; j<SIZE; ++j){
A[i+SIZE*j]=10*i+j;
B[i+SIZE*j]=1000*i+100*j;
}
}
for (i=0; i<REPEAT; ++i)
GEMM( //alpha A B + beta Cを計算する
&transa, //Aを転置、共役転置するかどうか('n', 't', or 'c')
&transb, //Bを転置、共役転置するかどうか('n', 't', or 'c')
&size, //AとCの行数
&size, //BとCの列数
&size, //Aの列数=Bの行数
&alpha, //A*Bにかける定数
A,
&size, //Aの第1次元('n'ならmax(1, m)以上)
B,
&size, //Bの第1次元('n'ならmax(1, k)以上)
&beta, //Cにかける定数
C,
&size //Cの第1次元(max(1, m)以上)
);
//メモリの解放を省略
return 0;
}
参考:Lapackの使い方
Core 2 Quad Q6600 (2.4GHz)を使って、「g++ -O3 matrix_mul_blas.cc -lblas」とコンパイルして実行すると、8.2 GFlopsくらいになりました(行列サイズは2048、倍精度だと4.2 GFlopsくらい)。Core 2 Quadの性能はもっと高いのですが、ふつうにインストールされるBLASでの行列のかけ算はコアを1つしか使わないのでこんなものでしょう。
Core i7 940 (2.93GHz)とIntel Math Kernel Libraryを使って、「icc -O3 matrix_mul_blas.cc -lmkl_em64t -lmkl -lguide -lpthread」とコンパイルして実行すると、90 GFlopsくらいになりました(行列サイズは2048、倍精度だと44 GFlopeくらい)。
PS3を使って、「ppu-g++ -O3 -I/opt/cell/sdk/usr/include matrix_mul_blas.cc -lblas」とコンパイルして、「export BLAS_NUMSPES=6」のようにSPE数を設定してから実行すると、125 GFlopsくらいになりました(行列サイズは1920、倍精度だと7.5 GFlopsくらい)。Core i7より速いです。
このような計算資源が、ユーザの手の届かないところに行ってしまいます。
速いPCを買えばいいと思う人もいるかもしれません。確かに、ここで紹介した計算資源の問題はそれで解決してもいいでしょう。しかし、CELLというちょっと変わったアーキテクチャのためのプログラムを書く喜びは、簡単に替えられるものではありません。
紐付きアプライアンスなんか要らないという向きは、在庫があるうちに旧型を入手しておいた方がいいかもしれません。



追記:SCEの吉増一氏によれば、旧型から「他のシステムのインストール」機能が排除されることはないそうです。
吉増氏:基本的には、PS3専用のソフトウエアを利用していただきたい、ということです。PS3はすでに2,000万台出荷しています。今後も、それらのモデルでOther OSインストールの機能を排除することはありませんので、そのままお使いいただけます。(SCEに聞く、薄型PS3とソフトウエアVer.3.00の秘密)
追記:PS3の「LinuxなどのOSをインストールする機能」を削除したソニーが賠償金を支払うことに