タグ

sseに関するdannのブックマーク (26)

  • HTTPパーサにおけるSSE4.2最適化の威力と注意点 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは、サイボウズ・ラボの光成です。 PicoHTTPParserは@kazuhoさんたちが開発している高速なHTTPパーサです。 同じ作者によるHTTPサーバH2Oにも使われています。 11月4日の開発ブログによると、その時点でNode.jsなどに使われているhttp-parserの10倍程度の速度を誇るそうです(現在はhttp-parserも速度向上しその差は縮まりました。それでも4倍以上の差があるようです)。 該当ブログにはその高速化のためのノウハウが書かれていて大変興味深いです。ただIntel系CPUに搭載されているSIMD命令は用いられていませんでした。今回、@kazuhoさんと一緒に文字列処理専用のSSE4.2を用いることで1.7~1.9倍の高速化を達成しました(Improving Parser Performance using SSE Instructions (in

    HTTPパーサにおけるSSE4.2最適化の威力と注意点 - Cybozu Inside Out | サイボウズエンジニアのブログ
    dann
    dann 2014/12/04
  • Improving Parser Performance using SSE Instructions (in case of PicoHTTPParser)

    PCMPxSTRx is a SIMD instruction that can be used for parsing text. In _SIDD_CMP_RANGES mode, it checks at most 16 bytes at once, if each byte is within given set of ranges. Herumi and I have created a wrapper function for the instruction named findchar_fast that iterates though every 16 bytes of a given buffer to find the first occurrence of a byte within a set of given ranges. And the function is

    dann
    dann 2014/12/02
  • marisa-trie の PopCount を改良しました - やた@はてな日記

    簡潔ビットベクトルの基操作である rank/select において重要な役割を果たす PopCount を改良することにより,marisa-trie (Google Code Archive - Long-term storage for Google Code Project Hosting.) を少しだけ高速化することができました.成果は Subversion からソースコードをダウンロードしてビルドすることにより確認できます. 一つ目の改良点は SSE4.2 で追加された popcnt 命令です.その名の通り,PopCount 専用の CPU 命令であり,PopCount を高速に実現できます.ただし,現状では使える CPU が限られているため,configure に --enable-popcnt を指定してビルドしたときだけ有効になるようにしています. 二つ目の改良点は pop

    marisa-trie の PopCount を改良しました - やた@はてな日記
  • SSE2命令(movdqu)を使用した128ビット単位のメモリ間転送プログラム - ちーちーの小ネタ部屋

    SSE2では、128ビット整数演算のSIMD命令の拡張が行われており、演算だけでなく、movdqa・movdquという命令を使うことで128ビット単位でメモリ間のデータコピーを高速に行うことができます。movdqaは転送対象のメモリのアドレスが16バイトの境界(アライメン ト)に揃ってる必要があります(アドレス値が16で割り切れる)。これに対して、movdquでは16バイトのアライメント制約はなく、どのアドレス値からでも読み書きできます。ただ、アライメントが揃っている分、CPUが処理しやすいため、movdqa命令の方が実行速度が速いです。速さを追求するならば、mallocや配列の確保時に16バイトのアライメントを意識する必要があります。各命令の基的な実行速度はIntelから以下の資料が出ていますが、この資料上ではmovdqa・ movdquのスループットとレイテンシは同じになってますね・

    dann
    dann 2011/11/02
  • 楓 software: x86 SIMD Technique アーカイブ

    2008年02月23日 はじめに イントリンシックで MMX や SSE が使えるようになり、手軽に SIMD が利用できるようになった。 でも、いざ使おうとするとどう書けばいいのかわからない場面に出くわすことが多い。 だからと言って、一度ばらして普通に処理すると遅くなってしまう。 ここでは SIMD 化するに当たって直面した問題を解決した方法や他のソースコードから学んだテクニック、検索して見つけたものなどをまとめて行こうと思う。 投稿者 Takenori : 20:48 | トラックバック 比較 SIMD の比較は、単にマスクを生成してくれるだけだ。 比較して分岐するなどは出来ない。 生成されたマスクを使って何とかするしかない。 これはいつも分岐で書いていると、どう書けばいいのかさっぱりわからない問題だ。 でも、これが使えると分岐を消して並列で処理できるようになる。 比較的わかりやすいで

    dann
    dann 2011/11/02
  • 東京工業大学 情報理工学院 数理・計算科学系

    大岡山地区の建物 大学正門より,桜並木のウッドデッキを通り,右手の芝生をつっきる小径が西8号館,西7号館に続くみちです. 大岡山西8号館(E棟,W棟): キャンパスマップの18, 19番の建物にあたります.館の西隣りに位置しています.正面玄関をはいったところは3階です. E棟においでの方は廊下をはいってすぐ左手のエレベータをご利用下さい. W棟にはじめておいでの方は十分に注意して下さい.E棟とW棟を繋いでいる通路は3階と10階にしかありません.E棟のエレベータを利用すると迷子になります.正面玄関から廊下をまっすぐにおいでになり,奥の右手にあるエレベータをご利用下さい. 西7号館:キャンパスマップの17番の建物にあたります.西8号館から,建物を二つ挟んだ並びにあります.芝生から向う場合,左手に館を見ながら進み,館がとぎれたあたりの右手にある小さな建物が西7号館です.橋を渡ってはいったと

    dann
    dann 2011/11/01
  • [PDF] いまどきじゃない アセンブラ入門 / 久保田展行

    いまどきじゃない アセンブラプログラミング x86アセンブリ言語の基礎からSSEまで 1 自己紹介  久保田展行 ◦ @nobu_k, id:nobu-q  検索エンジンSedueを作ってます 2 日の内容  x86アセンブリ言語の基礎  インラインアセンブラで遊ぶ  SSEを使ってみる 3 アセンブリ言語とは  機械語に近いプログラミング言語 ◦ 機械語と一対一で対応 4 if (x < 0) { x = -x; } mov eax, [ebp + 8] cmp eax, 0 jge L1 neg eax L1: 8B 45 08 3D 00 00 00 00 7D 02 F7 D8 C言語 アセンブリ言語 機械語読むのは厳しい まだマシ アセンブリ言語の特徴  移植性が低い ◦ CPUや処理系によってすべてが変わる  読み書きが大変 ◦ 可読性がものすごく低い 

    dann
    dann 2011/10/28
  • Using Intel® Hyper-Threading Technology| Intel® Math Kernel Library for macOS

    Using Intel.com Search You can easily search the entire Intel.com site in several ways. Brand Name: Core i9 Document Number: 123456 Code Name: Emerald Rapids Special Operators: “Ice Lake”, Ice AND Lake, Ice OR Lake, Ice* Quick Links You can also try the quick links below to see results for most popular searches. Product Information Support Drivers & Software

    Using Intel® Hyper-Threading Technology| Intel® Math Kernel Library for macOS
  • x86やx64における最適化まとめ - ずmemo

    dann
    dann 2011/10/08
  • SIMD演算 - MUGI COM

    C言語でSSEやSSE2を使う方法について。ポイントがいくつかあります。 xmmintrin.hやemmintrin.hをインクルードする SSE命令のみならxmmintrin.h、SSE2命令も使うならemmintrin.h SIMD命令でアクセスするメモリは16バイトアラインメントにする gccの場合、_mm_malloc関数を使えばよい。 MMX命令はAMDCPUでは使えない Pentium4以降に限定されますが、SSEやSSE2を使うのが良いでしょう。 これらを踏まえて、画像の各ピクセルのRGB値を反転させる例を示します。 各ピクセルは8bitのRGB値が並んでいるものとします。8bitの整数演算を行うので、8bit計算を16個並列で行うSSE2命令を使用します。 最初はSSE2のインクルードファイル。 #include <emmintrin.h> つづいて16バイトアラインメン

    SIMD演算 - MUGI COM
    dann
    dann 2011/10/08
  • 高速な倍精度指数関数expの実装

    4. 最終実装コード 今回の目標はこのコードの意味を理解すること 2011/8/6 /204 union di { uint64_t i; double d; }; double expd(double x) { di di; di.d = x * 2954.639443740597 + 6755399441055744ULL; uint64_t iax = tbl[di.i & 2047]; double t = (di.d - 6755399441055744ULL) * 0.0003384507717577858 - x; uint64_t u = ((di.i + 2095104) >> 11) << 52; double y = (3.0000000027955394 - t) * (t * t) * 0.16666666685227835 - t + 1; di.i = u

    高速な倍精度指数関数expの実装
  • SSE4.2の文字列処理命令の紹介

    1. SSE4.2の文字列処理命令の紹介 Cybozu Labs 2011/8/6 光成滋生(8/23加筆修正p3, p.25) x86/x64最適化勉強会#1 2011/8/6 /41 1 3. 説明とコード Intelプロセッサ最適化マニュアルを読もう http://homepage1.nifty.com/herumi/prog/intel-opt.html コード片 https://github.com/herumi/opti/ アライメントとページ境界に関する補足(必読) http://homepage1.nifty.com/herumi/diary/1108.html#8 2011/8/6 3 /41 4. SIMD向き/不向き SIMDは4個(or 8/16)個のデータを同時に同じよう に処理するためのもの SIMD向き 先程の最大値を求める場合,4個ずつやっ

    SSE4.2の文字列処理命令の紹介
    dann
    dann 2011/08/07
  • SSE4.2の文字列処理命令の紹介に関する補足(アイランとページ境界)

    x86/x64最適化勉強会1 なんとか無事終了. ustがうまくいったりいかなかったり, 運営が手間取ったりと申し訳ない. 主催するというのはたいへんだなあ. 名前だけはwebなりでよく見かけていたけど会ったことなかった方々に会えたので満足. でもこれまた初めてお会いした@takehiro_tさんとは殆どしゃべれなかった. 残念. 個人的にはw_oさんのベンチマークの結果から理由を探していく部分が興味深かった. 反省点 : 発表の間は5分マージンを入れておく. タイマーあるとよさげ. とりあえずいくつかの資料へのリンク(uploadされれば随時更新). herumi : 条件分岐とcmovとmaxps m_asama : IA32/Intel64におけるキャッシュ利用最適化 sinya8282 : 開発中のJIT版grepの苦労話 TAKESAKO : ビットを数える herumi

    dann
    dann 2011/08/07
  • advanced optimization SSE

    float型浮動小数を4つ並列に演算する機構です. MMXや3D Now!の様にFPUレジスタを利用しているのではなく全く新規に作られたレジスタです. そのため, MMXや3D Now!と違ってFPUレジスタとの切替え[emms, femms]は不要ですが, 代わりにOSがSSEレジスタをサポートしている必要があります. 基的に最下位データのみを操作する命令にはss, 4つの(パックされた)データを操作する命令にはpsがつきます. 大抵の命令はssよりはpsの方がレイテンシ, スループットともに1クロックずつ余計にかかります. 以下, 表の中の`F'はfloat型データ1つを表します. `a-bサイクル'はレイテンシa, スループットbを表します. xmm?と書くのは面倒なのでxm?と書きます. 4.1 読み込み / 書き込み

    dann
    dann 2011/08/07
  • ホーム(玄界) | RESEARCH INSTITUTE FOR INFORMATION TECHNOLOGY, KYUSHU UNIVERSITY

    dann
    dann 2011/08/07
  • SIMD and other techniques for fast numerical programming with gcc

    SIMD and other techniques for fast numerical programming with gcc

    dann
    dann 2011/08/07
  • CDWFS: Optimizing for SSE: A Case Study

    Optimizing for SSE: A Case Study Originally appeared in Hugi Issue #25 Table of Contents Introduction Techniques Naive C++ Basic SSE Batch Processing 16-byte Memory Alignment Instruction Pairing Prefetching Improving Locality Application-Specific Specializations Conclusion and Future Possibilities Download Sample Code Links and Resources Revision History Introduction In this article I'll be descri

    dann
    dann 2011/08/07
  • Using SSE to speed up computation - store, load and alignment

    dann
    dann 2011/08/07
  • SSE intrinsics optimizations in popular compilers –

    dann
    dann 2011/08/07
  • SSE2でマンデルブロ集合 - merom686's blog

    下のコードは、SSE2でマンデルブロ集合の計算をするもの。かなり高速に動作すると思う。 このエントリでは、このコードの解説をするにょ。 #うるりの物置きのMandel100.zipにあるSSEのコードが元になっている。 ; MASM 8.0 を使用 .686 .xmm .model flat, c .data align 16 D4 real8 4.0, 4.0 L1 oword -1 .code mandel_sse2 proc x:ptr real8, y:ptr real8, m:dword, count:ptr dword mov eax, x movapd xmm0, [eax] mov eax, y movapd xmm1, [eax] mov ecx, m movapd xmm6, xmm0 movapd xmm7, xmm1 pxor xmm5, xmm5 jmp brot

    SSE2でマンデルブロ集合 - merom686's blog
    dann
    dann 2011/08/07