小编Dan*_*iel的帖子

numpy通过ctypes调用sse2

简而言之,我试图从python调用一个共享库,更具体地说,从numpy调用.共享库使用sse2指令在C中实现.启用优化,即使用-O2或-O1构建库,当通过ctypes调用共享库时,我面临着奇怪的段错误.禁用优化(-O0),一切都按预期进行,就像直接将库链接到c程序(优化与否)一样.附上你发现一个剪辑,展示了我系统上描绘的行为.启用优化后,gdb将在emmintrin.h:113中的__builtin_ia32_loadupd(__P)中报告段错误.__P的值报告为优化输出.

test.c的:

#include <emmintrin.h>
#include <complex.h>
void test(const int m, const double* x, double complex* y) {

    int i;
    __m128d _f, _x, _b;
    double complex f __attribute__( (aligned(16)) );
    double complex b __attribute__( (aligned(16)) );
    __m128d* _p;

    b = 1;
    _b = _mm_loadu_pd( (double *) &b );

    _p = (__m128d*) y;

    for(i=0; i<m; ++i) {
        f = cexp(-I*x[i]);
        _f = _mm_loadu_pd( (double *) &f );
        _x = _mm_loadu_pd( (double *) &x[i] );      
        _f = _mm_shuffle_pd(_f, _f, 1);
        *_p = _mm_add_pd(*_p, …
Run Code Online (Sandbox Code Playgroud)

python ctypes numpy sse2

10
推荐指数
1
解决办法
1150
查看次数

标签 统计

ctypes ×1

numpy ×1

python ×1

sse2 ×1