先日、暑さのせいか、40F1が壊れました。
2008年に買った、ソニーのフルHDテレビでした。
今回は、丁度7月に出たばかりの55X8500C、
ソニーの4KのアンドロイドTVを買いました。
サイズも40インチから55インチと拡大です。
アンドロイドTVなので、OSはLinuxじゃなくてアンドロイドになります。
電源が入らなくなったり、コンセント抜いたりと、色々あります。
かなり不安です。8月のアップデートも9月に伸びたし。
とはいえかなり綺麗です。特にエフェクト掛かった動画が綺麗に表示されてはっとしたり、巨神兵の背景のビルがすべてのっぺり見えてミニチュアだと一目で分かってしまったりと、なかなかこれまでとは違いがあります。買って良かったなとは思います。
ジェットソン!
また、アンドロイドなので、ESファイルエクスプローラーでNASのファイルがSAMBA経由で見れたり、面白いこともあります。
ニコニコ動画も見れますが、無料ユーザーの低画質モードなのでいまいちです。
テレビ台は前のテレビと一緒にかったフロアスタンドSU-FL71Mを流用しました。
SU-FL75のひとつ前で二世代前のスタンドでしたが問題なく設置できました。
これはポイント高い!!
まあ、そんな感じで購入報告と、フロアスタンドユーザに買い替えても使えるよという情報提供でした。
2015年8月21日金曜日
2015年8月8日土曜日
リモートコマンダーの使い方
リモコンのマニュアルがすごく使い難いのでメモメモ。
あとマニュアルの日本語おかしい(´・ω・`)
基本ボタンはTVモードかチューナーモードかなど、モードによって発信する信号が違うので、それを選択する必要があります。マクロ学習の時にそれを忘れやすいので注意です。
あとマニュアルの日本語おかしい(´・ω・`)
- 基本ボタンに学習
- SET長押し
- モード選択
- 学習したい基本ボタン押す
- SETランプ高速点滅
- 学習させたい機器のリモコンのボタンを長押し
- ピーと音がしたらOK
- SETボタンを押して終わる
- 操作切り替えボタンに学習
- SET長押し
- 学習したい操作切り替えボタン2回押し
- 学習
- システムコントロールボタンに学習
- SET長押し
- 学習したいシステムコントロールボタン押す
- 学習
- 基本ボタンにマクロ学習 (5ステップまで)
- SET長押し
- 10キーボタンを押したまま、モード選択
- 学習したい基本ボタン押す
- 一連の操作入力
- SETボタン押して終わる
- 操作切り替えボタンにマクロ学習(16ステップまで、また発動は2秒長押し)
- SET長押し
- ホームボタンを押したまま、操作切り替えボタン
- 一連の操作入力
- 最初にモード選択の操作切り替えボタンが必要
- システムコントロールボタンにマクロ学習(16ステップまで)
- SET長押し
- ホームボタンを押したままシステムコントロールボタン
- 一連の操作入力
- 最初にモード選択の操作切り替えボタンが必要
- 補足説明
- 最初のSET長押しは約2秒、SETランプが点滅始めるまで押す
- モード選択とは、TVやチューナーなどどの系統の信号を送るかを選択すること。上の方に8個ある操作切り替えボタンを押して選択
- 学習したいボタンを長押しすると、学習を消去
- 基本ボタンの場合はシフトボタンと同時に押せば、シフトに学習できる
基本ボタンはTVモードかチューナーモードかなど、モードによって発信する信号が違うので、それを選択する必要があります。マクロ学習の時にそれを忘れやすいので注意です。
gmailのSMTP利用許可設定
先日突然gmail経由でメールが送れなくなったのでメモ。
原因はgoogleさんの突然の仕様変更でした。
おかしいなと何度も試してたら、
とかメールが来ましたよ。それ、俺ですから(´・ω・`)
設定ページからアクセスを可能に設定する必要があるそうです。検索では出てこなかったので注意。
原因はgoogleさんの突然の仕様変更でした。
おかしいなと何度も試してたら、
最新のセキュリティ標準を満たしていないアプリからあなたの Google アカウントにログインしようとした人がいます。
とかメールが来ましたよ。それ、俺ですから(´・ω・`)
設定ページからアクセスを可能に設定する必要があるそうです。検索では出てこなかったので注意。
2015年8月6日木曜日
今日も昨日の続きです。
NAS上に電子書籍本棚を用意する話です。
昨日はCalibre OPDS PHP Serverを利用しました。
今日はその親戚のCalibre PHPを利用します。
理由は、Calibre Companionの作者?committer?の人が、後者の作者だったのでその分親和性が高いかな?という期待によるものです。結論からいうとダメでしたw
以下インストール手順。
NAS上に電子書籍本棚を用意する話です。
昨日はCalibre OPDS PHP Serverを利用しました。
今日はその親戚のCalibre PHPを利用します。
理由は、Calibre Companionの作者?committer?の人が、後者の作者だったのでその分親和性が高いかな?という期待によるものです。結論からいうとダメでしたw
以下インストール手順。
- QNAPにCalibre PHPをインストール
- Installing Calibre PHPを参考に、v0.2.8をDLします
- unzipしたものを、QNAPにscpします。/share/MD0_DATA/Web/CP/配下に直置きしました
- QNAPの流儀をよく知らないので、リブートすると消えるかも知れません
- QNAPにSmartyをインストール
- Smarty on GitHubからソースをDLします
- QNAPにscpして、/share/MD0_DATA/.local/smarty/配下に展開しました
- QNAPの流儀を(以下略
- Calibre PHPのconfig_local.phpファイルを編集します。以下のエントリーです
- library_dir
- calibreのライブラリを指します
- smarty_dir
- smarty用のテンポラリです。/tmp/smarty-cacheにしました。mkdirはしてませんが上手く動きました
- smarty
- smartyです。上で配置したsmartyのlibを指します
2015年8月5日水曜日
Calibre OPDS PHP Server (COPS) の使い方 for qnap
今回はNAS上に電子書籍本棚を用意するお話です。
Calibreというフリーな電子書籍管理システムがあります。
対象はepubやpdfなどのフリーな電子書籍。
WindowsやLinux、Macで動作します。
これを使うとある程度一元的に電子書籍を管理できます。
KindleやSony Readerだと元々用意されている仕組みだけど、フリーな電子書籍を相手にしたそういった仕組みは基本的に誰もお金を払ってくれないので実現しにくい。
そのなかで使い物になる便利なシステムが上記のCalibreです。
しかし、このCalibreが管理するデーターベースが共有出来ないタイプのデーターベースであるため、複数台のPCから管理しようとすると、途端に困ったことになる。
管理は1台からやるとして諦めるにしても、家に居る間は読む本を取り出すのに、毎回管理用のPCに移動して……というのは流石にどうかと思う。そこで、本を取り出す所だけ、NASで動かそうというのが今回のメモの内容になる。
で、今回紹介するCOPSは、Calibreのデーターベースをリードオンリーで参照し、Open Publication Distribution System (OPDS) catalogueを提供する、Apache + PHP向けのシステム。軽いのでQNAPなどのNASの上で実行できる。
以下、インストール手順。
calibreディレクトリやそこに置いておく本は、PC側のCalibreクライアントを使って、自分で用意すること。
そうすると、こんな風に参照できます。
更にCalibre Companionから気軽に読むためには、ポート指定だけで直接アクセスできないといけません。そこでVirtualHostを設定します。設定はQNAPのweb管理画面からできるので詳細はパス。
これで、Calibre Companionから家で気楽に本をダウンロードできる!と喜んだのだけど、Calibre Companionが対応しているのは、CalibreのContent Serverであって、汎用のOPDS Catalogueではなかったため使い物にならなくて愕然としている所(´・ω・`)
まあ、少なくともメールでpdfを送るタイプの使い方でKindleからは読めるようになるはずなので、今度はその設定をしてみますかね。
追記:
FBReader: Calibre connectionではそのまま使えました。
何が違うのか……と考えるも最近のhttpは複雑すぎてさっぱり分かりませんでした。
Calibreというフリーな電子書籍管理システムがあります。
対象はepubやpdfなどのフリーな電子書籍。
WindowsやLinux、Macで動作します。
これを使うとある程度一元的に電子書籍を管理できます。
KindleやSony Readerだと元々用意されている仕組みだけど、フリーな電子書籍を相手にしたそういった仕組みは基本的に誰もお金を払ってくれないので実現しにくい。
そのなかで使い物になる便利なシステムが上記のCalibreです。
しかし、このCalibreが管理するデーターベースが共有出来ないタイプのデーターベースであるため、複数台のPCから管理しようとすると、途端に困ったことになる。
管理は1台からやるとして諦めるにしても、家に居る間は読む本を取り出すのに、毎回管理用のPCに移動して……というのは流石にどうかと思う。そこで、本を取り出す所だけ、NASで動かそうというのが今回のメモの内容になる。
で、今回紹介するCOPSは、Calibreのデーターベースをリードオンリーで参照し、Open Publication Distribution System (OPDS) catalogueを提供する、Apache + PHP向けのシステム。軽いのでQNAPなどのNASの上で実行できる。
以下、インストール手順。
- 新しいファームウェアのQNAPを用意 (TS 4.1.4のTS-459 Pro+を利用)
- App Centerから最新のphpをインストール (php 5.5.26)
- COPSのインストール
- http://forum.qnap.com/viewtopic.php?f=320&t=101794 を開く
- Download COPS QPKGをクリックして、.qpkgファイルを落とす
- App CenterからInstall Manuallyをクリックして、今のqpkgファイルをインストール
- 試しにCOPSを開く (AppCenterのCOPSからOpenボタンで)
- エラーチェックが全部通るのを確認
- 僕はphp5-intlが必要と言われたけど放置
- 設定ファイルの編集
- $ cd /share/MD0_DATA/Web/COPS
- $ cp config_default.php.example config_local.php
- $ vi config_local.php
(calibre_directoryを、NAS上の自分のcalibreディレクトリに設定。
僕の場合は、/share/MD0_DATA/Multimedia/calibre/に) - もう一度COPSを開く
- 上手く動いたのでphp5-intlは放置
calibreディレクトリやそこに置いておく本は、PC側のCalibreクライアントを使って、自分で用意すること。
そうすると、こんな風に参照できます。
更にCalibre Companionから気軽に読むためには、ポート指定だけで直接アクセスできないといけません。そこでVirtualHostを設定します。設定はQNAPのweb管理画面からできるので詳細はパス。
これで、Calibre Companionから家で気楽に本をダウンロードできる!と喜んだのだけど、Calibre Companionが対応しているのは、CalibreのContent Serverであって、汎用のOPDS Catalogueではなかったため使い物にならなくて愕然としている所(´・ω・`)
まあ、少なくともメールでpdfを送るタイプの使い方でKindleからは読めるようになるはずなので、今度はその設定をしてみますかね。
追記:
FBReader: Calibre connectionではそのまま使えました。
何が違うのか……と考えるも最近のhttpは複雑すぎてさっぱり分かりませんでした。
2015年8月4日火曜日
リモートコマンダー、あるいは如何にしてPS4でBDリモコンもどきを使い始めたか
うちでは録画した番組をPS3のトルネ経由で視聴してます。
PS4のトルネで視聴したかったのだが以下の理由で諦めていました。
そこでPS4のBDリモコン対応を1年待った挙句、諦めて赤外線の学習機能付きリモートコマンダー“RM-PLZ530D”を購入しました。
みた通り、何時でも押せるチャプタースキップボタンが付いてます。
これで勝つる!!!
暫く使ってみた結果、上記の問題もほぼ解決しました。それぞれについて、簡単に対策や解決方法をまとめます。
こうやってPS4のトルネを使うようになってみると、PS3のトルネよりいい感じです。特に以下の点で良いですね。今考えると、もっと早くリモートコマンダーを買っていれば!なんて思うのです。BDリモコンに拘っている皆さんもどうですか?一度検討してみてください。
P.S.
また、ソニーは以下も使えますとか言ってますが私は使えませんでした。参考までに。
PS4のトルネで視聴したかったのだが以下の理由で諦めていました。
- PS4はBDリモコン未対応
- HDMIリンクで操作しようにもよく操作できなくなる
- HDMIリンクで利用するTV用リモコンにチャプタースキップボタンがない
- HDMIリンクで利用するTV用リモコンに△□ボタンがない
- PS4のトルネはsleep状態のnasneを起こすのが下手
そこでPS4のBDリモコン対応を1年待った挙句、諦めて赤外線の学習機能付きリモートコマンダー“RM-PLZ530D”を購入しました。
みた通り、何時でも押せるチャプタースキップボタンが付いてます。
これで勝つる!!!
暫く使ってみた結果、上記の問題もほぼ解決しました。それぞれについて、簡単に対策や解決方法をまとめます。
- 諦めてリモートコマンダーからHDMIリンクで操作しましょう
- PS4は、TVから切るとTVからPS4を起動しないと再接続できません。糞ニーはバカなの?死ぬの?なので以下の手順で操作しましょう
- 電源を切る時は、PS4のホームに戻って(リンクメニューボタン)TVを切ります
- PS4はHDMIリンクで自動的にサスペンドします
- 電源を入れる時は、TVの電源を入れます
- PS4はHDMIリンク経由で電源を入れます(ホームメニューボタン→入力→PS4→決定)
- リモートコマンダーなどのチャプタースキップが付いてTVが操作できるリモコンを買います
- △はオプションボタン→接続機器操作→オプションで選択できます。□はゲームコントローラーを使いましょう
- トルネを起動したままにしておくとnasneを起こすのが上手くなるような気がします
こうやってPS4のトルネを使うようになってみると、PS3のトルネよりいい感じです。特に以下の点で良いですね。今考えると、もっと早くリモートコマンダーを買っていれば!なんて思うのです。BDリモコンに拘っている皆さんもどうですか?一度検討してみてください。
- 視聴できるようになるまでが速い
- PS4起動→トルネに入るまでが超速いです。トルネを起動したままサスペンドするとなおさら
- 操作が軽い
- 先送りや巻き戻しなど、CPUを使いそうな所が軽いしスムーズです
- ただし、下を押しっぱなしにして7個くらい下へといった操作はラグがあっていまいち
P.S.
また、ソニーは以下も使えますとか言ってますが私は使えませんでした。参考までに。
- torne mobile
- 糞UIです。時間の無駄
- TV SideView
- うちのTVは未対応でした。対応してれば、もしかしたら
- ただ対応してても、TVが動作するのではなく、そこから更にHDMIリンクでトルネを操作できるかどうかは謎です
2015年4月14日火曜日
疎行列のデータ配置
疎行列の続きデス。今回はデータ構造について直接説明するのではなく、
その構造のなかでどうデータを配置するかという話デス。
配置には大きく分けて2つの課題がありますデス。
この方法は利用するデータ構造に依存せず利用できます。特に、GPGPU向けに、ELLPACK-Rと組み合わせて広く利用されています。例えば、Sparse matrix-vector multiplication on GPGPU clusters: A new storage format and a scalable implementationでは、pJDS (padded Jagged Diagonals Storage)法でソートする説明があります。
一方、OpenMPなんかで並列化する場合、static schedulingを使うことが多く、ソートした上で均一になるよう分散させたほうが都合がよくなります。例えば、4並列で処理する場合は例えば以下のようにソートした上で分散させるわけです。
スレッド数が少ない間ならこれでいいんですが、Xeon Phiのように244スレッドなどで処理することになると、これで長さが不十分になってしまいます。どうしたものか。ここから先は、仕事でやってる内容なので秘密です。
その構造のなかでどうデータを配置するかという話デス。
配置には大きく分けて2つの課題がありますデス。
- ソート
- 分散
■■なんて非0の数字が並んでいる疎行列があったとしましょう。そのまま、例えばGPGPUで4スレッド毎にまとめて計算すると(縦4つずつ1セットにして繰り返すと)、以下のようになります。□が4スレッド内の他のスレッドを待っている時間です。
■■■
■■■
■■■■
■■■■
■■■■
■■
■■■■
■■
■■■
■■
■■■
■■□□待ち時間が多いですね。これを、非0の数字の数でソートすると、以下のようになります。待ち時間の□を減らすことができます(この例ではたまたま□が0個まで減らせています)。ソートすることで、仕事の不均衡を偏らせて、必要ない計算をする箇所を減らすことができたわけです。
■■■□
■■■□
■■■■
■■■■
■■■■
■■□□
■■■■
■■□
■■■
■■□
■■■
■■■■反復法で解く場合、反復の前にソートして行を入れ替え、反復法を終えた後に元に戻せば済むため、こういったソートなどの重たい処理も、あまり性能に影響を与えることなく実施できます。
■■■■
■■■■
■■■■
■■■
■■■
■■■
■■■
■■
■■
■■
■■
この方法は利用するデータ構造に依存せず利用できます。特に、GPGPU向けに、ELLPACK-Rと組み合わせて広く利用されています。例えば、Sparse matrix-vector multiplication on GPGPU clusters: A new storage format and a scalable implementationでは、pJDS (padded Jagged Diagonals Storage)法でソートする説明があります。
一方、OpenMPなんかで並列化する場合、static schedulingを使うことが多く、ソートした上で均一になるよう分散させたほうが都合がよくなります。例えば、4並列で処理する場合は例えば以下のようにソートした上で分散させるわけです。
■■■■例えば、地球シミュレータ向け線形ソルバーでは、pDJDS (parallel Descending-order Jagged Diagonal Storage)法でソートして均一になるよう分散して扱う説明があります。
■■■
■■
■■■■
■■■
■■
■■■■
■■■
■■
■■■■
■■■
■■
スレッド数が少ない間ならこれでいいんですが、Xeon Phiのように244スレッドなどで処理することになると、これで長さが不十分になってしまいます。どうしたものか。ここから先は、仕事でやってる内容なので秘密です。
2015年4月12日日曜日
疎行列のデータ構造
疎行列のデータ構造のまとめの続き。
ELLPACKを中心に、ELLPACK-R形式、SELLPACK形式についてまとめます。
前回と同じく以下の配列があるとします。
前回説明したELLPACK形式。これに行中の0以外の値の個数を加えたのがELLPACK-R形式です。
今回は縦方向に並べます。
column: 0 1 0 1 1 2 2 3 * * 3 *
values: 1 2 5 6 7 8 3 4 0 0 9 0
rl: 2 2 3 2
これのSpMVするプログラムはこうなります。
4スレッドや8スレッドでセットで処理するデータが、一箇所にまとまるよう複数行ごとに分割したのがSELLPACK形式です。Sliced ELLPACK形式の名の通り、複数行(S行)ごとに分断したデータ構造です。以下はS=2の例。
column: 0 1 1 2 0 1 2 3 3 3
values: 1 2 7 8 5 6 3 4 9 0
row_start: 0 4 10
データ構造ではrow_startを使うことでパディングを減らします。CSR形式に近くなりました。ただし、Sで分けたグループ内では1行内の0以外の数が同じになるようパディングします。これのSpMVするプログラムはこうなります。
更にSELLPACK形式のデータを例えば8つずつセットになるようパディングするなどしたSELL-P形式もありますが、ここでは省きます。
続きはまた今度
ELLPACKを中心に、ELLPACK-R形式、SELLPACK形式についてまとめます。
前回と同じく以下の配列があるとします。
1 | 7 | 0 | 0 |
0 | 2 | 8 | 0 |
5 | 0 | 3 | 9 |
0 | 6 | 0 | 4 |
前回説明したELLPACK形式。これに行中の0以外の値の個数を加えたのがELLPACK-R形式です。
column | values | row length | ||||||||
0 | 1 | * | 1 | 7 | * | 2 | ||||
1 | 2 | * | 2 | 8 | * | 2 | ||||
0 | 2 | 3 | 5 | 3 | 9 | 3 | ||||
1 | 3 | * | 6 | 4 | * | 2 |
今回は縦方向に並べます。
column: 0 1 0 1 1 2 2 3 * * 3 *
values: 1 2 5 6 7 8 3 4 0 0 9 0
rl: 2 2 3 2
これのSpMVするプログラムはこうなります。
for (i = 0; i < M; ++i)この方式の利点はif文が必要なくなるということです。またGPGPUの場合4スレッドや8スレッドがセットで同じ回数繰り返す必要があります。そのため、回る回数が事前に分かると効率良くスレッド群(wrap)を割り当てることができます。更に縦方向にデータが並ぶため複数スレッドでデータを共有でき、メモリ効率も向上します。そんな次第で、ELLPACK-R形式はGPGPU向けの標準データ構造として広く使われています。
for (j = 0; j < rl[i]; ++j)
Y[i] += values[i + j*M] * X[column[i + j*M]];
4スレッドや8スレッドでセットで処理するデータが、一箇所にまとまるよう複数行ごとに分割したのがSELLPACK形式です。Sliced ELLPACK形式の名の通り、複数行(S行)ごとに分断したデータ構造です。以下はS=2の例。
column | values | ||||||
0 | 1 | 1 | 7 | ||||
1 | 2 | 2 | 8 | ||||
-------------------- | |||||||
0 | 2 | 3 | 5 | 3 | 9 | ||
1 | 3 | * | 6 | 4 | * |
column: 0 1 1 2 0 1 2 3 3 3
values: 1 2 7 8 5 6 3 4 9 0
row_start: 0 4 10
データ構造ではrow_startを使うことでパディングを減らします。CSR形式に近くなりました。ただし、Sで分けたグループ内では1行内の0以外の数が同じになるようパディングします。これのSpMVするプログラムはこうなります。
for (i = 0; i < M; ++i) {このSELLPACK形式は元々GPGPU向けに開発されましたが、実はSIMDプロセッサのように4演算毎、8演算毎に高速に演算できる場合、Sを8などに固定したSELLPACK形式が効率よいことが分かり、SIMD向けに注目されているデータ構造です。
off = row_start[i/S];
next = row_start[i/S + 1];
for (j = 0; j < (next - off ) / S; ++j)
Y[i] += values[i%S + j*S + off] * X[column[i%S + j*S + off]];
}
更にSELLPACK形式のデータを例えば8つずつセットになるようパディングするなどしたSELL-P形式もありますが、ここでは省きます。
続きはまた今度
疎行列のデータ構造
最近、仕事で疎行列ばっか弄ってるのでまとめ。
COO形式、CSR形式、ELLPACK形式についてまとめます。
例えば以下の配列があるとします。
単純に行列として記録すると、上記を1次元に並べたデータ構造を使います。
values: 1 7 0 0 0 2 8 0 5 0 3 9 0 6 0 4
これとベクトルXを掛けてベクトルYを計算するプログラムはこうなります。
上記のデータだと0の部分が多いので、これを圧縮したのがCOO形式です。Coordinate形式の名の通り、座標を記録します。valuesに0が無くなるのが特徴です。
row: 0 0 1 1 2 2 2 3 3
column: 0 1 1 2 0 2 3 1 3
values: 1 7 2 8 5 3 9 6 4
これとベクトルXを掛けてベクトルYを計算する(Sparse Matrix-Vector multiplication、SpMVとよく呼びます)プログラムはこうなります。
row_start: 0 2 4 7 9
column: 0 1 1 2 0 2 3 1 3
values: 1 7 2 8 5 3 9 6 4
row_startは各行のデータが何番目から始まるかを示します。例えば、row_start[2]が4というのは、3行目(=2+1)のデータは、values[4]から始まるという意味です。
これのSpMVするプログラムはこうなります。
次は全然別のELLPACK形式。これはELLPACKというというelliptic problemsを解くためのシステムで利用されていたデータ構造ということで、この名前らしい。1行あたりのデータ数を決めて、パディングします。
*がパディングです。データは本来は縦方向に並べるのですが、今回は横方向に並べます。valuesの*は0を埋めておきます。1行あたりのデータ数が決まっているので、rowのデータは必要ありません。
column: 0 1 * 1 2 * 0 2 3 1 3 *
values: 1 7 0 2 8 0 5 3 9 6 4 0
これのSpMVするプログラムはこうなります。NPRが1行辺りのvalueの個数です。
column: 0 1 1 1 2 2 0 2 3 1 3 3
values: 1 7 0 2 8 0 5 3 9 6 4 0
この方式の利点は規則的ってことです。またiとjのループを入れ替えると縦方向に処理ができます。大抵M >> NPRなので、この方がベクトル長が伸ばせて効率が良くなります。
欠点として、パディングの分データ量が増えます。1行あたりの0以外の値の数がほぼ均一なら問題はないのですが、長い行が混ざっていると無駄なデータが必要になってしまいます。
それを改善するのが、ELLPACKとCOOのハイブリッド方式です。1行につき2つのデータをELLPACK形式で保持し、残りのデータはすべてCOO形式にまとめます。COO形式が一つ一つのデータに依存関係がないため、どこからでも開始できるので、こうして他のデータを補完する形で使えるわけです。
ELLPACK部分
column: 0 1 1 2 0 2 1 3
values: 1 7 2 8 5 3 6 4
COO部分
row: 2
column: 3
values: 9
これのSpMVするプログラムはELLPACKとCOOを繋げた形になります。ここでは省略。
このハイブリッド形式は、ELLPACK部分が最適に作れて良さそうなデータに見えるのですが、1行あたりの0以外の値の数が均一である必要があるとか、要素の長い行は少なくないといけないとか、色々制限が多いので、実際の例ではあまり使われません。
続きはまた今度
COO形式、CSR形式、ELLPACK形式についてまとめます。
例えば以下の配列があるとします。
1 | 7 | 0 | 0 |
0 | 2 | 8 | 0 |
5 | 0 | 3 | 9 |
0 | 6 | 0 | 4 |
単純に行列として記録すると、上記を1次元に並べたデータ構造を使います。
values: 1 7 0 0 0 2 8 0 5 0 3 9 0 6 0 4
これとベクトルXを掛けてベクトルYを計算するプログラムはこうなります。
for (i = 0; i < M; ++i)
for (j = 0; j < N; ++j)
Y[i] += values[i*N+j] * X[j];
上記のデータだと0の部分が多いので、これを圧縮したのがCOO形式です。Coordinate形式の名の通り、座標を記録します。valuesに0が無くなるのが特徴です。
row: 0 0 1 1 2 2 2 3 3
column: 0 1 1 2 0 2 3 1 3
values: 1 7 2 8 5 3 9 6 4
これとベクトルXを掛けてベクトルYを計算する(Sparse Matrix-Vector multiplication、SpMVとよく呼びます)プログラムはこうなります。
for (i = 0; i < NZ; ++i)COO形式でもデータのrowの部分に同じ値が何度も出て来るので、これを圧縮したのがCSR形式です。Compressed Sparse Row形式の名前の通り、行を圧縮します。row_startの中に同じ数字が出てこなくなります。
Y[row[i]] += values[i] * X[column[i]];
row_start: 0 2 4 7 9
column: 0 1 1 2 0 2 3 1 3
values: 1 7 2 8 5 3 9 6 4
row_startは各行のデータが何番目から始まるかを示します。例えば、row_start[2]が4というのは、3行目(=2+1)のデータは、values[4]から始まるという意味です。
これのSpMVするプログラムはこうなります。
for (i = 0; i < M; ++i)データは圧縮できていいんですが、計算に関節参照が増えます。ベクトル化しようとすると1行あたりのデータ数が一定じゃないのも辛い。
for (j = row_start[i]; j < row_start[i+1]; ++j)
Y[i] += values[j] * X[column[j]];
次は全然別のELLPACK形式。これはELLPACKというというelliptic problemsを解くためのシステムで利用されていたデータ構造ということで、この名前らしい。1行あたりのデータ数を決めて、パディングします。
column | values | ||||||
0 | 1 | * | 1 | 7 | * | ||
1 | 2 | * | 2 | 8 | * | ||
0 | 2 | 3 | 5 | 3 | 9 | ||
1 | 3 | * | 6 | 4 | * |
*がパディングです。データは本来は縦方向に並べるのですが、今回は横方向に並べます。valuesの*は0を埋めておきます。1行あたりのデータ数が決まっているので、rowのデータは必要ありません。
column: 0 1 * 1 2 * 0 2 3 1 3 *
values: 1 7 0 2 8 0 5 3 9 6 4 0
これのSpMVするプログラムはこうなります。NPRが1行辺りのvalueの個数です。
for (i = 0; i < M; ++i)if文で分岐せずに全て計算してしまっても構いません。そうするとこうなります。
for (j = i*NPR; j < (i+1)*NPR; ++j)
if (values[j] != 0)
Y[i] += values[j] * X[column[j]];
for (i = 0; i < M; ++i)valueの値の0を掛けるので、Xは何でもいいのです。ただし、領域外を参照しないようにcolumnの*には適当な値を設定する必要があります。0でもいいですが、キャッシュに無駄が出ないように一つ前と同じ値を埋めるのもいい方法です。同じ値を埋めると、データは以下のようになります。*の所にそれぞれ一つ前と同じ、1や2や3が入ります。
for (j = i*NPR; j < (i+1)*NPR; ++j)
Y[i] += values[j] * X[column[j]];
column: 0 1 1 1 2 2 0 2 3 1 3 3
values: 1 7 0 2 8 0 5 3 9 6 4 0
この方式の利点は規則的ってことです。またiとjのループを入れ替えると縦方向に処理ができます。大抵M >> NPRなので、この方がベクトル長が伸ばせて効率が良くなります。
欠点として、パディングの分データ量が増えます。1行あたりの0以外の値の数がほぼ均一なら問題はないのですが、長い行が混ざっていると無駄なデータが必要になってしまいます。
それを改善するのが、ELLPACKとCOOのハイブリッド方式です。1行につき2つのデータをELLPACK形式で保持し、残りのデータはすべてCOO形式にまとめます。COO形式が一つ一つのデータに依存関係がないため、どこからでも開始できるので、こうして他のデータを補完する形で使えるわけです。
ELLPACK部分
column: 0 1 1 2 0 2 1 3
values: 1 7 2 8 5 3 6 4
COO部分
row: 2
column: 3
values: 9
これのSpMVするプログラムはELLPACKとCOOを繋げた形になります。ここでは省略。
このハイブリッド形式は、ELLPACK部分が最適に作れて良さそうなデータに見えるのですが、1行あたりの0以外の値の数が均一である必要があるとか、要素の長い行は少なくないといけないとか、色々制限が多いので、実際の例ではあまり使われません。
続きはまた今度
2015年3月29日日曜日
京都
3/28は京都行ってました。
朝4時半に起きて5時半の電車に乗って京都へ。
朝はまだ寒かった。てくてく円山公園音楽堂に向けて歩く中、楽しみ〜って感じでした。
そして円山公園音楽堂前に着いて、列に並んでる頃は、陽気が強すぎたり、スマホで通信できなくなったりと、やる気0。受付終えたら京都見物に出発。
お昼の後は哲学の道を辿って銀閣寺、法然院、安楽寺は入場料が高かったので飛ばして、大豊神社、熊野若王子神社、瀧宮神社、禅林寺も入り口だけ、南禅寺、金戎光明寺とぐるっと遊んできました。
SWR30によると38000歩。 帰宅は12時を回ってしまいました。ポータルがあるとついつい歩いてしまいますねえ。楽しかったです。
朝4時半に起きて5時半の電車に乗って京都へ。
朝はまだ寒かった。てくてく円山公園音楽堂に向けて歩く中、楽しみ〜って感じでした。
そして円山公園音楽堂前に着いて、列に並んでる頃は、陽気が強すぎたり、スマホで通信できなくなったりと、やる気0。受付終えたら京都見物に出発。
お昼の後は哲学の道を辿って銀閣寺、法然院、安楽寺は入場料が高かったので飛ばして、大豊神社、熊野若王子神社、瀧宮神社、禅林寺も入り口だけ、南禅寺、金戎光明寺とぐるっと遊んできました。
SWR30によると38000歩。 帰宅は12時を回ってしまいました。ポータルがあるとついつい歩いてしまいますねえ。楽しかったです。
2015年3月16日月曜日
SmartBand Talk SWR30のウォッチフェイス一覧
1月だったか2月だったか、念願のSWR30の文字盤が増えました。
イマイチな文字盤ばっかだったのですが、まあ気を取り直して一覧を作ってみます。
標準の文字盤。デジタル時計と何やってるかが出ます。
追加されたデジタル文字盤。デジタル時計と、オプションで月日&曜日が出ます。
追加されたアナログ文字盤。オプションで月日&曜日が出ます。
月日が大きめの文字盤。デジタル時計&月日に、オプションで活動計を出した場合。
同じく月日が大きめの文字盤。オプションで天気を出した場合。
同じく月日が大きめの文字盤。オプションをなしにした場合。
デジタルメインの文字盤に比べると、時計が小さく月日が大きい感じです。
次は天気がメインの文字盤。
最後に隙なメッセージが入れれる文字盤。これに時計が出せれば・・・(´・ω・`)
そんな感じで結局デフォルト使うか・・・みたいな微妙なウォッチフェイスでしたw
イマイチな文字盤ばっかだったのですが、まあ気を取り直して一覧を作ってみます。
標準の文字盤。デジタル時計と何やってるかが出ます。
追加されたデジタル文字盤。デジタル時計と、オプションで月日&曜日が出ます。
追加されたアナログ文字盤。オプションで月日&曜日が出ます。
月日が大きめの文字盤。デジタル時計&月日に、オプションで活動計を出した場合。
同じく月日が大きめの文字盤。オプションで天気を出した場合。
同じく月日が大きめの文字盤。オプションをなしにした場合。
デジタルメインの文字盤に比べると、時計が小さく月日が大きい感じです。
次は天気がメインの文字盤。
最後に隙なメッセージが入れれる文字盤。これに時計が出せれば・・・(´・ω・`)
そんな感じで結局デフォルト使うか・・・みたいな微妙なウォッチフェイスでしたw
2015年3月15日日曜日
SmartBand Talk SWR30の感想
先日から使い始めたSWR30の感想をまとめてみます。
購入するかどうかの参考にしてみて下さい。
結論を先にいうとお薦めです。
こういうのが、何もしなくても勝手に記録されて、後から見返せるというのが凄く便利だし、自分の行動を振り返る助けにもなります。僕は歩いてるだけですが、走ってる人やサイクリングしてる人にもお薦めです。
ただ、精度はそれなりなので、精度を求める人は別の方法がいいかも。
以上、お薦めでした。
購入するかどうかの参考にしてみて下さい。
結論を先にいうとお薦めです。
- デザイン:
- 良いです
- 気になる点は、黒字に白の場合にE ink特有のリフレッシュが目立つこと
- バンドが白でも気にならない方は白色版の方が良いかも
- 装着感
- 軽い
- コア部分が少し長く、手首が細いと上下が浮いた感じになります
- とはいえ軽いので、緩めに装着するといい感じです
- ボタンの操作:
- クリック感があり操作しやすいです
- E inkの反応が鈍いので、アプリを多く入れると大変です
- 実用上アプリ4個くらいが限界かと
- タップ操作:
- 本体の振動で検知してますが、誤操作防止で感度悪目です
- タップ一回するだけの操作(オン/オフなど)なら十分です
- 複数回タップするアプリは大変
- 万歩計:
- 感度もよく、ちょっとした移動でもカウントしてくれて嬉しいです
- 加速度計を使って、走っているか、自転車か、車かなども誤検知することが
- 不満は今の所ないです
- 睡眠測定:
- 加速度計で判断してるのでしょうか、面白いです
- 正確性は分かりませんが、深い睡眠浅い睡眠と区別してくれます
- 大体の目安となるのでSWR30を使う楽しみが増えたという感じです
- 録音
- 音量が足りません
- ボイスコントロール
- 音声入力の音量が足らないのか、誤反応が多いです
- アクティビティの詳細
- 本体だけで、歩数や、歩いた時間、走った時間がでるので凄く便利です
- 設定から、表示する情報を選べるといい
- 昼間は、歩数、歩いた時間、走った時間、サイクリングした時間
- 夜間や朝は、歩数、睡眠時間、浅い睡眠時間、深い睡眠時間
- みたいな
- Life Bookmark
- いいです。外で適当にポンッ、「よさそうなお店」なんて風に音声と位置が記録できます
- 音量がもうちょっとなあ
- ボイスノート
- 念の為に入れてますが使ったことがありません
- カレンダー
- 使い物になりません
- 何度もクリックしないと予定が見れないのが不便
- Lifelog
- 楽しいです
- これがキラーアプリだと勝手に思ってます
- その他のアプリ
- 入れていません
こういうのが、何もしなくても勝手に記録されて、後から見返せるというのが凄く便利だし、自分の行動を振り返る助けにもなります。僕は歩いてるだけですが、走ってる人やサイクリングしてる人にもお薦めです。
ただ、精度はそれなりなので、精度を求める人は別の方法がいいかも。
以上、お薦めでした。
2015年3月9日月曜日
Ingress AgentがMVNOに変えた感想
最近、ドコモをスマホからガラケーにしました。
スマホはそのまま、MVNOのSIM、OCNに入れ替えて使っています。
理由は月々の代金です。ドコモ光が独身世帯に優しくなかったので、
MVNOすることに決めました。
今回は、Ingressプレイヤーが、ドコモのスマホをMVNO SIMにしたその感想を書いてみます。
スマホはそのまま、MVNOのSIM、OCNに入れ替えて使っています。
理由は月々の代金です。ドコモ光が独身世帯に優しくなかったので、
MVNOすることに決めました。
今回は、Ingressプレイヤーが、ドコモのスマホをMVNO SIMにしたその感想を書いてみます。
- 何故か位置情報が入りにくくなりました
家を出て傍のローソンで新メダルを取ろうと思ってたのですが位置が決まるまで非常に待たされます。 - テザリングが出来ません
待ち時間に使ってたタブレットでの時間潰しが困難になりました。 - iDが使えません
モバイルSuicaは使えます。関西なのでコンビニはEdyかWaon払いに変えようと思います。 - 他はあまり変わらず
簡単にまとめるとこんな感じですね。
位置情報は、ドコモ独自の位置情報アシスト機能が効果的だったのかな?なんて思ったり、それともGoogleの位置情報アシスト機能が誤情報を与えているのかな?なんて思ったり。まだ、現段階ではよく分かりません。
テザリングは、ドコモ独自の制限で、テザリングをするとAPを勝手にドコモのAPに切り替えるという制限が残っていて、MVNOのAPを設定していてもテザリングすると勝手にドコモに変わって通信できなくなっているそうです。参入障壁です、なんて総務省とかにチクったら改善されないんだろうか?
iDはiDの制限です。SPモードじゃないと使えません。なのでiDを使うのをやめようと考えています。
色々問題はあるのですが、今の所回避できる問題は回避して、位置情報は諦めて待てば、月々6500円程度だった支払が、ドコモ1000円程度、MVNO1500円程度と安くなるので、一先ずこれで良かったなという感想です。
2015年1月5日月曜日
IngressとSmartBand SWR30 Talk
11/28にドライブがてらポータルを巡って、初めてまともにプレイしたIngress。
その日はレベル2になりました。
11/30にはサイクリングがてら近所のポータルを巡りました。
そこから本格的に始めました。
その後の近況報告など。
12/6にはレベル7になりました。その時の歩数がこんな感じ。
12/7にも書きましたが、毎日キチガイじみた歩数です。毎朝勤め先の近くの、大きな公園に行ってAP稼いでました。AP稼ぎはCF作りが美味しいですね。多重って凄いとか知ったのもこの頃。
レベル7になった12/6は、土曜日なのに勤め先近くの公園に出掛けて、午前中からひたすら焼いてました。昼過ぎにレベル7達成。
その後、12/8にはレベル8に。この時期はAP2倍特典があって、そのお陰ですくすく成長したのだと思います。レベル8になると、そこから順当に歩数が減っていきますw
いや、12/8が凄かっただけで、毎日それなりには歩いてますよ?
その後、歩数やAPではなく、メダル稼ぎに焦点を移し……、
12/29にレベル9に。12/29は自分ながら頑張った。歩数でも分かります。師走も押し迫った帰省先の広島を、ふらふらと歩きまわってました。
2014年は色々ありました。役職が上がったり、Ingressを始めたり、家族の不幸があったり。色々ありながらも、何時もながらの一年でした。 最後に何とかレベル9も達成しました。2015年も頑張ります。
年末は30、31と弟家族が実家に来て、一気に歩数が減ります。1/2から再開です。
そういうのもライフログで後から見れて楽しいですね。
1/2は元旦から開いていた八昌へ、年始のお好み焼きを食べに行きました。
初八昌です。なにこれ、こんなん初めて食べたわ。麺が、口の中で踊ってるんですけど!!!美味しいねえ。また是非来ます。その後、広島市内にしては大雪にw
雪の平和公園なんて初めての経験でした。翌1/3は長田屋へ。安定の美味しさですが、昨日の八昌の後では少し霞んでしまいました。
この日は広島城ミッションをやって、ライトアップされた天守閣を見てきました。
こんな感じの2014年のIngressでした。2015年もよろしく。
その日はレベル2になりました。
11/30にはサイクリングがてら近所のポータルを巡りました。
そこから本格的に始めました。
その後の近況報告など。
12/6にはレベル7になりました。その時の歩数がこんな感じ。
12/7にも書きましたが、毎日キチガイじみた歩数です。毎朝勤め先の近くの、大きな公園に行ってAP稼いでました。AP稼ぎはCF作りが美味しいですね。多重って凄いとか知ったのもこの頃。
レベル7になった12/6は、土曜日なのに勤め先近くの公園に出掛けて、午前中からひたすら焼いてました。昼過ぎにレベル7達成。
その後、12/8にはレベル8に。この時期はAP2倍特典があって、そのお陰ですくすく成長したのだと思います。レベル8になると、そこから順当に歩数が減っていきますw
いや、12/8が凄かっただけで、毎日それなりには歩いてますよ?
その後、歩数やAPではなく、メダル稼ぎに焦点を移し……、
12/29にレベル9に。12/29は自分ながら頑張った。歩数でも分かります。師走も押し迫った帰省先の広島を、ふらふらと歩きまわってました。
2014年は色々ありました。役職が上がったり、Ingressを始めたり、家族の不幸があったり。色々ありながらも、何時もながらの一年でした。 最後に何とかレベル9も達成しました。2015年も頑張ります。
年末は30、31と弟家族が実家に来て、一気に歩数が減ります。1/2から再開です。
そういうのもライフログで後から見れて楽しいですね。
1/2は元旦から開いていた八昌へ、年始のお好み焼きを食べに行きました。
初八昌です。なにこれ、こんなん初めて食べたわ。麺が、口の中で踊ってるんですけど!!!美味しいねえ。また是非来ます。その後、広島市内にしては大雪にw
雪の平和公園なんて初めての経験でした。翌1/3は長田屋へ。安定の美味しさですが、昨日の八昌の後では少し霞んでしまいました。
この日は広島城ミッションをやって、ライトアップされた天守閣を見てきました。
こんな感じの2014年のIngressでした。2015年もよろしく。
登録:
投稿 (Atom)