我想在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);
答案 0 :(得分:2)
您无法像这样将SIMD函数导出到Python。对于初学者来说,Python有自己的方式来表示浮点数(而不是非常有效的)。即使它有效,所有矢量化性能增益也会在SWIG接口中丢失。
如果可能的话,我建议你将你的性能关键计算整体移到C,或者只是坚持使用普通的Python列表/元组而不是SIMD数组。