2014-07-01 61 views
1

我想在c中編寫一個函數,然後我可以從python調用函數。該函數實質上添加了兩個數字,但如果將數組傳遞給該函數,則會將它們添加到元素中並返回。英特爾有這個__attribute__((vector)),這基本上讓我們做到這一點。但是,如果我在.i文件中使用__attribute__((vector)),則swig接口會生成錯誤。如果我不這樣做,該函數不會將數組作爲輸入並引發異常。任何人都可以讓我知道正確的方法來做到這一點?使用intel的__attribute __((vector))與swig

example.c

__attribute__((vector)) double add(double x, double y){       
    return x+y;                 
}                    

example.i

%module example                 
%{                    
    extern __attribute__((vector)) double add(double, double);      
%}                    

extern double add(double, double);            

回答

2

你將不能夠只是出口SIMD功能到Python這樣的。對於初學者來說,Python有自己的方式來表示浮點數(而不是非常有效的)。即使它起作用,所有向量化性能增益都將在SWIG接口中丟失。

如果可能的話,我建議你將性能關鍵的計算作爲一個整體移出C,或者僅僅使用普通的Python列表/元組而不是SIMD數組。

相關問題