SIMD

OpenCL でベクタ演算 (SIMD) を試してみる - その1 -

主旨 OpenCL でベクタ演算 (SIMD) を試してみます.問題はOpenCL をさわってみる - kawa0810の日記 で取り扱った配列同士の加算演算のベクタ演算 (SIMD) 化を考えます.また,プログラムはオンラインコンパイルで作成します. OpenCL でベクタ演算 (SIMD) Op…

gcc4.8 でメモリアライメント管理が使用可能になった

メモリアライメントについて gcc4.8 においてメモリアライメント管理である alignas と alignof の使用が可能となりました.alignas と alignof は C++ 0x から言語的にサポートされており*1,alignas と alignof を使用してプログラムを記述することでコン…

Mac で AVX + マルチスレッドを試してみる - その2 -

主旨 Mac で AVX + マルチスレッドを試してみる - その1 - - kawa0810 のブログ の続きです. Pthread + AVX on OSX 環境を試した結果です.問題は前回に続き総和計算(マルチスレッドプログラミングで総和計算 - その1 Pthread 編- - kawa0810 のブログ)を…

とある勉強会で発表してきました

とある勉強会 とある勉強会で発表してきました.かなりローカルな勉強会だったので勉強会名はふせさせてもらいます.勉強会自体は伊東のほうで開催されました.当日は寝坊するわ,エクストリーム資料作成することになるわ,新幹線使うことになるわ,新幹線で…

Mac で AVX + マルチスレッドを試してみる - その1 -

久々に Intel AVX の記事です 久々に Intel AVX の記事です.Intel AVX の概要や簡単な説明は過去の記事をご確認ください. Intel AVX を使用して SIMD 演算を試してみる - kawa0810 のブログ 第2回闇鍋プログラミング勉強会で発表してきました - kawa0810 …

Mac で無理矢理 Intel Intrinsics Guide を見る方法

Intel Intrinsics Guide Intel 社は 「Intrinsics Guide for Intel(R) AVX2 (Intel Intrinsics Guide)」 という Intel SSE 系や Intel AVX 系などの命令をまとめたアプリケーションを提供してくれています.Intrinsics Guide for Intel(R) AVX2 を使うことで…

SIMD 演算で if 文の並列化 - その2 -

2012-10-20 - kawa0810の日記の続きです.今回は SIMD 演算の実用編(?)として,モンテカルロ法を用いて円周率を求めます.ただし,整数の AVX は Haswell から対応なので,円の内側の点数を数える際に整数ではなく浮動小数点を使用してます.また,乱数の…

SIMD 演算で if 文の並列化 - その1 -

今月は SIMD 演算で条件分岐(if 文や三項演算子)の並列化を行います.SIMD で条件分岐を計算するには mask の概念の理解が必要になることや,SSE 世代と AVX 世代で条件分岐を計算する関数の使用方法が変わっているので今回は簡単にご紹介します. SSE と …

第2回闇鍋プログラミング勉強会で発表してきました

闇鍋プログラミング勉強会 第2回闇鍋プログラミング勉強会で発表してきました.闇鍋プログラミング勉強会についてはこちら (第2回 闇鍋プログラミング勉強会 : ATND) を参照ください.当日は道に迷ったり,エクストリーム資料作成したり,会場がキレイすぎて…

メモリアライメントを意識した動的確保を行う際は posix_memalign が良いぽい

posix_memalign() が良い理由 本ブログでは今まで _mm_malloc() を使用してメモリアライメントを揃えていましたが,posix_memalign() を使用したほうが良いぽいです.理由は _mm_malloc() が Intel CPU 環境でのみ動作するのに対し,posix_memalign() は標準…

SIMD 演算におけるキャッシュ制御方法とか

キャッシュ制御は重要 (?) プロセッサに近いメモリの順番は, メインメモリ ⇔ L3 キャッシュ ⇔ L2 キャッシュ ⇔ L1 キャッシュ ⇔ レジスタ ⇔ 演算器 という感じだと思います.SSE や AVX にはキャッシュ操作をサポートする命令が存在します.SSE 命令・AVX …

