32ビット版か64ビット版か!!?

以下述べることは所詮は後付けの理屈です。それに私たちはPC関係の技術者ではありませんから、最後は「耳」が全てです。
ただ、一部では64ビットの方が32ビットよりも高性能なんだから音もいいんだろう・・・と言う雰囲気的もありますので、事はそれほど単純ではないと言うことを示して後の議論を待ちたいと思います。

32ビット版と64ビット版の違い

この32ビットとか64ビットというのはOSが扱える情報量を示しています。もう少し正確に表現すると、CPUが一度に処理できる情報量の上限を表しています。

  • 32ビット→2の32乗=4,294,967,295個の情報を一度に扱える
  • 64ビット→2の64乗=18,446,744,073,709,551,615個の情報を一度に扱える

64÷32=2なので扱える情報量が2倍になると言うような単純な話ではありません。ビット数は指数計算になりますので「64÷32=2」ではなくて、「2の(64-32)乗」倍になるわけです。
64ビット版OSが一度に扱える情報量の上限は32ビット版OSの約40億倍というとてつもない性能を持っているのです。

この40億倍というのは実感としてはピンとこないのですが、こういうときには「具体化」という作業をするのが有効です。
もしも、64ビットOSが理想的に動作する環境で、さらにそのOS上で理想的に動作するソフトがあったと想定します。そう言う環境のもとで64ビットOSならば1秒で終了する仕事を32ビットOSの上で走らせればどれくらい時間がかかるでしょうか?
シンプルに考えれば40億秒必要になるはずです。40億秒を言われてもピンときませんが約130年です。

もちろん、実際はこれほど単純ではありませんが、それでも64ビットOSは32ビットOSと比べれば、ただ単に高性能と言うよりは異次元ワールドと言った方がいいことが分かると思います。
何だ、それなら迷うことなく64ビット版のlightmpdを選べばいいじゃないかと言われそうなのですが、これもまた事はそれほど単純ではないのです。

扱えるメモリ量の上限がとんでもないことになっている

64ビットOSと32ビットOSを比べて、その最大のメリットとされるのがメモリに関わる問題です。
CPUはメモリを扱うときに、1Byteごとに「アドレス」を割り当てます。

32ビットOSならば一度に「4,294,967,295個」の情報が扱えるので、「4,294,967,295Byte」までのメモリにアドレスを付与することが出来ます。もしも、これを超えるメモリが搭載されていても32ビットOSではそれ以上にアドレスを割りふることが出来ないので、結果としてその上限を超えるメモリは認識することが出来ません。
「4,294,967,295Byte」は約4Gbですので、これがいわゆる「4Gbの壁」と言われるものでした。32ビットOSでは4Gbを超えるメモリは認識できませんでした。

