susutex’s blog

自転車、電子工作、プログラミングとかについて書くかもしれないブログ

CPUの動作を理解するとちょっとだけ早いコードが書けるかもしれない

昨日処理の高速化について考えてたのでその関連の小ネタを一つ。

例えばn回ループする処理を書くとき、C言語の入門では

1) for(i = 0; i < n; i++){(ループ内処理)}

という書き方が行われていることが多い。しかしシステムによってはループの速度を上げるためには

2) for(i = n; i; i--){(ループ内処理)}

としたほうがいい場合がある。なぜか。

 

簡単のために具体的な例としてAVRのCPUの動作について考える。

CPUの処理の中で、条件分岐はどのように行われているかというと、直前の計算結果によって変化する「ステータスレジスタ」というものを見て分岐するか否かを判定している。

AVRのステータスレジスタは以下の8bitからなる

  • C Carry Flag
  • Z Zero Flag
  • N Negative Flag
  • V Two’s complement overflow indicator
  • S N ⊕ V, for signed tests
  • H Half Carry Flag
  • T Transfer bit used by BLD and BST instructions
  • I Global Interrupt Enable/Disable Flag

それぞれの説明は面倒なので省くが、はっきりわかるのは、この中に「iがnより小さい」ということを示すフラグがないことと「計算結果がゼロになった」ということを示すフラグであるZero Flagがあることである。

じゃあ「iがnより小さい」ということを調べるにはどうすればいいかというと「iとnの大小を比較する」命令(CP)を使う。この命令は「iからnを引く処理を行ってステータスレジスタを変化させるが、引き算の結果そのものは保存しない」という動作をする。引き算の結果が負になったとすればそれはiがnより小さいということで、引き算の結果が負になったかどうかはNegative Flagを見ることでわかる。

1)の書き方の場合処理は以下のようになる。

  • iを0にする
  • (ループ内処理)
  • iに1を足す
  • iとnを比較する
  • Negative Flagが1ならばループ内処理の先頭に戻る

2)の書き方の場合処理は以下のようになる。

  • iにnを代入する
  • (ループ内処理)
  • iから1引く
  • Zero Flagが1ならループ内処理の先頭に戻る

1)のほうがiとnを比較する必要があるため1命令多く実行することになる。

ちなみにもっと早くしたければ(ループ内処理)をn回並べればいい。分岐がなくなるので速くなるが当然コードのサイズは膨れ上がる。

複数の命令が実行できたりキャッシュがあったりする最新鋭のCPUでは上記の限りではないかもしれない。試したことも考察したこともないので知らない。

 

以前は電子工作でマイコンを使う場合はアセンブリ必須だったようだが、私が電子工作を始めた時期にはavr-gccがあり、その後もCコンパイラのあるマイコンしか使ったことがないのでアセンブリをまともに触ったことがない。現代では命令を理解しCなどで記述した処理を高速に実行できるアセンブリに変換するのは基本的にコンパイラの仕事だが、CPUの動作というものを知っておけばちょっとだけ早いコードを書くことができる、と思う。

PlanetXのRT-80フレームセット購入を考える

susutex.hatenablog.com

で見ていたPlanetXのRT-80を買おうと検討している。

 

フレームセットと完成車を比較すると、送料込みで三倍ぐらいの値段差になるので、フレームセットの購入を検討している。

RT-80フレームセットの商品ページ見ていると、フレームへの付属物の記載がなく、ヘッドセットが付属しているのかわからない。他のフレームには明確に付属しないと書いてあったりもするが…

完成車のヘッドセットを見ると"FSA Orbit C-40 No.42 ACB Tapered Headset (OEM Only)"でよいようだ。

FSA Orbit C-40 No.42 ACB Tapered Headset (OEM Only) | Planet X

しかし、OEM Onlyとつかないものもある。

FSA Orbit C-40 No.42 ACB Tapered Headset | Planet X

前者のほうが安いが、違いは何だろうか。

 

わからん。最近の通販サイトはチャットが利用できるのでチャットで聞いてみよう。

f:id:susutex:20170404211250p:plain

ヘッドセットは付属しておらず、OEM Onlyは簡易包装ということだろうか。

 

ヘッドセットが付属していないということで、よく考えるとヘッドセットの圧入が必要ということに気づく。以前amazonで買ったクロモリフレームでバイクを組んだ時はヘッドセットの圧入がかなり大変で力任せに押し込んで何とか完成させたが、今回はカーボンなのであまり乱暴にやるわけにはいかない。ちょっと面倒そう。

