2014年2月2日日曜日

Ubuntu/x86 で NEON のコードをクロスコンパイルして実行する

必要な作業は以下の三つ。

  • クロスコンパイル環境を構築する
  • QEMU を入れる
  • NEON のコードを書いて実行する

クロスコンパイル環境を構築する


$ sudo apt-get install g++-arm-linux-gnueabi binutils-arm-linux-gnueabi

QEMU を入れる


$ sudo apt-get install qemu

NEON のコードを書いて実行する


#include <stdio.h>
#include <stdint.h>
#include <arm_neon.h>

int main(int argc, char* argv[])
{
    uint32_t src[] = {0, 1, 2, 3, 4, 5, 6, 7};
    uint32_t dst[4];
    uint32x4_t i0 = vld1q_u32(src);
    uint32x4_t i1 = vld1q_u32(src + 4);
    uint32x4_t i2 = vaddq_u32(i0, i1);
    vst1q_u32(dst, i2);
    for (size_t i = 0; i < sizeof(dst)/sizeof(*dst); ++i) {
        printf("%d ", dst[i]);
    }

    return 0;
}

のようなコードを書いてビルドする。

$ arm-linux-gnueabi-g++ -mfpu=neon -mfloat-abi=softfp test.cpp

QEMU の実行には root 権限が必要なこととターゲットのライブラリパスを指定する必要があることに注意する。
$ sudo qemu-arm -L /usr/arm-linux-gnueabi/ a.out 
4 6 8 10

0 件のコメント:

コメントを投稿