ところが、64ビットOSならば一度に「18,446,744,073,709,551,615個」のアドレスを付与できますから、扱えるメモリ量の上限は理論的には約170億Gbということになります。(^^v
もちろん、これだけのメモリを扱えるハードウェア環境は今のところ存在しませんから、現実には一定のラインで上限を設定しているようですが、それでも「4Gbの壁」に悩まされてきた32ビットOSとは全く異なった世界が開けることは間違いありません。

しかし、ここまで読んできて、「うん?」と疑問を持たれた方がいれば、あなたは鋭い!!
そうなのです、APU1CにしてもCuBox-i4Proにしても、搭載しているメモリは2Gbなのです。そして、これがMPDを走らせる一枚基盤のPCの中では最も高スペック(alix3d2なんかはわずか256Mbでしたね。)なのですから、4Gbの壁がある32ビットOSであろうが、それを遙かに超えるメモリ量を扱える64ビットOSであろうが、何の問題もないように見えるのです。

つまり、メモリ管理に関わる64ビットOSの優位性はAPU1Cに関しては全く意味を持たないのです。(言い切っちゃいましょう!!)

そして、ただ単に優位性がないだけならばいいのですが、64ビットOSは広大なメモリ領域を管理するために少しばかりたくさんのメモリを使ってしまうという問題をもっています。これが世間一般で使われている64ビット版のWindowsPCならば通常は8Gbとか16Gb程度のメモリを積んでいるのが普通ですから、メモリ管理のために多少余分にメモリを消費しても何の問題もありません。
しかし、APU1Cのようなセンシティブなボードの場合は、この2Gbという限られたメモリ領域の中から無駄にメモリを消費されることはあまり有り難い話ではありません。

実際、topコマンドで32ビット版と64ビット版の挙動を調べてみると、64ビット版の方がメモリを食いつぶしているのが分かります。
両者ともに音楽再生している状態での挙動です。それから、とりあえず比較のために「cpuaffinity」はノーマルの「0」に設定しています。

topコマンドで「1」を入力すると以下のように二つのCPUの挙動が表示されます。(くわしくはこちら

<64ビット版>

音楽再生をスタートしてすぐの状態です。

Mem: 235056K used, 1785664K free, 0K shrd, 1K buff, 6827072K cached
CPU0: 0.2% usr 1.0% sys 0.0% nic 98.3% idle 0.0% io 0.0% irq 0.4% sirq
CPU1: 0.0% usr 0.0% sys 0.0% nic 100% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 0.00 0.01 0.01 1/69 205

10分後にはこんな感じになりました。なんだか、どんどんメモリを食いつぶしているような気がします。

Mem: 333680K used, 1687040K free, 0K shrd, 1K buff, 6828160K cached
CPU0: 0.2% usr 1.0% sys 0.2% nic 98.1% idle 0.0% io 0.0% irq 0.4% sirq
CPU1: 0.0% usr 0.0% sys 0.0% nic 100% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 0.00 0.03 0.03 1/69 210

そして音楽再生を終了して5分後です。音楽再生が終わってもメモリが解放されていないように見えます。

Mem: 333672K used, 1687048K free, 0K shrd, 1K buff, 6822768K cached
CPU0: 0.0% usr 0.0% sys 0.0% nic 100% idle 0.0% io 0.0% irq 0.0% sirq
CPU1: 0.0% usr 0.0% sys 0.0% nic 100% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 0.00 0.01 0.03 1/69 214

<32ビット版>

音楽再生をスタートしてすぐの状態です。

Mem: 175428K used, 1846780K free, 0K shrd, 135040288K buff, 135040336K cached
CPU0: 0.4% usr 1.0% sys 0.0% nic 97.7% idle 0.0% io 0.0% irq 0.8% sirq
CPU1: 0.0% usr 0.0% sys 0.0% nic 100% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 0.04 0.04 0.02 1/71 205

10分後にはこんな感じ、やはりメモリを食いつぶしているように見えますが、64ビット版よりはましなような気がします。

Mem: 262204K used, 1793536K free, 0K shrd, 135040176K buff, 135040224K cached
CPU0: 0.3% usr 1.1% sys 0.0% nic 97.8% idle 0.0% io 0.0% irq 0.7% sirq
CPU1: 0.0% usr 0.0% sys 0.0% nic 100% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 0.02 0.07 0.05 1/69 206

音楽再生を終了して5分後、やはりメモリは解放されていないように見えます。

Mem: 264936K used, 1777272K free, 0K shrd, 135040176K buff, 135040224K cached
CPU0: 0.0% usr 0.0% sys 0.0% nic 99.8% idle 0.0% io 0.0% irq 0.0% sirq
CPU1: 0.2% usr 0.0% sys 0.0% nic 99.7% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 0.00 0.06 0.05 1/69 233

OSのビット数とは直接関係のない話ですが、この挙動を見ていると、lightmpdを使うときはある程度音楽を聴いた後は一度電源をオフにした方がいいのかもしれません。
そう言えば、気のせいかもしれませんが、電源をオンにしたままの状態でリスニングルームを離れ、何時間かたってから舞い戻ってきてそのままの状態で音楽を聴いたときに「あれっ?」という感じがするときがあります。
このあたりのことはもう少し挙動を調べてみる必要があるかもしれません。

なお、デジファイさんより教えていただいたhtopコマンドで挙動を調べても

  • 32ビット版では[Mem 105/1994Mb]
  • 64ビット版では[Mem 176/1994Mb]

あたりの数値が表示されます。
topコマンドとの数値の違いは、htopコマンドでは起動している14のスレッドに関わる数値しか表示されないからのようです。また、音楽再生を続けてもhtopコマンドではメモリを食いつぶしてはいるようには見えませんので、lightmpdはどこか別の部分でメモリを食いつぶしているのかもしれません。

どちらにしても64ビット版は32ビット版に比べて無駄にメモリを食いつぶしていることは間違いないようです。そして、その違いは100Mb程度のようなのですが、APU1Cのような繊細なボードの場合はこのわずかな違いが音質に影響を与えているような気がします。少なくとも、その可能性は否定できないように思えます。

扱えるHDの上限がとんでもないことになっている

次なる64ビット版OSのメリットは扱えるHDの上限が飛躍的に拡張されたことです。

CPUがHDを扱うときにもアドレスを割り当てなければいけません。これはメモリの時と同じです。
32ビットOSだと「4,294,967,295個」のアドレスが割り振れることはもうおわかりだと思います。そして、その一つのアドレスで管理できる記憶容量が現行では512Byteが主流になっていますから、「4,294,967,295×512」で約「2TByte」が上限となります。これが、いわゆる「2TByteの壁」と呼ばれるものです。
もう計算が煩わしいので途中経過はパスしますが(^^;、64ビット版の上限は理論的には「16000000TByte」になります。

しかしながら、今さら説明の必要もないと思うのですが、APU1Cの上で動作するlightmpdにとって、そのようなことは何のメリットもありません。全くの無意味だと言い切ってもいいと思います。

ソフトウェアを高速に処理できる。

こうして見てくると、APU1Cのようなハードウェアを使っている限りは64ビット版OSにはほとんどメリットがないように見えます。
しかし、64ビットOSは32bit版のOSよりも高速にソフトウェアを処理できるというメリットがあります。

ただし、このメリットを十分に享受するためにはそのソフトウェアが完全に64bitに対応している必要があります。そして、問題は世に出回っているほとんどのソフトウェアは古いタイプの32ビットOSに対応する仕様になっていて、完全に64ビットに対応しているソフトウェアは限られていると言うことです。そして、困るのは32ビットOSを想定して書かれたソフトウェアやドライバは64ビット版では基本的には動作しないということです。

たとえば、マイクロソフトの公式サイトでも「32 ビット バージョンの Windows 向けに設定されたデバイスドライバーは、64 ビット バージョンの Windows を実行しているコンピューターでは動作しません。」と書いています。
ただし、ソフトウェアに関しては「WOW64」とい一種のエミュレータを介することで32ビットで書かれたコードを64ビットでも動作するようにしています。ただし、これはあくまでも擬似的に対応しているだけなので64ビット版の高速処理の恩恵を完全には享受できません。さらには、そのエミュレータを介しても動作しないものもあります。

さて問題はMPDです。
言うまでもないことですが、MPDのソースコードは32ビットカーネルを前提に書かれているはずです。

もともと64ビット版OSというのは、メモリを大量に食いつぶしていくWindowsOSが「4GBの壁」に突き当たって二進も三進もいかなくなり、その閉塞状況を打破するための方途として採用されたものです。WindowsOSと比べれば遙かにメモリの消費量の少ないLinuxにおいて、本当に64ビットカーネルが必要なのかどうかはかなり微妙な話です。
ですから、Linuxで動作させることを前提としたソフトウェアのソースコードはまず間違いなく32ビットカーネルを前提として書かれています。おそらくMPDも例外ではないはずです。ですから、デジファイさんがリリ-スしてくれた64ビット版に組み込まれたMPDがどういう形式で対応しているのかが問題になると思うのですが、ざっと調べた限りではよく分かりませんでした。(^^;オイオイ・・・。

ただし、何らかの形式で擬似的に対応していたとしても、32ビットカーネルよりも高速でMPDが処理できるであろう事は間違いなと思われます。ですから、多少のエクスキューズがつくとしても、この点に関しては64ビット版の方が有利かと想像されます。
しかしながら、再生ソフトが高速に処理できることが音質面にどの程度のメリットをもたらすのかというようなことは今までほとんど話題にはなりませんでした。
もしも、64ビット版がもっている音の太さや濃さがこの部分に起因しているならば、これは無視できないポイントになるかと思われます。

とりあえずのまとめ

と言うことで、32ビットと64ビットを比べて、必ずしも単純に64ビットの方が有利にはならないと言うことを、後付けの理屈で説明しました。

ただ、ここで気にとめてほしかったことは、「耳」による判断というオーディオの本道を忘れて、数字だけで全てが分かったようなつもりになってはいけないと言うことです。
この内容とは外れますが、昨今のハイレゾやDSD音源を巡る話題には正直うんざりしています。

たとえば、「CD規格の16bit 44.1KHzの音源と、24bit 192KHzのハイレゾ音源を比べればどちらがいい音がするでしょうとか?」聞かれれば、おそらく正解は「聞いてみなければ分からない」のはずです。アナログ時代の録音をCD規格にマスタリングした音源とハイレゾ規格にマスタリングした音源をき比べてみると、明らかにCD規格の音源の方が好ましく思えることがよくあります・・・と言うか、ほとんどの場合はCD規格でマスタリングした音の方が好ましく聞こえます。
さらに言えば、最初からハイレゾ規格で録音した音源で、それをハイレゾ規格で配信している場合でも「なんじゃこりゃ?」と思うものが少なくありません。さらに、そう言う音源の「演奏」のクオリティはおおむね劣悪なのですから、もう救いようがありません。

もっとも、こんな事を書くと、「お前のシステムのアンプやスピーカーはハイレゾ対応の性能を持っていないからだ」という批判が聞こえてきそうです。本屋でちらっと見た雑誌にも「ハイレゾ時代のアンプ選び」なんて言うタイトルが踊っていましたからね。
しかしながら、それなりに長くオーディオをやってきた人ならば今から30年ほど前に「デジタル対応のアンプやスピーカー」なんて話題があふれたことを思い出すでしょうし、その後、そう言うデジタルに対応したアンプやスピーカーがどのような末路をたどったかはよく知っているはずです。そんな亡霊が復活したかのような「ハイレゾ対応云々」の主張には反論することすら馬鹿馬鹿しくなってしまいます。

ああ、ちょっと言葉に刺が混ざってしまいました・・・深謝m(_ _)m
話を戻します。

現状はそう言う「耳」による判断はほったらかして、ただ表面的な数字だけを見て全てが分かったようなことを言う人が少なくありません。
「16bit 44.1KHz < 24bit 192KHz」という数値の判断だけで全てが解決すれば楽な話ですが、オーディオはそれほど底は浅くはありません。とりわけ、ハイレゾにすれば全て問題が解決するような物言いをしている評論家、またはハイレゾにしなければ時代遅れみたいな事をあおり立てる評論家などは絶対に信用すべきではありません。 さらに、ここまで書いた勢いでもう一つ付け加えさせていただくと(^^;、「ステレオ録音 > モノラル録音」と言う図式に至ってはさらに広くしみこんでいます。
結果として、モノラル録音と言うだけで全く聞こうともしない人が少なくありません。
しかしながら、ジャズやクラシック音楽をメインに聞いている人ならば、そのようなスタンスをとり続けることはとんでもなく勿体ない話です。それは、音は悪いけれども演奏の歴史的価値が云々というレベルの話だけではなくて、良好な状態でモノラル録音された音源を良好な状態でモノラル再生すれば、下手なステレオ録音などは足元にも及ばないような世界を見せてくれるからです。

しつこく繰り返しますが、オーディオにおける最終的な判断の基準は「耳」です。スペックが教えてくれることはわずかです。
そして、私の耳は現状では32ビット版を選択しました。同じ経緯で64ビット版を選択する人はいても何の不思議はありません。

ただし、選択した後からは、その選択の根拠となるような理論的な裏付けに思いを巡らせることは、とりわけPCオーディオの世界では大切なことだと思います。拙いながらも思いを巡らせたおかげで、もしかしたら新しいボードが開発されて搭載されるメモリが4Gbを超えるようになれば64ビット版のメリットをもう一度しっかりと確かめる必要があるな・・・と言う方向性が自分なりにもてるようになりました。

もう少し具体的に言うと、「APU1C」に搭載されているメモリは2Gbですが、「APU1C4」の場合は4Gbです。
現状ではこの「APU1C4」は入手が難しいのですが、それでもこのボードに64ビット版のlightmpdを走らせればどんな音がするのだろう?と言う興味はあります。
そして今の流れを見れば、シングルボードの基盤といえどもCPUもメモリも増強される方向性です。今後、さらに強力なボードがリリースされれば、昔は32ビット版の方が音がいいなんて話をしていたな・・・(^^;みたいな時代がくるかもしれません、いや、きっとくるでしょう。

と言うことで、32ビット版と64ビット版についての話題だけでずいぶんと長くなりました。
「cpuaffinity」に関わる話題は次回に続く・・・となります。