タグ

2015年6月25日のブックマーク (4件)

  • Haskellのビルドツール"stack"の紹介 - Qiita

    Stackとは? つい先日のことですが、Stackage界隈からstackというツールがリリースされました。リリースされたとはいえ、開発され始めたのがちょっと前のことですし、現在も盛んに機能が追加されているので、絶賛開発中であるとかそういったほうがいいかもしれません。 まだ開発の始まったばかりのツールなのに、なぜこんな紹介記事を書こうと思ったのかというと、このツールがHaskellの開発において極めて有用になることが確定的に明らかであって、すでに荒削りながらも、大変便利に使えているからなのです。そしてここで紹介することで、多くの読者の方に興味を持ってもらって、それで開発がさらに盛り上がっていくと嬉しいなあと、そう思った次第であります。 なお、stackの開発が始まる少し前に、stackage-cliを始めとするいくつかのツールがリリースされましたが、今後開発はstackに一化されるような

    Haskellのビルドツール"stack"の紹介 - Qiita
  • SSEとAVXで高次元ベクトルの内積計算を高速化してみた | さかな前線

    世界最速のお魚と言えばカジキ類で,泳ぐ速度は時速100km/hを超えるとか.55ノット程になるのでこれはMk-48魚雷にも匹敵するほどです. 一方ちょっとチートな高速お魚としては,お馴染みトビウオが飛行中に最大70km/hほどに達するとか. 今日はそんな若干チートな高速化のお話(?)ということで,SSE組み込み命令について. SSEやAVXといえばお馴染みSIMD命令で,それをプログラムから構造体と関数の形式で高移殖に記述する方法がSIMD組み込み関数(SIMD Intrinsic)なわけですが,これを使ってごく典型的なベクトルの内積計算を高速化してみました. ベクトルの内積の高速化と言えば星の数ほどもされてる話なわけで,いまさら魚の情報なんか役に立つ気は全くしないのですが,純粋に自分でやらないとわかんない>< ということで, とにかく書いてみよう 効果の程はいかに? を調べてみたくて,や

  • AVX で遊んでみる - Algorithmer’s note

    今年の1月に発表されたIntelの新CPU「Sandy Bridge」から搭載された新機能に、「AVX」というものがあります。AVXを用いると、256ビットのレジスタを用いて、例えばdouble型の計算を4つ同時に行うなど高速に演算をすることができます。 AVXを使うためには、専用のコードを書かなければいけませんが、C++では単体で(アセンブラを用いずに)AVX対応のコードを書くことができるので、いろいろ遊んでみました。 コードの作法 ・#include "immintrin.h" を記述 AVXを使うための関数がここに記述されているので、includeします。 ・変数のalignment 変数の前に「_declspec(align(32))」というおまじないを書いておけば、自動で境界が32バイト境界になるように調整されます。このおまじないがあると、わりと何も考えなくてもAVX命令を使える

    AVX で遊んでみる - Algorithmer’s note
  • メモリアライメントを揃えずに SIMD する方法 - kawa0810 のブログ

    メモリアライメントを揃えずに SIMD 演算する方法 今までは _mm_malloc() を使用してメモリアライメントを 32byte 境界に揃えてから AVX 命令で SIMD 演算をしていましたが,メモリアライメントを気にせずに AVX を用いて SIMD 演算する方法です. データを 32byte 境界に揃えている場合は _mm_load_ps や _mm_load_pd が暗黙的に使われデータをロードします.計算したいデータが 32byte 境界に揃えていない場合は _mm_loadu_ps や _mm_storeu_ps 等を明示的に使用することで SIMD 演算を使用することが可能になります.ただし,オーバーヘッドが発生するため計算が遅くなるそうで可能な限りデータは 32byte 境界に揃えましょう. 総和計算のサンプルコード メモリアライメントを気にせずに総和計算をするサンプ

    メモリアライメントを揃えずに SIMD する方法 - kawa0810 のブログ