パスワードを忘れた? アカウント作成

tsekineさんのトモダチの日記。 アナウンス:スラドとOSDNは受け入れ先を募集中です。

13004663 journal
日記

ttの日記: オレオレビットフィールドを作る 4

日記 by tt

人生初のAdvent Calendarをしてみんとしてなんとなく久々に日記など。
C言語 Advent Calendar 2016 の6日目、らしい。

Cの世界にはビットフィールドというのがある。もともとハードウェアレジスタを操作するために作られたと思われるが、今やメモリ削減のために使われている感がある(ex. webkit)。
どうしてこうなったか…というとまあ規格上いろいろと自由度と不自由度がありすぎて、エンディアンとかintの大きさとかによって「実際の」ビットの位置がずれてしまい、移植性のあるコードを書くのがめんどくさいからである。
ハードウェアを触るなんてマシン固有だからどーでもいいじゃん、というのはあるんだが、x86でもx86-64でも動いてほしいとか、ARM BEとARM LEで~とか、いろいろあるのである。

前振りが長くなった。さて本題。

ビットフィールド使えないとなるとレジスタ操作系のコードはこういうのになる
  int reg = MMIO_REG_READ(COMMON_REG_ADDR);
  int busy = (((reg >> STATUS_BIT_POS) & STATUS_BIT_LEN) == STATUS_BUSY);
わかりやすい。というか超べたべただ。

マクロなりなんなりで
  int busy = (extract(reg, STATUS_BIT_POS, STATUS_BIT_LEN) == STATUS_BUSY);
なんて書くのも可能だし、マクロの定義を適度にいじってintのサイズ違いに対処とかもできそうだ。

と、ここまではよく見るんだけど、最近
  extract(reg, STATUS_BIT_POS : STATUS_BIT_LEN)
みたいな書き方があるのを知った。

どーやってるんだろうとおもったら、こういう感じらしい
  # define GETPOS(field) (0 ? field)
  # define GETLEN(field) (1 ? field)
  # extract(reg, field) (((reg)>>GETPOS(field))&((1uGETLEN(field)-1))
そう、三項演算子を使うらしい。

で、これの利点だけど…ハードウェアの仕様書とかではビットフィールドの記述に「:」を使うのは多いため、見た目がわかりやすい、ということ以外にあんまり思い浮かばなかった(笑)。C++はともかく、Cでは三項演算子やラベル名以外で:を使うというのはあんまりないので、他より目立たせることができる、というのもあるだろうか。

あんまり意味がないけど、まあ、面白いのでご紹介、ということで。

10595847 journal
日記

bananan_wの日記: H264 Hardware accelerate encodingとわたし(3/3) 2

日記 by bananan_w

出来ました。

■環境
・OS:ArchLinux x64
・CPU:Intel(R) Core(TM) i7-4500U
・gstreamer-vaapi:0.5.8

■ポイント
Ubuntu 14.04 でもライブラリが古くて gstreamer-vaapi のコンパイルが通りません。
最新ソースから環境を整えたかったので、ArchLinuxを選択。

$ gst-launch-1.0 filesrc location=/tmp/test.mpg ! decodebin ! videoparse format=i420 width=720 height=480 framerate=30/1 ! vaapiencode_h264 ! qtmux ! filesink location=test.mp4

DVD画質のエンコードで約150FPS
MPEG2へのエンコードならもう少し早くて200FPSぐらい。

9269266 journal
日記

bananan_wの日記: H264 Hardware accelerate encodingとわたし(2/N) 2

日記 by bananan_w

エンコード環境整いました。CPUはSandyBridge。
vaapiのドライバにエンコード機能がついていないから、サンプルが動かなかった。

http://lists.freedesktop.org/archives/libva/2013-June/001766.html

昨日リリースされたドライバで、エンコード機能が実装されたので、
ubuntu-13.04に以下のパッケージをコンパイルして入れて、

libdrm-2.4.45
libva [git]
libva-intel-driver-1.2.0

$ ./h264encode