ヘッドセットが地味に高いし、作業の面倒くささや失敗のリスクを考えるとフレームで買うより完成車を買ったほうが楽かつ安全かもしれない。でも選びたい色が選べない。悩む。

 

susutex.hatenablog.com

続き。

TOKYOエンデューロIN彩湖2017に参加してきた(2)

susutex.hatenablog.com

の続き。一走目が終了したが、ローリングスタートとスタート直後の混雑もありまだまだ準備運動といった感触。

2016年はランフォトの写真撮影サービスがあったのの、今年はないので走行中のチームメンバーの写真を撮ろうと待ち構える。が、バイクもジャージもばらばらだと走っている選手を見分けるのは困難。ずーっとコースで待っていたものの、見逃してしまったのか、結局一人一回ずつぐらいしか写真を撮ることができなかった。走行している間に二走目の出番が回ってくる。

 

二走目はカメラをつけてスタート。しかし、ハンドルの下側にカメラを取り付けたところマウントが邪魔でカメラの上のスイッチが上手く押せなかったため録画はあきらめてそのまま走る。

運良く最初から速い人二人が走っているのを見つけたのでその後ろについて走る。速い。めちゃくちゃ速い。前に出て引くこともできない。三人いて前二人でローテーションを回している状態が続く。こちらは人数の都合で三週しかしないので体力的にはかなり余力があるはずなことも考えるとかなり力の差があったように思える。

それでもなんとか二週目のホームストレートで前に出て引いてみようとするも、ペダリングが上手くいかない。普段の通勤ロードとはパワーをかけた際のホイールの回り方が違い過ぎる。普段通勤で乗っているロードのホイールは重くて剛性が低いため踏み込むと少し力をため込んでから回り始める。しかしレース用の50mmのカーボンホイールは軽くて剛性が高いため、踏み始めた直後からホイールがスッと回る。慣れれば当然後者のほうがトルクの波が抑えられるためパワーのロスが小さいのだろうが、今回は平地でパワーを出して走る練習をしていなかったため通勤ロードと同じ感覚で踏んでしまい、踏み始めから少し遅れて力を入れたときにはもうペダルが逃げていくような感覚になった。

うまく踏めないので足に来てしまい後ろに下がる。その後もなんとかついていきバックストレートの後半に少しだけ前に出たが、二週目の橋で前が詰まっているので無理せず速度を落とすと、二人はその隙間を抜けていき見えなくなった。

追いつけそうもないので後ろから上がってきた人の後ろに付き向かい風のホームストレートを走る。少し休んだら後半は前に出てフルパワーで引く。三週目に入ったので少しホイールの感覚にも慣れてきて回せるようになったが、向かい風なので速度は35km/hぐらいしか出ない。ホームストレートを抜けてアップダウンに差し掛かるとストレートで力を使い過ぎたことで登る脚力が残っておらず置いて行かれてしまう。登りは出力の差がタイムの差として出やすいのでアップダウンの前で無理をしてはいけない。

その後バックストレートで同じ人に追いついたが、3週走ったのでピットへ向かう。ピットに入るために減速していると、3週目を一緒に走った人が手を振っていた。もうちょっと走りたかったなと思いながら手を振り返す。

 

かなり速い二人に無理矢理ついて行ったことでふらふらになりそのまま床に寝転がる。寝不足もあり一気に眠気に襲われる。

その後起き上がると自分の順番が近づいていたのでコースで写真を撮りながら時間をつぶす。

f:id:susutex:20170403212904j:plain

弱虫ペダルサイクリングチーム先導の集団。みんな楽しそう。でも実際は苦しくて表情をゆがめてるだけかもしれない。今回は北風が特に強かったので集団走行が楽しかった。

 

そうこうしている間に三走目に。三走目は時間の都合で二週。今回はカメラをハンドルの上につけ、走り出す前に録画を開始した状態でスタートしたのでちゃんと撮れた。

youtu.be

走り始めてすぐの混雑を避けて単独で走る。弱まっているとはいえまだ北風が吹いていたのでエアロポジションを取ろうとするが、ハンドル上側につけたカメラが邪魔でエアロポジションが取れないことに気づきあきらめて下ハンドルで進む。その後も一週目は集団を見つけられず一人旅状態。

