小编max*_*111的帖子

如何在 Numba 中使用指针包装 CFFI 函数

这应该是一项简单的任务,但我找不到如何将标量值的指针传递给 Numba 函数内的 CFFI 函数的方法。使用 传递指向数组的指针不会出现问题ffi.from_buffer

示例函数

import cffi

ffi = cffi.FFI()
defs="void foo_f(int a,double *b);"
ffi.cdef(defs, override=True)
source="""
#include <stdio.h>;
void foo_f(int a,double *b){
  printf("%i",a);
  printf("   ");
  printf("%f",b[0]);
  }

"""
ffi.set_source(module_name="foo",source=source)
ffi.compile()
Run Code Online (Sandbox Code Playgroud)

将指针传递给数组

import numpy as np
import numba as nb
import cffi
ffi = cffi.FFI()
import numpy as np
import ctypes
import foo
nb.cffi_support.register_module(foo)
foo_f = foo.lib.foo_f

@nb.njit()
def Test(a,b):
  a_wrap=np.int32(a)
  #This works for an array
  b_wrap=ffi.from_buffer(b.astype(np.float64))
  foo_f(a_wrap,b_wrap)


a=64.
b=np.ones(5)
Test(a,b)
Run Code Online (Sandbox Code Playgroud)

这可以正常工作,但如何修改函数Test以获取标量值b=5.而不修改 …

python performance numpy python-cffi numba

5
推荐指数
1
解决办法
1286
查看次数

标签 统计

numba ×1

numpy ×1

performance ×1

python ×1

python-cffi ×1