おぺんcv

画像処理エンジニアのブログ

ARM

ARM NEONの使い方 除算編

ARM

四則演算ラスト! 今回は除算編です アーキテクチャによる違い 32bit ARM 32bit ARMには除算を直接行うSIMD命令がないため a/bという除算を行う場合、まず逆数を計算するSIMD命令によってbの逆数を計算し これをaと掛け算することによって除算を表現します 6…

ARM NEONの使い方 乗算編

ARM

今回は乗算編です 特に変わった内容はありません 乗算 vmul[q]_<type>(va, vb) 64bit(qが付く場合は128bit)のベクタvaとvbの乗算 サンプル 符号付き16bit整数ベクタの乗算をしてみます #include <stdio.h> #include <stdint.h> #include <arm_neon.h> int main() { int16_t a[4] = { 1, 2, 3, 4 };</arm_neon.h></stdint.h></stdio.h></type>…

ARM NEONの使い方 減算編

ARM

年内に終わるかな? 今回は減算編です 減算 (通常の減算、符号拡張付き減算、飽和付き減算) 加算編で紹介したものとほぼ変わらないので、まとめて紹介 vsub[q]_<type>(va, vb) 64bit(qが付く場合は128bit)のベクタvaとvbの引き算 vsubl_<type>(va, vb) 64bitのベクタvaとv</type></type>…

ARM NEONの使い方 加算編

ARM

四則演算編の予定でしたが、量が多いので分割することにしました 今回は加算編です 加算 vadd[q]_<type>(va, vb) 64bit(qが付く場合は128bit)のベクタvaとvbを足します 戻り値のサイズは入力のサイズと同じです サンプル 符号付き16bit整数のベクタvaとvbをvadd_s1</type>…

ARM NEONの使い方 ロード・ストア編

ARM

ロード vld1[q]_<type>(ptr)はptrから64bit(qが付く場合は128bit)のベクタをロードします サンプル 符号付き16bit整数のベクタをロードしてみます ロードしたベクタの各レーンをvget_lane_s16()で取得し、表示してみます #include <stdio.h> #include <stdint.h> #include <arm_neon.h> int main()</arm_neon.h></stdint.h></stdio.h></type>…

ARM NEONの使い方 組み込み関数一覧編

ARM

組み込み関数一覧 こちらのページにNEONの組み込み関数一覧が載ってます 慣れてきたらここから必要な演算を探すと良いでしょう infocenter.arm.com 命名規則 NEONの組み込み関数は大抵のものが以下の規則で名前が付けられています <opname>[q]_<type><opname>はvaddやvmul等、演算</opname></type></opname>…

ARM NEONの使い方 データ型編

ARM

NEONデータ型の概要 NEONのデータ型は以下の規則で名前が付けられています <type><size>x<number of lanes>_t例えば、 int16x4_t は符号付き16bit整数を4個保持する型となります それぞれの要素を「レーン」と呼びますNEONのデータ型は64bitのものと128bitのものがあります NEONデータ型一</number></size></type>…

ARM NEONの使い方 予告編

ARM

はじめに ここ最近、NEON(ARMのSIMD命令)を使ったプログラムを初めて書きました NEONについて調べていて思ったのが、NEONの使い方を初心者向けに 日本語で説明したページがあまり見当たらないということ そんなわけで、自分なりにNEONの使い方をまとめておこ…