二週目に入ってすぐに少し長い集団に追いつく。しばらく後ろについて休んだ後、もうこの週で終わりなので追い抜いて前に出てみるものの、無理矢理前に出たことで少し力を使い過ぎて失速。右に避けて下がろうとしたところで前が詰まっていたので速度を落とすと集団に追い抜かれ、そのまま登りに入ったため置いていかれてしまった。その後バックストレートで再び集団に追いついたつもりだったが、動画を見る限り違う集団だったようだ。悲しい。そのまま二週目を終了してピットに入る。事故なく終わってよかった。楽しかった。

 

以前ブログでも書いた試乗イベントを楽しみにしていたが、今回は写真撮影や交代のための待機を行っていたので試乗をする余裕はなかった。残念。この手のイベントは交代や写真撮影のためにGPSを使って走者の位置を把握できるようにしておいたほうがよさそう。一緒に参加していたチームの人は二人試乗していて、そのうち一人は試乗車でレースを走っていた。かなり楽しめたようだ。

 

このイベントは二度目の参加だが、開催場所は都心近く、コーナーの難易度は低く、監視員による減速の指示、弱虫ペダルサイクリングチームによる集団の先導もあるので、私のような集団走行に慣れていない初心者でも集団走行が楽しめるいいイベントだと思う。来年もまた参加したい。

 

PlanetXのロードバイクフレームの比較とFM-066

PlanetXという通販サイトでロードバイクを見ていた。

Road Bikes | Planet X

  • ちょっと送料が高いが完成車とフレームが安い。
  • ロードバイクは通販サイトにありがちな雑多な並べ方ではなく、フレームごとにページがある。最初は勝手が違うので戸惑うが、フレームごとの比較は行いやすい。
  • また完成車のパーツは通常ハンドルやクランクのサイズが決まっているが、このショップでは細かくカスタマイズできる。TT長560のフレームだと大抵ハンドルが420mm、クランクが172.5mmになるが、これを今の私が使っている400と170に変更するということもできる。

カーボン製のフレームは2017/04/02時点では以下。

Planet X Maratona

Frame Material Mitsubishi HM/ IM blend, Frame Weight, Approx, (med) (g) 995

標準的。

VINER MAXIMA RS4.0

Frame Material Toray High Modulus blend, Frame Weight, Approx, (med) (g) 792g

軽い。

VINER SETTANTA

Frame Material T800/T700 blend, Frame Weight, Approx, (med) (g) 940

1000g以下とエアロロードとしてはかなり軽量。

Battaglin

ここだけフレームのページじゃなくてブランドのページになっている。フレームは以下の三種類。

  • Battaglin Faster Frameset

material不明, Weight: Frame 1120g, fork 420g

エアロフレーム。標準的。

  • Battaglin Hyper

material不明, Weight: 850 grams (med +/-5%)material不明、

軽い。でも今は電動対応しか在庫してないらしい

  • Battaglin Racer

material不明, Medium: 950 grams

ややエアロ形状。標準的な重量。

PRO CARBON

material不明, Approx. Frame Weight (g) 1124

最安値のエントリーモデル。重い。すごく極太。崖から落ちても壊れなさそう。

RT-80

Frame Material T800, Weight Med(g)+/-5% 990g

標準的。

VINER MITUS

Frame Material T800 + HM, Weight Small(g) 900g

軽いと思ったけどよくよく見比べるとRT-80と全くジオメトリが同じなので多分同じフレームだと思う。重さの違いは測定したフレームサイズの違いか。

EC-130E AERO ROAD

Frame Material Toray T800, Frame Weight, Approx, (med) (g) 1348 Med.

そこそこ重い。標準的なエアロロード。

 

Vinter mitus/RT-80が良さそうだなと思いながら見ていたところ、何か既視感を感じる。もしやと思い確認したところ、以前見ていた某ショップで販売しているノーブランドのカーボンフレームと外見もジオメトリもまったく同じ。このノーブランドのカーボンフレームの出どころはFM-066というフレームらしく、これも同じものだろう。

中国のよくわからない業者から購入するよりは国内ショップやこの通販サイトで購入したほうが安全そう。RT-80フレームは374.99 + 送料89.99 = 464.98ポンド(送料はカートに商品を突っ込むと見れる)。関税を考えても今のレートだと約7万と国内のショップで買うのより少し安く、さらに塗装もなかなか好み。送料が高いのでシートポストなどもまとめて買えばそれなりにお得感が出そう。

