3

正直なところ、Yeppp! のようなライブラリを使用するのは初めてです。つまり、動的なランタイム選択を備えた SIMD ライブラリを意味します。最終的に、ライブラリは、実行されるプラットフォームやハードウェアに関係なく、最適な SIMD アセンブリ コードを選択することになっています。

これは私のプロジェクトで使用するのに最適なツールのように思えましたが、タイトルが示すように、Yeppp! とは言えません。セグメンテーション違反が発生することなく機能します。私が得たデバッグ情報もあまり役に立ちません。

私のシステム構成は次のとおりです。

Xubuntu 13.04 'raring' with Linux 3.8.0-31-generic x86_64

GCC 4.8.1 --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu .... etc, there were many more, but I chose the important ones

Code::Blocks IDE and GDB 7.5.91.20130417-cvs-ubuntu debugger through Code::Blocks

Intel Pentium(R) Dual-Core CPU T4400 @ 2.20GHz with SIMD instruction sets MMX, SSE, SSE2, SSSE3

CPUなどを記載しておくと、Yeppp!のやり方が重要かもしれません。問題の可能性がある正しいランタイムを選択します。

以下は、他の Yeppp! も試しましたが、私が使用している簡単なテスト コードです。さまざまなデータ型の関数、それはすべて同じセグメンテーション違反でした。32 や 64 などのさまざまなアライメントも試しましたが、それが問題であるとは思えません。

YEP_ALIGN(16) int32_t a[100], b[100], c[100];
//just test values
for( int x = 0; x < 100; x++ ) {
    a[x] = x + 1;
    b[x] = x - 1;
}

yepCore_Add_V32sV32s_V32s( a, b, c, 100 );

私はそれを特別なフラグなどでコンパイルしていないので、-m32や64はありません.Cでも同じことを試しましたが、同じ結果と基本的に同じアセンブリでしたので、言語ではありません.

Yeppp! で提供される Linux x86_64 libyeppp.so バイナリにリンクします。私は 64 ビット プラットフォームを実行しており、GCC が受け入れる唯一のディストリビューションであるためです。

呼び出しの分解は次のとおりです。

0x40179a    lea    rdx,[rbp-0x1a0]
0x4017a1    lea    rsi,[rbp-0x330]
0x4017a8    lea    rax,[rbp-0x4c0]
0x4017af    mov    ecx,0x64
0x4017b4    mov    rdi,rax
0x4017b7    call   0x401550 <yepCore_Add_V32sV32s_V32s@plt>

これはかなり標準的に見えます。ただし、関数にステップインすると、次のようになります。

0x401550    jmp    QWORD PTR [rip+0x205b7a]        # 0x6070d0 <yepCore_Add_V32sV32s_V32s@got.plt>
0x401556    push   0x17
0x40155b    jmp    0x4013d0
0x401550    jmp    QWORD PTR [rip+0x205b7a]        # 0x6070d0 <yepCore_Add_V32sV32s_V32s@got.plt>
0x401556    push   0x17
0x40155b    jmp    0x4013d0

次に、jmp 0x4013d0そのGDBを実行した後、にいくつかの指示を進めます

0   No function contains specified address.

次に、次の命令があり、NULL で実行しようとしないと仮定すると、セグメンテーション違反が発生します。それは私が得ることができた限りです。数回微調整した後、../sysdeps/x86_64/dl-trampoline.S見つからなかったファイルを開こうとします。

Yeppp! それ自体が故障しています。Yeppp! の 1.0 リリース以来、ライブラリが作成されてから数日しか経っていないため、同様の問題や問題を抱えている人をまったく見つけることができませんでした。

PS: プログラミングについて公に質問したのはこれが久しぶりなので、これを解決するためにさらに情報が必要な場合は、喜んで提供します。

4

1 に答える 1