Chiselを使ってみる

ChiselはScalaを使ってハードウェア記述をすることができるプラットフォームのことだ。最近研究でVerilogを書いているが、限界に達している気がするので正月休みを利用してChiselの勉強をしている次第である。

ChiselはどうやらUCバークレイが開発して、RISC-Vの実装にも利用されているようだ。RISC-Vの実装に使うことができるのだから、作りたいものは恐らく作ることができるだろう。

開発環境はUbuntu 18.04。Chiselを使うためにはsbtというビルドシステムとscalaの開発環境のインストールが必要になる。sbtはバイナリをダウンロードしてインストールという人もいるがaptでも入る。(古いかもしれないが個人的にはaptがオススメ)

ディレクトリ構成はsbtによって制限される。具体的にはsbtのリファレンスを参照。ルート直下もしくはsrc/(main|test)/scala以下にファイルを置くとおぼえておけば良いだろう。src/に置いてもクラスが見つからないと言われてしまう。また、packageとしてまとめておかないとクラスを呼び出すことが出来ない(?)ので注意する必要がある

sbt compile
sbt runMain example/Hello

poke、expectについては明日

Macbook proのキーボードとトラックパッドの故障の修理 (IPD Flex ケーブルを自力で交換する)

このページを見ているということは故障して困ってこのページに来ているのだと思います。具体的にはキーボードとトラックパッドが効かず、ログイン画面から前に進めずに困って居ました。

念のためですが、ここに書いてあることを実行するのは自己責任でお願いします。

故障箇所は本当にIPDケーブルか

まず確認すべき点はここでしょう、幾つかのサイトを回った結果

  • CAPS Lockキーを押してもランプがつかない
  • キーボードとトラックパッドの両方が反応しない
  • 電源ボタン(イジェクトボタン)は問題なく動作する

という点が全て当てはまればIPDケーブルの故障を疑ったほうがよさそうです。

壊れたMacbook

  • Macbook pro retina 13インチ Early 2015 A1502
  • 特に落下などはしていない
  • どうやらこのMacbookはIPDフレックスケーブルの故障が多いらしい

Apple Genius Barに依頼する場合

大体1万円くらいで修理が出来るようです。Macbookの修理にしてはお安いほうですね。大抵の人は出すのではないでしょうか。しかし自分でやってみたいという好奇心が止められなかったというのと、安く済むなら自分でやれば良いじゃないかという思いから自分でやることにしました。

準備するもの

  • ドライバー (物理)
  • IPD Flexケーブル

ドライバーは星型のものとT5と呼ばれる型のものが必要になります。IPDフレックスケーブルはAmazon経由で中国から取り寄せました。

方法

Macの裏蓋を外します。下側の中央にあるバッテリーの上を走るケーブルがIPD Flexケーブルです。これを交換するのが最終目標です。

はじめに電池のケーブルを基盤から外します。

次にIPD Flexケーブルの上側の留め具のネジを外し留め具を外します。

上側から外し粘着部分をペリペリ剥がして最後に下側の部分をコネクタから引っこ抜きます。

新品のケーブル(下)と古いケーブル(上)の比較画像です。

新品のケーブルを下のコネクタに差し込み、貼り付け、上のコネクタを差し込みます。おそらくこの時にあまり上の方にケーブルが余らないようにするのが良さそうです。

あとは分解したのと逆順で組み立てれば修理完了。

modelsimが起動しない (ubuntu16.04)