フレームだけでなく完成車もある。Rival完成車の場合は999.99 + 送料199 = 1,198.99ポンドで関税入れて約18万。やはり送料が少し重い。

コンポは今のロードについているものを使いまわすとして、フレームだけ買ってみようか。

 

susutex.hatenablog.com

続き。

 

20170405追記:

FM-066にはnormalとSL(super light)があるらしく、素材の違いで重さが違う。RT-80はnormal、Vinter mitusはslと思われる。

http://www.hongfu-bikes.com/html_products/2013-new-road-HF-FM066-266.html

国内ショップで見かけたのは重さ的にslと思われるので、Vinter mitusが相当する。こちらは499.99 + 送料89.99 = 589.98ポンド。ヘッドパーツがついてこないことを考えると、ちょっと割高かも。

筋トレログ20170401

最近は仕事、家の片づけ、電子機器の破壊の復旧作業などで時間を取られていた。早く片付けてローラー台を常設して短時間でトレーニングできる環境を取り戻さなければ練習強度が上げられない。

 

3/22~27 諸事情によりお休み

3/28 フロントランジ左右。久々の筋トレと、退勤後秋葉原まで往復路を無駄に頑張って踏んだことによってか、金曜まで筋肉痛に。

3/29 カーフレイズ左右、腕立て

3/30 レッグエクステンション、レッグカール左右

3/31 お休み

4/1 起きたら昼で、次に起きたら夜だった。お休み。

windowsでpythonとscipyのインストール作業メモ

手持ちのpythonが入ってないwindows環境にpythonをインストールする必要があったので一応メモ。

 

まずはpython本体を持ってくる。python3を使おう。

www.python.org

pathを足すのが面倒なので環境変数を追加するオプションにチェックを入れておく。以前はpathを個別に設定してpipもどこかから持ってくる必要があったかと思うが、これでインストールするだけでpythonに加えてpipも使えるようになった。

 

とりあえずscipyをよく使うので入れておこうと早速pipで入れようとする

…うまくいかない

以前の記憶を頼りにバイナリを探す。

Python Extension Packages for Windows - Christoph Gohlke

「何にも保障しねえからテストや評価目的で使えよ!」って書いてあるけど気にしない。

 

一番上の注意書きのとおり「numpy-1.11+mkl」を先に入れる必要があるので、以下二つをダウンロード。

numpy‑1.12.1+mkl‑cp36‑cp36m‑win32.whl
scipy‑0.19.0‑cp36‑cp36m‑win32.whl

最初、64bit版をダウンロードしたけどインストールしようとしたら失敗した。python.orgのダウンロードページから持ってくると32bit版のpythonがインストールされるらしい。64bitのほうが高速だが対応していないライブラリがあったりするらしいのでとりあえず32bitのままで行くことにした。

 

以下のコマンドでダウンロードしてきたパッケージをインストール

pip install numpy‑1.12.1+mkl‑cp36‑cp36m‑win32.whl

pip install scipy‑0.19.0‑cp36‑cp36m‑win32.whl

これで無事scipyが使えるようになった。

 

思い出そうと調べてる途中でanacondaなるものの存在をいまさら知ったのでそのうちまたそちらについても調べてみよう。

洋画を通して外国の文化を見るという洋画の楽しみ方に気づく

最近「Kingsman」というスパイ映画を見た。その中で「銀のスプーンを持って生まれてきたら…」というようなワードが出てきた。

銀のスプーン、なんか金持ちっぽい、とそのシーンでは思った。が、後になって考えてみるとそこまで富の象徴らしくは感じないとひっかかる。もしかして諺か何かだろうかと思って調べてみると、西洋では銀のスプーンを持って生まれた赤ちゃんは幸せになるという言い伝えがあり、赤ちゃんに銀のスプーンをプレゼントする習慣があるようだ。おしゃれ。

www.kitchentool.jp

 

他にも「デッドプール」の中で「フロスをシェアしていた」というようなワードが出てくる。日本にはデンタルフロスを使う習慣はあまりないので、金がないならフロスを使う必要がないのでは?と一瞬思ってしまうが、それぐらいフロスが重要なものとしてとらえられている国もあるのだなという考えに行きついて、その感覚の差に少し驚いた。

 

そういった文化の差に対する気付きを楽しみながら洋画を見るのも楽しそうだなと気づくことができた。今回は日本語音声で聞いていたが、英語の原文のまま聞くとさらにそういう意味では楽しめるのだろうか。