メモリアライメントを揃えずに SIMD する方法

メモリアライメントを揃えずに SIMD 演算する方法 今までは _mm_malloc() を使用してメモリアライメントを 32byte 境界に揃えてから AVX 命令で SIMD 演算をしていましたが,メモリアライメントを気にせずに AVX を用いて SIMD 演算する方法です.データを 3…

AVX で整数を SIMD 演算するには Intel AVX2 からのようですね

整数を SIMD 演算する方法 今まで浮動小数点型がメインだったのでたまには整数型の話です.ただし,Intel AVX 命令を使って整数型を SIMD 演算するには Intel AVX2 が必要であり,Intel AVX2 は次世代 CPU である Haswell に搭載のようなのでまだ使用するこ…

AVX と SIMD 演算と最大値の計算 - その2 -

前回 (2012-03-15 - kawa0810の日記) の続きです.前回のソースコードの問題点と対処方法です. 前回のコードの問題点 バグが混入している部分(単精度) ... auto vx = reinterpret_cast<__m256 const*>( x ); auto vmax = vx[0]; auto max = reinterpret_cast<float*>( &vmax ); .</float*></__m256>…

AVX と SIMD 演算と最大値の計算 - その1 -

AVX 命令を用いる SIMD 演算で最大値を求める 今回は AVX 命令を用いる SIMD 演算で最大値を求めてみます.考え方は前回の総和計算(2012-03-11 - kawa0810の日記)に近いと思われます. 最大値を求める AVX 命令は 単精度 (float) : _mm256_max_ps(__m256 ,…

AVX 命令を用いる SIMD 演算で総和を計算してみる

AVX 命令を用いる SIMD 演算で総和を計算する 今回は AVX 命令を用いる SIMD 演算で総和を計算してみます.SIMD 演算や AVX 命令については下記の URL を参照してください. 2012-03-03 - kawa0810の日記 さて,自分で総和計算のコードを書く場合は以下のよ…

Intel AVX を使用して SIMD 演算を試してみる - その5 - (最終回)

2012-03-06 - kawa0810の日記 の続きです. 今回は Fused Multiply Add (FMA) 命令についてです.ただし,現在 (2012/3/7日) 発売されている Sandy Bridge では FMA 命令は未対応のようですので注意してください. Why no FMA in AVX in Sandy Bridge? FMA …

Intel AVX を使用して SIMD 演算を試してみる - その4 -

2012-03-05 - kawa0810の日記 の続きです. 今回はその2 (2012-03-04 - kawa0810の日記) で紹介した AVX 命令を試します. 計算する問題 今回は SIMD 演算を用いてベクトルのスカラ倍 を計算する方法を考えます.ただし, はベクトルの要素数 = 2.0 とします…

Intel AVX を使用して SIMD 演算を試してみる - その3 -

2012-03-04 - kawa0810の日記 の続きです. 今回は SIMD 演算を行う際に問題となる端数の計算方法です. SIMD 演算を行う際に発生する端数の処理方法 AVX 命令を用いる SIMD 演算は 128bit 単位もしくは 256bit 単位で計算を行うため任意の長さのデータを計…

Intel AVX を使用して SIMD 演算を試してみる - その2 -

2012-03-03 - kawa0810の日記 の続きです. 今回は AVX 命令の組み込み関数の説明等です. データ型 AVX 命令で使用できる型は主に整数 (int),単精度 (float),倍精度 (double) です.また,AVX 命令は SSE 命令の拡張であるため 256bit 単位の演算だけでな…

Intel AVX を使用して SIMD 演算を試してみる

SIMD 演算と Intel AVX Single Instruction Multiple Data (SIMD) 演算とは1回の命令で複数のデータを同時に処理する演算です.近年の CPU には SIMD 演算を行うことができる SIMD 演算器が搭載されており,Intel 社の CPU ならば Streaming SIMD Extensions…