使用英特尔的__attribute __((vector))和swig

时间:2014-07-01 04:26:02

标签: python c++ swig

我想在c中编写一个函数,然后我可以从python中调用它。该函数实际上添加了两个数字,但是如果您将一个数组传递给该函数,它将以元素方式添加它们并返回。英特尔有__attribute__((vector))这基本上让我们这样做。但是,如果我在__attribute__((vector))文件中使用.i,则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);                                              

1 个答案:

答案 0 :(得分:2)

您无法像这样将SIMD函数导出到Python。对于初学者来说,Python有自己的方式来表示浮点数(而不是非常有效的)。即使它有效,所有矢量化性能增益也会在SWIG接口中丢失。

如果可能的话,我建议你将你的性能关键计算整体移到C,或者只是坚持使用普通的Python列表/元组而不是SIMD数组。