modelsimがubuntuで起動しなくて困っていた。
以下長々と書く内容をまとめるとライブラリが足らなくて起動できなかったようだ。
vsimというのがmodelsimの実体なのだが、実行しても”No such file or directory”と出てきて起動しなかった。
fileコマンドを使って見てみると
./vsim: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.4, BuildID[sha1]=be0130f25d5768e095133f4ed1d9d69902768269, stripped
と出てくるのでやはりELFでi386の実行ファイルだ。/lib/ld-linux.so.2はさすがにあるだろうと思っていたのだが、探して見たら無かった。どうやらこのマシンには/lib64/ld-linux-x86-64.so.2しか無いようだった。”ldが無い”というのはちょっと最初は信じられなかったがどうやら調べてみるとi386用のlibcが無いらしい。
今までアプリケーションはapt経由かソースを持ってきてコンパイルするかだったのでこの様なことになったのだろう。
ということで
sudo apt install libc6:i386
をした後に./vsimを実行すると
./vish: error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or directory
というメッセージに変わるのでここからはエラーで出てきたライブラリのi386版をインストールするだけで済むので楽になる。
以下のコマンドで必要だったライブラリを一括インストールできる。
sudo apt install libc6:i386 libx11-6:i386 libxext6:i386 libxft2:i386 libncurses5:i386

#x86のライブラリが全然無いなんて思ってなかった

キャッシュとスクラッチパッド

キャッシュ

キャッシュはメインメモリの内容をその名の通りキャッシュしておくわけだが、メリットとしては主記憶からわざわざ近くに持って来なくてもアクセス先の周辺やそれ自身がアクセスされたことがあるといつのまにか近くにデータが持って来られているという算段だ。同じ変数を頻繁にアクセスする時間的局所性と近くのデータにアクセスしやすい空間的局所性を利用することで効率的に動作する。

スクラッチパッドメモリ(データメモリ)

スクラッチパッドメモリのことを知らない人は多いかもしれないが、先ほど説明した通り、スクラッチパッドメモリは小さなキャッシュではない普通のメモリに見える。これを普通のメモリとして変数を割り当てたりするのはナンセンスな使い方だ。せっかくの高速なメモリなのでキャッシュと同じように頻繁にアクセスされるような使い方が望ましい。

ネットワークスペシャリスト合格体験記

今年はもうネットワークスペシャリストの申し込みが終わったようだ。
ブログのネタが無くなって来たので昨年のネスペの合格について書いてみようと思う。

まずネスペを受けるに当たって一番大事にして欲しいのは過去問だ。
教科書を完璧にするという考え方はネットワークスペシャリストには通用しないように思える。なぜなら完璧にしようとすると暗記量が爆発してしまうからだ。一方で過去問を見ていると出題される分野がある程度偏っていることが見て取れると思う。特にセキュリティとシステムの冗長化に関しては毎年必ず出ると考えて良いだろう。

とは言いつつ、最初から過去問を解くことが出来るわけではない。従って、最初は教科書的なものを利用することになると思う。

最初に利用して欲しいテキストは”応用情報技術者”のネットワークに関する項だ。
この部分は丸暗記で良い。応用情報で出るようなネットワークの話はネスペを取るためには必要最低限暗記しなくてはならない骨格となるからだ。

おそらく応用情報のネットワークが出来るようになるとネスペの午前問題の4割程度は出来るようになるのではないか(当然応用情報のテキストは沢山あるのでどれを使うかによって大きく変わるだろうが)。

次はいわゆる道場で午前問題を完璧にするべきだ。問題を解くのは楽しい故、モチベーション維持に大変有効となる。
解くときは解説付きに限定すると良いだろう。
自分は通学中(片道一時間以上)に計算問題抜きで、自宅では計算問題ありで行なっていた。
大体合格点くらいの割合(6割)正解できるようになって来たら午後問題も並行して勉強し始めると良いと思う。

午後対策は初めに教科書について来た過去問の演習を行なった。さすがにお金を払っているだけの価値はある(Bookoffで200円だったがw)。数年分みっちりやるとなんとなくの感覚は掴めるようになるのではないだろうか。
しかしながらこれだけだと当然演習量が不足する。そこでIPAから過去問をダウンロードして何年分も演習することで補う。IPAは解説がそこまで十分でないのでわからないままになってしまう時がいくつかあった。そんなときは教科書を眺めたりネットで検索するなどして適宜解消していくことになるだろう。

