On Tue, 18 Oct 2016 22:12:44 -0700 (PDT)
tpoisonooo <tpoison...@gmail.com> wrote:

> My colleague gives me a `face_recognization.so`,
> `face_recognization.so` use `libcaffe.so`.
> I compiled it with cgo based on arm.
[...]
> 1. In his C++ demo, `Face_Feature_Extract` function always cost 0.1
> second. 
> 
> 2. In my golang code, the `extractFeature`  in load_so.c costs 1.8 or
> 0.1 second, sometimes the caffe function in libcaffe.so spent 1.8
> second, sometimes it is normal.
> 
> 3. If I loop `extractFeature` function 1000 times in `load_so.c`,
> average execution time is 0.1 second.
[...]
> I doubt that cgo1.7 is not stable, anybody can help me?

Does the situation change if, in the goroutine you're measuring your
calls, you do

  runtime.LockOSThread()
  // cgo calling and measuring code here as it exists now.
  defer runtime.UnlockOSThread()

?

The reason I'm asking is that calling C code via cgo from a Go
program works way differently than calling C code from a C program.
In the latter case you just perform "normal" call of a function.
In the former case it looks more like a syscall because the "C side" is
quite alien to the "Go side" (to begin with, they use different stacks).

So the first thing I'd try is to acquire a dedicated OS thread for the
goroutine calling the C side and see if that helps.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to