その他

EC2のGCC最適化

2016-09-23 19:43 - saito

こんにちは。エンジニアの齋藤です。今回は、前回メモした、

メモ:gccの最適化オプション。今後コンパイルする時にテスト。

についてちょっと書いてみようかと思います。
まずGCCですが、これはGnu Compiler Collection(Gnu C Compiler)の略です。
GNUというプロジェクトが作った、色々な言語のソースコードを、CPUが実行できるようにコンパイルしてくれるものです。
ソースからインストールする時のmakeコマンドで動いてるヤツです。

そして、このGCCの最適化オプションを使うとどうなるかですが、CPUに合わせてコンパイルするので、できあがったバイナリの実行速度が速くなります。

実際には、configureの前に、

というコマンドを実行しています。

この2つのコマンドですが、それぞれ
CFLAGS → Cコンパイラの引数
CXXFLAGS → C++コンパイラの引数

さらにそのオプションで、
-O2 → 最適化レベル。7段階ありますが、2が推奨のレベルです。
-march=native → micro architecture。CPUに合わせたものを指定します。nativeだと自動的にそのCPUに合わせたものにしてくれます。
-pipe → コンパイル時間を短縮してくれます。作成されるバイナリには特に影響ありません。
という感じです。
ここらへんはGCCの最適化 – Gentoo Wikiが詳しく解説してくれています。

問題は、CPUに合わせて最適化させるので、他のCPUが違うサーバにバイナリを持って行った時に動かなくなったりします。
Amazon EC2では、インスタンスタイプが違えばCPUも違うので、インスタンスを変更したりした時に動かなくなりそうな懸念があります。
なので少し調べてみました。

t1.micro Xeon E5-2670 v2 march=core-avx-i
t2.nano Xeon E5-2676 v3 march=core2
t2.micro Xeon E5-2676 v3 march=core-avx2
t2.small Xeon E5-2676 v3 march=core-avx2
t2.small (昔に作ったもの) Xeon E5-2670 v2 march=core-avx-i
t2.medium Xeon E5-2676 v3 march=core-avx2
m1.small Xeon E5-2651 v2 march=core-avx-i
m1.small (昔に作ったもの) Xeon E5-2650 0 march=corei7-avx
m3.medium Xeon E5-2670 v2 march=core-avx-i
m3.large Xeon E5-2670 v2 march=core-avx-i
m4.large Xeon E5-2676 v3 march=core-avx2
c4.large Xeon E5-2666 v3 march=core2

と、どれもバラバラな結果ですが、とりあえず最新世代はHaswellになっていました。
ただ、それでもmarchはnativeでcore-avx2にはならないようです。
一応、最新世代ならGCCコマンドで-march=core-avx2と指定した時でもエラーにはならなかったので、おそらく大丈夫だとは思います…多分…
もし試す方がいたら自己責任でお願いします…

フロントエンドエンジニアリングとサーバサイドエンジニアリング

2013-02-21 17:35 - インターエデュ

近年、「フロントエンドエンジニアリング」という言葉が良く使われるようになりましたね。先日会社の近くの本屋さんに寄ってみたのですが、関連書籍もチラホラ見るようになりました。

まだ正式な定義というものは無さそうですが、概ねこんな業務を担う人のことを言うようです。

  1. HTMLマークアップ
  2. CSS3の記述、Javascriptのプログラミング
  3. サイト全体の設計(UIやサイトマップ、SEOなど)

以前なら「コーダー」とか、大きい括りでいうと「デザイナー」と呼ばれていた人たちですね。「サーバサイド」に対してクライアントサイド、つまりブラウザ周りのことを総合的にエンジニアリングする人たちのことを指すと私は理解しています。

なぜ、フロントエンドエンジニアリングという概念が注目されるようになったのか。それはHTML5やCSS3、jQueryなどが普及するに従って、こうした技術を扱うことが今まで以上に難しくなってきたからだと思います。というよりも、新しい技術をどんどんフォローアップしていくことが難しくなったと言ったほうがいいかもしれません。だからそれを専門とする人たち(というよりもそれを得意とするコーダー/デザイナー)をあえて「フロントエンドエンジニア」と呼ぶようになったのかもしれません。

>>続きを読む