試験前は道場で90%、午後で得意分野は80%、そうでない分野は60%くらい取れるように仕上げると…

合格できる。

なんだかんだある程度余裕を持った合格でした。
それでも最短の努力で済んだかなという印象です。

イキリたかっただけです。ごめんなさい。
これから受験する方、頑張ってください。

CentOSとUbuntuとWindowsのトリプルブート(デュアルブート)

元々Windowsがインストールされている環境からUbuntuをインストールすれば簡単にデュアルブートさせることができた。

しかしCentOSをここに入れたら詰まったのでメモ

元々OSがインストールされているということと、パーティションは自分で設定したかったので手動で設定することにした。

しかし「partition で ext4 ファイルシステム を 使用する場合、grub2によって組込まれる core.img用領域 が sda には不足している可能性があります。」というエラーがどうしても解決できなかった。

どうやらgrubが問題ということでブートローダのインストールをしないことで解決することができる。

おそらく新しいパーティーションだとここまでで済むはずだが、自分は元々ubuntuが2個入っているうちの1つを潰してCentOSをインストールした関係で間違えてgrubを潰してしまった。そのせいでlive cdから修復させざるを得なかった。この方法は以下を参考にしてほしい。

https://askubuntu.com/questions/145241/how-do-i-run-update-grub-from-a-livecd

コンピュータアーキテクチャ界隈におけるプログラマビリティの定量的評価

研究をしていて壁に行き詰まった。
自分の先行はコンピュータアーキテクチャなのだが、コンピュータアーキテクチャを変えようとすると大体今の汎用プロセッサよりプログラミング、コンパイルが難しくなる。
プログラミング、コンパイルの容易さを表す指標がプログラマビリティなのだが、論文を読んでいてもプログラマビリティが定量的に評価されていない。

定量的に評価されていないものが良くなった、悪くなった、あれより良い、これより良いと言われたところでそれを証明することが出来ない。定性的な評価はされていてもどの程度信頼性を置いて良いものか分からない(これは定量的評価が可能であっても)。

自分としてはプログラマビリティの高いアーキテクチャが作れたつもりなのだが、そのアーキテクチャのプログラマビリティがどうなのか人に説明することが難しい。

こんなんでは新しいISAの形を考える分野が縮小してしまうのではないか。

Yocto(opkg)のpythonでmmapを使う方法 (DE0-nano-SoC)

DE0-nano-SoCはFPGAとARMの組み合わせのチップが載っているSoC FPGAの評価ボードであり、現在研究でこれを使っている。
その中でPython中でmmapを使いたいことがあり、嵌ったのでメモ

普通のPythonではmmapは普通に出来るらしい。
しかしながらDE0-nano-SoC上のPythonで走らせたところimport mmapの時点でNo such moduleと言われてしまった。
調べるのに時間がかかったが、どうやらライブラリが足らないんじゃないかということに落ち着き、aptで入れようとしたがyoctoだったので代わりにopkgで試した。が、しかし、ライブラリが無く、焦った。

パッケージ一覧を眺めたところpython-mmapというパッケージを発見、
無事インストールし、解決した。

opkg install python-mmap

gem5のkernel too oldエラー

gem5を使ってみたら”kernel too old”というエラーが出てしまい使えなかった。
ぐぐってみると多くの人がここの部分で躓いていてそれらの回答はいつもソースコードを変えなければならないものだった。

どうにかならないのかなと思いつつメモ。

ターゲットがARMの場合
src/arch/arm/linux/process.cc

unameFunc32の中の
strcpy(name->release,”ここにバージョン名”);
という部分のバージョン名を今のカーネルのバージョン名に合わせることで解決した。
ちなみに今のカーネルのバージョン名はuname -rで取得できる。

ターゲットがX86の場合は
src/arch/x86/linux/process.cc
のようだ