iOS6にアップデートした際に音がでなくなる問題の解決方法(?)

iOS 6 にアップデートした際に iPhone 4S の音声がでなくなる問題の解決方法(?)です.私の場合は以下の方法で解決しました^^; //今更感がありますが,イヤホン使う際は音声でるので気にせずにずっと放置してたとは言えない・・・ 現象 機種:iPhone 4S…

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) を参照ください.当日は道に迷ったり,エクストリーム資料作成したり,会場がキレイすぎて…

マルチスレッドプログラミングで総和計算 - その4 OpenMP 編-

kawa0810 のブログ の続きです. 最後は OpenMP について取り扱います. OpenMP Open Multi-Processing (OpenMP) はプログラム中の並列化したい箇所に OpenMP の規約に伴う指示文(ディレクティブ)を記述することで,指定した部分のプログラムをマルチスレ…

マルチスレッドプログラミングで総和計算 - その3 Win32 API 編-

kawa0810 のブログ の続きです. 今回は Win32 API を用いたマルチスレッドプログラミング方法を取り扱います. Win32 API を用いてマルチスレッドプログラミング Win32 API にはスレッドを作成・実行するために以下のような関数が用意されています.また,…

マルチスレッドプログラミングで総和計算 - その2 std::thread & std::async 編-

2012-08-04 - kawa0810の日記 の続きです. 今回は C++11 で追加された機能の一つである std::thread を用いて総和計算の高速化を考えます. std::thread と std::async について std::thread は C++11 から追加されたスレッド操作のライブラリです.std::th…

マルチスレッドプログラミングで総和計算 - その1 Pthread 編-

Pthread とは 近年,マルチコアプロセッサの普及に伴い,複数のプロセッサを利用する並列・並行プログラムの開発が求められています.POSIX Thread (Pthread) は POSIX 標準のスレッドであり,Pthread を用いることでスレッドの生成・実行・制御が可能となり…

Top500 のリストの見方

Top500 Top500 とは世界中の高速なコンピュータシステム (スーパーコンピュータ,スパコン) の上位500位を決定するプロジェクトです.サイトの URL はコチラ(Home | TOP500 Supercomputer Sites)となります.コンピュータシステムの性能測定には Linpack …

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

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

Boost.MPI を使って総和を計算

MPI を使って総和を計算 MPI を使って総和などを計算する場合,MPI_Reduce を使って各計算機の計算結果を足し合わせる作業が必要となります.MPI_Reduce の使い方は以下のような感じです. MPI_Reduce(void* sendbuf, void* recvbuf, int count, MPI_Datatyp…

Mac で Boost.MPI を動かしてみた

Boost.MPI をインストールする Boost.MPI はデフォルトでインストールされないので Boost をインストールする際に追加でいれる必要があります.Linux 等の環境で Boost.MPI をインストールする方法は他の方々にまかせるとして,Mac で port を使ってインスト…

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…