Ubuntu12.04 (64bit)でGTK版のWebKitをビルドする時、libsecret-1-devをapt-getしようとしてもnot foundと言う事でインストール出来ない。
このライブラリはwebkit.orgでインストールを指定されているものであり、当然インストールされていない状況でWebKitをビルドしようとしても、以下の通り、エラーとなる。
> Tools/Scripts/build-webkit --gtk
.....
checking for LIBSECRET... no
configure: error: Package requirements (libsecret-1) were not met:
No package 'libsecret-1' found
.....
当然なければソースコードからインストールする必要があると言う事で、以下のサイトを参考にインストール。
http://git.gnome.org/browse/libsecret/
gitのアドレスが記載されているので、そのアドレスからソースコードを入手。
> git clone git://git.gnome.org/libsecret
その後はお決まりの手順でmake & install。
> cd libsecret
> ./autogen.sh
> make
> sudo make install
これでGTK版のWebKitはビルド出来る。
2012年11月23日金曜日
2012年9月23日日曜日
Skia for NaCl
最近、色々と事情があり調べなければ行けない事がコロコロと移り変わるので結構しんどい。で、今はSkiaについて。
SkiaのSource Codeを調べていると、どうもnacl関係のディレクトリが作られている。naclと言えばNative Clientの事だろう。つまりはnacl環境で使えるSkiaが開発されていると言う事か?とかなり期待。
この中のindex.htmlを見てみると、どうやらIntel系CPU向けのnaclでskiaを動かそうという試みらしい。
ChangeLogから色々情報を探してみると、どうも2週間程度前から開始されたプロジェクトの様で、まだ動作するには色々やる事がある様子。今の所、サンプルHTMLとサンプルサーバまでの様で、naclport内でskiaをビルドするのはまだ出来ていない。今後に期待ですね。
2012年9月2日日曜日
making and running CUDA sample program
今回は前回インストールしたCUDAの開発環境で正しいのか確認するため、サンプルプログラムでmakeして、実行できるか確認してみる。
- ターミナルを開いて以下のパスに移動する。
/Developer/GPU\ Computing/C
- 中にサンプルプログラムが入っているので、ターミナルから"make"を実行する。
このときに警告が多数出力されるのが若干不安。。。でも、ビルドは完了した。
- ビルド結果は以下のパスにあるので、そこに移動。かなりのファイル数がある。。。そりゃ、ビルドに時間かかるわな。。。
bin/darwin/release/
以下、サンプル画面を適当にコピー。これはsmokeParticles。
次はMandelbrot。
次はpostProcessGL。
次はparticles。
次はfluidGL。
次はsimpleGL。
次はvolumeRender。
他にも色々あるのだが、GeForceのバージョンが古いのでサポートしていない機能を使っているサンプルは動作しないものも少なからずあった。。。
ラベル:
CUDA,
GeForce,
GPGPU,
MacBookAir,
NVIDIA
Installing CUDA programming environment on MacBookAir
今回はMacでCUDAを使ってみようと思い、開発環境を構築してみた。
■Toolkitのインストール
今使っているMacBookAirはNVIDIA GeForce 320MをGPUとして搭載しているので、CUDAを使えるはず。確認したら大丈夫だったので、構築開始。
CUDAのダウンロードはNVIDIAのこのページから行う。
現時点のCUDAの最新版は5だが、安定板は4.2なのでそちらを選択。
Mac用にはCUDA toolkit、ドライバ、SDKの3種類のファイルをダウンロード。ちなみに、今回ダウンロードしたのは以下のファイル。macosってMac OSの事ね。。。「まこす」って何?とか一瞬でも思ってしまった自分がいた。。。
- cudatoolkit_4.2.9_macos.pkg
- devdriver_4.2.10_macos.dmg
- gpucomputingsdk_4.2.9_macos.pkg
■Toolkitのインストール
- cudatoolkit_4.2.9_macos.pkgをダブルクリックして暫くすると以下のウィンドウが表示される。
- ここで「続ける」をクリックすると、以下のメッセージが表示される。1GB位なら問題なし。
- 「インストール」をクリックすると、インストールが開始される。
- そのまま放置されると、以下の様にインストールは成功するので、「閉じる」をクリックして、めでたくインストール完了。
■ドライバのインストール
- devdriver_4.2.10_macos.dmgをダブルクリックすると、ディスクイメージの中身が見る事ができるので、CUDADriver.pkgをダブルクリック。
- すると、インストーラーのウィンドウが表示される。CUDAアプリが動いているとマズいので、もし起動している場合は全て終了させる様にとの事。
- 「同意する」をクリックすると、以下の画面。インストール先の選択になると思っていたら、スキップしてインストールの種類になっている。機種によっては選択出来るのかも知れない。
- gpucomputingsdk_4.2.9_macos.pkgをダブルクリックすると、以下のウィンドウが表示される。
- 「同意する」をクリックすると、以下の画面。今回はインストール先が選択可能になっている。まあ、SDKだし選択出来てもおかしくない。
- ちなみに「インストール先を変更...」を選択すると、以下の様な画面でHDDの選択が出来る様子だが、今回はデフォルトのままとした。
ラベル:
CUDA,
GeForce,
GPGPU,
MacBookAir,
NVIDIA
2012年7月2日月曜日
[FIXED]make error on 64 bit Ubuntu12.04
現在、64bit Ubuntu12.04上でChromium Browserのビルドを行っているが、Chromium Projectに記載の手順だけでは上手く行かなかったので、メモ。
makeを実行する手前までは手順通りで問題は顕在化しないが、以下のコマンドを実行するとビルドエラー(エラーログが消失してしまったので定かではないのだが、lib32と言う単語があったような。。。)。
定かでない記憶にあるlib32で想像するに64bit OSでビルドする場合には32bit用ライブラリが必要になる??と言う事かと思い、32bit OSでUbuntu8系で必要と記載のあった以下のコマンドを実行。
するとpython2.5-devは対応するモジュールがないよと言った趣旨のエラーが出るので
でバージョン確認すると2.6.5なのでpython2.6-devに修正して再度実行。すると、以下のライブラリがインストールされた。
g++-4.4-multilib g++-multilib gcc-4.4-multilib gcc-multilib lib32gcc1 lib32gomp1 lib32stdc++6 libc6-dev-i386 libc6-i386
その後再度makeを実行するとめでたくエラーはパス。
思わず、直感で対応してしまったのでエラー内容も原因も良く判らなくなってしまったのが非常に痛い。。。
makeを実行する手前までは手順通りで問題は顕在化しないが、以下のコマンドを実行するとビルドエラー(エラーログが消失してしまったので定かではないのだが、lib32と言う単語があったような。。。)。
> make chrome BUILDTYPE=Release
定かでない記憶にあるlib32で想像するに64bit OSでビルドする場合には32bit用ライブラリが必要になる??と言う事かと思い、32bit OSでUbuntu8系で必要と記載のあった以下のコマンドを実行。
> sudo apt-get install bison fakeroot flex g++ g++-multilib gperf \ libapache2-mod-php5 libasound2-dev libbz2-dev libcairo2-dev \ libdbus-glib-1-dev libgconf2-dev libgl1-mesa-dev libglu1-mesa-dev \ libglib2.0-dev libgtk2.0-dev libjpeg62-dev libnspr4-dev libnss3-dev \ libpam0g-dev libsqlite3-dev libxslt1-dev libxss-dev \ mesa-common-dev msttcorefonts patch perl pkg-config python \ python2.5-dev rpm subversion libcupsys2-dev libgnome-keyring-dev \ libcurl4-gnutls-dev libelf-dev libc6-i386 lib32stdc++6 \ libbluetooth-dev
するとpython2.5-devは対応するモジュールがないよと言った趣旨のエラーが出るので
> python -V
でバージョン確認すると2.6.5なのでpython2.6-devに修正して再度実行。すると、以下のライブラリがインストールされた。
g++-4.4-multilib g++-multilib gcc-4.4-multilib gcc-multilib lib32gcc1 lib32gomp1 lib32stdc++6 libc6-dev-i386 libc6-i386
その後再度makeを実行するとめでたくエラーはパス。
思わず、直感で対応してしまったのでエラー内容も原因も良く判らなくなってしまったのが非常に痛い。。。
2012年3月11日日曜日
checking chromium processes structure
Linuxでプロセスを調べる場合にはpsコマンドを使うことがあるが、あんまり見やすいとは言い難い出力になる(少なくとも自分には)。
今回プロセスの親子関係を調べたいと思って調べたら"pstree"なるコマンドがLinuxにはあって、それを使うと、
init─┬─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
/* 省略 */
├─chromium-browse─┬─chromium-browse
│ └─19*[{chromium-brows}]
├─chromium-browse───chromium-browse───3*[{chromium-brows}]
/* 省略 */
みたいな感じでinitをルートとしたプロセスがきっちりと親子関係が分かりやすく出力してくれる(多分、上の例は等幅フォントじゃないとずれて見えると思うが)。
N*[...]で囲まれているのは、...がN個その階層に存在していることを意味し、{...}は...がスレッドであることを意味する。
つまり、上記の例で見ると1個目のchromium-browse(rが抜けている…文字制限か…)の下には1個の子プロセスと19個のスレッドがあり、2個目のchromiumは1個の子プロセスを持ち、その子プロセスには3個のスレッドがあるという事になる。
ちなみに上記例はchromium-browserを起動した直後の状態なので、Linux版chromiumは起動直後で既に4プロセス動いている訳だ。
ここでchromiumのタブを一つ追加して、再度pstreeを実行すると
/* 省略 */
├─chromium-browse─┬─chromium-browse
│ └─15*[{chromium-brows}]
├─chromium-browse───2*[chromium-browse───3*[{chromium-brows}]]
/* 省略 */
と出力される。2個目のchromium-browseの子プロセスが2個に増えている事が分かる。よく見ると1個目のchromium-browserのスレッド数が19個から15個に減っているがこれだけでは理由は不明。
どちらにせよ1個目のchromium-browseがBrowser UIプロセスで、 2個目がRender Viewプロセスの様だ。おそらく親のプロセスは管理プロセスか何かではないかと推測。
またここで先ほど追加したタブを別ウィンドウとして切り離して再度pstreeを実行すると
/* 省略 */
├─chromium-browse─┬─chromium-browse
│ └─16*[{chromium-brows}]
├─chromium-browse───2*[chromium-browse───3*[{chromium-brows}]]
/* 省略 */
と出力される。Browser UIプロセスと思われるchromium-browserのスレッド数が1個増えているが、Render VIewプロセスと思われるchromium-browserの子プロセスは増えていない。
どうやらchromium-browserは複数のタブをウィンドウに分離してもBrowser UIプロセスは増やさずに管理している様子。
今回プロセスの親子関係を調べたいと思って調べたら"pstree"なるコマンドがLinuxにはあって、それを使うと、
init─┬─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
/* 省略 */
├─chromium-browse─┬─chromium-browse
│ └─19*[{chromium-brows}]
├─chromium-browse───chromium-browse───3*[{chromium-brows}]
/* 省略 */
みたいな感じでinitをルートとしたプロセスがきっちりと親子関係が分かりやすく出力してくれる(多分、上の例は等幅フォントじゃないとずれて見えると思うが)。
N*[...]で囲まれているのは、...がN個その階層に存在していることを意味し、{...}は...がスレッドであることを意味する。
つまり、上記の例で見ると1個目のchromium-browse(rが抜けている…文字制限か…)の下には1個の子プロセスと19個のスレッドがあり、2個目のchromiumは1個の子プロセスを持ち、その子プロセスには3個のスレッドがあるという事になる。
ちなみに上記例はchromium-browserを起動した直後の状態なので、Linux版chromiumは起動直後で既に4プロセス動いている訳だ。
ここでchromiumのタブを一つ追加して、再度pstreeを実行すると
/* 省略 */
├─chromium-browse─┬─chromium-browse
│ └─15*[{chromium-brows}]
├─chromium-browse───2*[chromium-browse───3*[{chromium-brows}]]
/* 省略 */
と出力される。2個目のchromium-browseの子プロセスが2個に増えている事が分かる。よく見ると1個目のchromium-browserのスレッド数が19個から15個に減っているがこれだけでは理由は不明。
どちらにせよ1個目のchromium-browseがBrowser UIプロセスで、 2個目がRender Viewプロセスの様だ。おそらく親のプロセスは管理プロセスか何かではないかと推測。
またここで先ほど追加したタブを別ウィンドウとして切り離して再度pstreeを実行すると
/* 省略 */
├─chromium-browse─┬─chromium-browse
│ └─16*[{chromium-brows}]
├─chromium-browse───2*[chromium-browse───3*[{chromium-brows}]]
/* 省略 */
と出力される。Browser UIプロセスと思われるchromium-browserのスレッド数が1個増えているが、Render VIewプロセスと思われるchromium-browserの子プロセスは増えていない。
どうやらchromium-browserは複数のタブをウィンドウに分離してもBrowser UIプロセスは増やさずに管理している様子。
2012年3月5日月曜日
Reading platform.h in v8 repository
v8のメモリまわりを知りたいので、virtual memory機能を調べるとplatform.hにVirtualMemoryなるクラスを発見。
予約されたメモリ領域を表現し制御するクラス。
予約されたメモリの制御は代入とcopy-contructing?(コピーコンストラクタの誤字と思われる)によって他のVirtualMemoryオブジェクトにアサイン可能。予約されたメモリはお事理なるオブジェクトからは削除される。
メソッドは以下のものがある。日本語はheader fileに記載のコメント。
もしアライメントを持って予約されたメモリならば、このアドレスは必ずしもアライメントされているとは限らない。アライメントブロックの先頭を取得するためにはアライメントサイズの倍数だけ端数を切り捨てる必要があるかもしれない。
もしアライメントを持って予約されたメモリならば、このサイズは要求されたサイズよりも大きくなるかもしれない。
古いオブジェクトはこれ以上動作しない(IsReserved()はfalseを返す)。
基本的なメモリ管理クラスの様だ。ccファイルの方はplatform別にplatform-<プラットフォーム名>.ccと言うファイルになっている。linuxの場合にはplatform-linux.ccといった具合。
次回はccファイルの中身を見てみる予定。
class VirtualMemory
予約されたメモリ領域を表現し制御するクラス。
予約されたメモリの制御は代入とcopy-contructing?(コピーコンストラクタの誤字と思われる)によって他のVirtualMemoryオブジェクトにアサイン可能。予約されたメモリはお事理なるオブジェクトからは削除される。
メソッドは以下のものがある。日本語はheader fileに記載のコメント。
VirtualMemory();
空のVirtualMemoryオブジェクトを生成。予約されたメモリを持たない。
exlicit VirtualMemory(size_t size);
サイズが引数sizeのvirtual memoryを予約する。
VirtualMemory(size_t size, size_t alignment);
引数alignment毎にアライメントされた、サイズが引数sizeの領域を持つvirtual memoryを予約する。この処理ではaddress()によって戻された位置ではないかもしれない。
~VirtualMemory();
このVirtualMemoryオブジェクトによって制御されていた予約したメモリを開放する。
bool IsReserved();
予約されたメモリを持っているかどうかを返す。
void Reset();
組み込まれたVirtualMemoryオブジェクトの初期化、もしくはリセットを実行する。
void* address();
予約されたメモリの先頭アドレスを返す。もしアライメントを持って予約されたメモリならば、このアドレスは必ずしもアライメントされているとは限らない。アライメントブロックの先頭を取得するためにはアライメントサイズの倍数だけ端数を切り捨てる必要があるかもしれない。
size_t size();
予約されたメモリのサイズを返す。戻り値が意味あるのはIsReserved()がtrueの場合のみである。もしアライメントを持って予約されたメモリならば、このサイズは要求されたサイズよりも大きくなるかもしれない。
bool Commit(void* address, size_t size, bool is_executable);
実際のメモリをコミットする。コミット操作が成功したかどうかを戻り値で返す。
bool Uncommit(void* address, size_t size);
実際のメモリをアンコミットする。アンコミット操作が成功したかどうかを戻り値で返す。
void Release();
[コメントなし]
void TakeControl(VirtualMemory* from);
予約された領域の制御を異なるVirtualMemoryオブジェクトにアサインする。古いオブジェクトはこれ以上動作しない(IsReserved()はfalseを返す)。
static void* ReserveRegion(size_t size);
[コメントなし]
static bool CommitRegion(void* base, size_t size, bool is_executable);
[コメントなし]
static bool UncommitRegion(void* base, size_t size);
[コメントなし]
static bool ReleaseRegion(void* base, size_t size);
ReserveRegion()によって返されるベースポインタと予約時のサイズと同サイズの値を引数に実行する必要がある。基本的なメモリ管理クラスの様だ。ccファイルの方はplatform別にplatform-<プラットフォーム名>.ccと言うファイルになっている。linuxの場合にはplatform-linux.ccといった具合。
次回はccファイルの中身を見てみる予定。
ラベル:
chromium,
JavaScript,
Linux,
v8
登録:
投稿 (Atom)


