INPUT:Try to encode H264...
INPUT: RateControl : VBR
INPUT: Resolution : 176x144, 60 frames
INPUT: FrameRate : 30
INPUT: Bitrate : 182476
INPUT: Slieces : 1
INPUT: IntraPeriod : 30
INPUT: IDRPeriod : 60
INPUT: IpPeriod : 1
INPUT: Initial QP : 26
INPUT: Min QP : 0
INPUT: Source YUV : AUTO generated
INPUT: Coded Clip : /tmp/test.264
INPUT: Rec Clip : Not save reconstructed frame

libva info: VA-API version 0.34.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/local/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_34
libva info: va_openDriver() returns 0
Use profile VAProfileH264High
Support rate control mode (0x12):CBR CQP
Support VAConfigAttribEncPackedHeaders
Support packed sequence headers
Support packed picture headers
Support packed misc headers
Support 1 RefPicList0 and 1 RefPicList1
Loading data into surface 15.....Complete surface loading
            \00000059(004504 bytes coded)

PERFORMANCE: Frame Rate : 304.57 fps (60 frames, 197 ms (3.28 ms per frame))
PERFORMANCE: Compression ratio : 8:1
PERFORMANCE: UploadPicture : 148 ms (2.47, 75.13% percent)
PERFORMANCE: vaBeginPicture : 0 ms (0.00, 0.00% percent)
PERFORMANCE: vaRenderHeader : 1 ms (0.02, 0.51% percent)
PERFORMANCE: vaEndPicture : 18 ms (0.30, 9.14% percent)
PERFORMANCE: vaSyncSurface : 18 ms (0.30, 9.14% percent)
PERFORMANCE: SavePicture : 5 ms (0.08, 2.54% percent)
PERFORMANCE: Others : 7 ms (0.12, 3.55% percent)
(Multithread enabled, the timing is only for reference)

動きました。
ようやくスタートラインに立てました。

9218926 journal
日記

bananan_wの日記: H264 Hardware accelerate encodingとわたし(1/N) 5

日記 by bananan_w

http://www.phoronix.com/scan.php?page=news_item&px=MTM3MTU

どうやらLinuxでもIntel HD graphic のロジックを使うと出来るらしいのですが、
ffmpegにもlibx264にも実装されてないような感じです。

これは実装して楽しんでみるチャンス。
と、とらえて環境構築から色々とあがいてみる。

https://01.org/linuxgraphics/downloads/2013/2013q1-intel-graphics-stack-release

このあたりのモジュールを更新すると、
サンプルが動かせそうな気がするので、挑戦している。

http://cgit.freedesktop.org/libva/tree/test/encode/h264encode.c

8901148 journal
日記

mumumuの日記: パスワード変更祭り 4

日記 by mumumu

http://japan.cnet.com/news/business/35032224/

Yahoo Japan ID が2200万件も流出したとの報を受けた。直ちに認証情報流出に繋がるとは限らないが、これを機にパスワード管理もきちんとせなあかんな、ということでいろいろなサイトのパスワードを変更して回っています。

ということで、こちらにも足跡ぺたぺた、と。
3年ぶりくらいかぁ。なつかしいですね。ここも(*´〜`)

6930933 journal
日記

ttの日記: アレもう2012年が終わる… 1

日記 by tt

見事に今年はオンライン上の活動が止まってしまった…隙間時間にtwitterかfacebookするぐらいだけになってしまった。

今年買ったものを思い出す。Eマウント(NEX)のレンズ二本、パナの電子レンジ、スマフォ(XperiaSX)、タブレット(MediasN06D)、…ぐらい?余りモノは買わなかったなあ。

おっとWLAN APも更新してた。あと自分用ではなく母へのプレゼントとしてVAIOとCybershotを購入した。まあ自分が使うものじゃなくても、ちょっとさわってるとやっぱり最新機種はどんどん良くなってるのがわかって新しいのが欲しくなるねえ。

サービスだとCATVのコースを変更してチャネルが増えたのと、VPSを契約したことか。が、VPS全然使えてない・・・

身につけた技術としては近年の最適化技術だったりgccの構造をより深く理解したとかARMプロセッサに詳しくなったとかインターコネクトやマルチプロセッサ環境を学んだとかか。llvmとかwebkitとかjavascriptの知識は進まなかった。ダメダメ…。勉強会で発表するとかいった活動ももう少しやったほうがよさそうである。

失ったのは明らかに体力だな。特に年末の肩こりのひどさは絶望的だった。肩こりで医者に行くのはかなり久々である。

思い切った行動にも出られず、かといってこのままではジリ貧、的な状態で縮小均衡というどうにも手詰まり感が増えた一年であった。来年はこの辺りを改善したいものだけれども、さてどうなるか。

1116209 journal
日記

ttの日記: フライング2011まとめ

日記 by tt

今年のまとめ。まだ今年は数日残ってますが…残りの分で何かあれば追記する方向で。

1月:
記憶が無い。たしか新しいお仕事PC購入手続きをしたような。
伏見稲荷に初詣して鳥居を見つつfirefox充となる。

2月:
虫垂炎で入院。物心ついてはじめての入院。
同室のおじーちゃんの愚痴を聞かされたりして死生観が少し変わる。
妹と嫁に感謝する。

3月:
じしん。科学と技術の限界に絶望する。
ペジテのアスベルが破壊された故郷を見て感じた気分か。
チケットが奇跡的に取れたけどフィギュアスケートの世界選手権は延期に。

4月:
記憶が無い…電気は無いけど仕事は容赦ないので猛烈に働く。
戦闘モード突入的な。相当働いたのは確実

5月:
GWはアイスショーに行ったり数日帰省した位でほぼ全部働く感じ。
quad二種類を飛ぶ羽生君に感動する。
合間を縫って日比谷のオクトーバーフェストに参加する。高いけどうまいね。

6月:
親知らずを抜いたような気がする。
祖母がなくなる。数えで99歳。祖母・祖父の代は全員亡くなってしまった。
実家のリフォーム結果が大胆すぎてびびる。

7月:
相方誕生日を祝って今年は銀座マキシムに行って見る。
仕事では色々と殺意を覚えた様な気がするが忘れた事にする。

8月:
夏本番。全社休業日なんて無視して普通に働く。でも暑い…
新しいエアコンのパワーに感動する。

9月:
お仕事のめどがやっと立った気がする。というか色々延期する事になる。
センリャクテキテッタイ

10月:
祖父の25回忌で25年ぶりに博多のお墓参りに。博多駅がかっこよくなりすぎててびびる。
あわせて家族旅行にいく。温泉ええですなあ。高千穂かっこよす。

11月:
中学・高校の同窓会に参加。あと妹の結婚式でハワイへ。
予想通りのところが予想通りの流れになっているが今更どうしようもなく、
逆にもう少し先を見込んでの作業を優先する事にする。

12月:
月蝕見た。
一つ目のゴール到達。早めに仕事納めして全日本フィギュア見てまったりすごす。
37歳になった。

*買ったもの
(住んでる物件の付属品だけど)エアコンが新しくなった
ASUS E35Pro(AMD E350搭載マザーボード)ほか自作PC一式
三菱の空気乾燥機
USBビデオキャプチャ(イマイチ使えてない)
Panasonicのマッサージソファ
NEX-5Nボディとレンズ3本(標準セットの2本とマクロレンズを1本)
フィリップスの電気剃刀
PSVitaと付属品いくつか

*入ったサービス
facebook:仮登録したアカウントがあったような気がしたが行方不明なんで登録しなおし
atnd.org:x86opti参加のため
ANAカード:なんか飛行機に何度も乗る事になったので

*雑感
忙しすぎた。無力感を感じること多数。
数年に一度のイベントなので仕方ないが、よく働いたせいで環境に飽きてきた。
まあスポーツ選手におけるオリンピックイヤーのような感じか。
gccとかをいじる環境に戻ったのは良かったのかな。
メインがMIPSからARMに移ったけどMIPSも大量なまま。x86も増殖中。
PPCは相変わらず少ない。マルチコア度が急激にアップ。
一度もLAMEのコードを見なかった…。
ラジオ・テレビを視聴する時間が本気でなくなりつつある。
rubyは結局今年も余り使わず。

*反省点
仕事しすぎて体がぼろぼろ。人間ドックで「要検査」がたくさんありすぎる。
サーバを放置しすぎ。そろそろVPSとかに移動すべき。
細切れの時間でtwitterしすぎ。明示的に休憩するべき。
英会話学校に行く予定が地震と仕事の忙しさで潰れたというのは言い訳だ。
せっかく買ったペーパーバックをまた読まなかった。
仕様書とMLの英語しか読まないのはまずいと思う。

*来年の予定
各種医療控除と寄付と雑収入の対応のための生まれて初の確定申告
精密検査のために病院に行く。たぶん検査入院が必要と思われ…
母のPCを買い換える。
妹にプレゼントを買う。

*来年の目標
英語を何とかする
基本に立ち返ってちゃんと仕様書を理解する
環境の変化を自分から起こす
もう少し運動する。とりあえずスキーとスケートとサイクリング、かなあ。
増えすぎたクレジットカードを整理する
電池の持ちがだいぶ悪化した携帯電話をどうにかする

907929 journal
日記

bananan_wの日記: 実験メモ

日記 by bananan_w

http://definitions.symantec.com/defs/
に定期的にファイルを取りに行くと、
「変」な事象が発生する場合がある。
定期的に監視して、動きを見てみたい。

試験用スクリプトは以下の通り。

#!/bin/sh
OLD="/dev/null"
while [ 1 ]; do
                wget --no-cache http://definitions.symantec.com/defs/ > /dev/null 2>&1
                diff $OLD index.html > /dev/null
                if [ $? -ne 0 ] ; then
                                NEW=index_`date +%Y%m%d%H%M`.html
                                mv index.html $NEW
                                OLD=$NEW
                else
                                rm index.html
                fi
                sleep 60
done

890275 journal
日記

ttの日記: Thumb2パズル 15

日記 by tt

新UIになって今まで以上におっくうになってたんだけど、余りにも日記を書かないとなんなので…
今苦しんでるパズルのヒントを/.Jの皆様に求めてみたりします。

今をときめくARMアーキテクチャのThumb2モードでは、即値アドレッシングの演算系命令で使える値がかなり限られます(ちなみにARMモードだともっと制限が厳しい)。具体的には以下のどれか。

  1. 8bit値をnビット左シフトしたもの(nは0以上24以下の整数)
  2. 8bit値を0x00010001倍したもの
  3. 8bit値を0x01000100倍したもの
  4. 8bit値を0x01010101倍したもの

加減算に限っては任意の12bit値を使う専用命令があったり、同じ値を加算と減算とか、ビット反転した命令でも使えるので、実質もう少し他の値も使えるのだけれど、まあ基本はこれ。

一方、定数代入はレジスタの上位・下位16bitを設定する命令があるので、2命令の組み合わせで任意の32bit値を設定できます。

ということで、例えば x+0x12345678 みたいな事をしたい場合、

  1. 2命令かけてワーク用のスクラッチレジスタyに0x12345678を代入し、xに足す(3命令)
  2. 何とかして0x12345678を上の定数パターンに分割してがんばる

のどちらかになります。

で、後者の「何とかして」が問題になる。

答えを先に書くと
    0x12345678 = 0x12001200(0x12*0x01000100) + 0x00344000(0xD1*0x4000) + 0x00000478(0x8F*8)
というふうに分割できるので、加算命令3つでx+0x12345678を実現できます。
前者に比べると命令数(=サイクル数)は同じだけど、こちらの方がスクラッチレジスタなしで済む分有利になります。

問題はこういう分割を求めるのが泣きそうに難しいところ。
8ビットずつ4つに分割すれば、つまり0x12345678=0x12000000+0x00340000+0x00005600+0x00000078とすれば確実に再現できるので、4分割すれば絶対に実現できるのは明確。2分割で作れるかどうか、も割と容易に分かる。なのだけど、3分割で作る方法があるかどうかを調べるのが非常に難しい。
現時点で私はブルートフォースで計算する以外の方法が思いつかないでいます。前述の例である0x12345678も総当りで出しました。

ちなみに現状のgccは割とすぐにあきらめて「ワーク用レジスタ使う」になります。
が、時々なぜか0x12000000+0x00340000+0x00005600+0x00000078になることも。ヒドス。

ということで、いい方法思いついた人居たら教えてください。
2分割のときは0x00010001の剰余系で考えると、ってので簡単に実現できたんだけど、3分割だと色々考えたんだけど全然ダメでした。
こういうのに関係する数学の分野名とかあったらそれでもいいです。

更新:20:15コメントにあった疑問を追記しました。

typodupeerror

長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds

読み込み中...