From: Maurice.Bremond@inria.fr (Maurice Bremond)
To: Jan Kybic <kybic@fel.cvut.cz>
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] Ocaml <-> Matlab interface
Date: Thu, 05 Feb 2009 15:48:32 +0100 [thread overview]
Message-ID: <rxsiqnpey7z.fsf@inria.fr> (raw)
In-Reply-To: <87myd2nzlm.fsf@fel.cvut.cz> (Jan Kybic's message of "Wed\, 04 Feb 2009 13\:41\:41 +0100")
Hello,
>I am posting below the relevant excerpts
>from my code in case somebody can spot the problem.
Unfortunately, if I try one of the two tests (*1*) and (*2*) below, I
cannot reproduce your segfault (ocamlmex 2.1.0 and my Matlab version
is 7.7.0.471 (R2008b))
What you can do is :
- run these two tests
(simply replace example/camlp5o/hello.ml by each of them)
for (*1*) at the Matlab prompt :
>> for i = 1:10000; hello(hello(hello(hello(single([1:1000,1:1000])))));end
(the goal is to trigger the caml gc several times without calling
it explicitly)
(*2*) :
>> for i = 1:1000; hello; end
- if you have not already ran the test suite :
make test
and at Matlab prompt :
>> cd <ocamlmexdir>/test
>> api('check')
Everything should be ok.
- put some Gc.full_major() in your MEX-files to see if a crash occurs
(it should not!).
Other hints :
- if you use Matlab callbacks (Mex.mexCallMATLAB) you can have some
segmentation violations if you call Matlab function with a wrong
number of arguments (I think this is a Matlab problem that cannot
be prevented) see (*3*)
- any interruption during Mex.mexCallMATLAB may be fatal to the
Matlab session.
- if you do not use specific Matlab callbacks, maybe have a try with
Octave (>=3.0) (./configure BASE=OCTAVE; make ; make install)
- I had segv problems with an old version of Matlab (<= ~R2006x).
Please, mail me directly about this (there is no ocamlmex user list)
and if you can, send me a full segv example.
>Matlab and Ocaml run as separate processes and communicate using Unix
>named pipes (created using mkfifo)
This sounds like the Matlab engine api :
http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/matlab_external/f29148.html
A limited binding to the Matlab engine api is in ocamlmex, under
src/eng. It has not really been tested and maybe it can be improved.
Maurice Bremond
Examples:
(*1*)
open Bigarray
let _ =
Mex.mexRegister (function
| a when Array.length(a) > 1 || Array.length(a) = 0 -> [| |]
| a -> let speedm = a.(0) in
match Mex.mxGetData speedm with
| Mex.FLOAT32 s ->
(try
let x = array2_of_genarray s in
let dims = Mex.mxGetDimensions speedm in
let r = Mex.mxCreateNumericArray [| dims.(0) ; dims.(1) |]
Mex.SINGLE_CLASS Mex.REAL in
Mex.mxSetData r (Mex.FLOAT32 s);
[| r |]
with Invalid_argument _ ->
failwith "Input is not a 2D array.")
| _ -> failwith "Input is not float32 (class single).")
(*2*)
open Bigarray
let _ =
Mex.mexRegister (function
| [| |] ->
let n,m = 1000,1000 in
let r = Mex.mxCreateNumericArray [| n ; m |] Mex.DOUBLE_CLASS Mex.REAL in
let a = Array2.create float64 fortran_layout n m in
for j = 1 to m do
for i = 1 to n do
a.{i,j} <- float_of_int (i+j) ;
done ;
done ;
Mex.mxSetData r (Mex.FLOAT64 (genarray_of_array2 a)) ;
[| r |]
| _ -> failwith "bad args")
(*3*)
(* segmentation violation *)
let _ =
mexRegister
(function
[| a; b; c |] ->
mexCallMATLAB 3 [| (mexCallMATLAB 4 [| a; |] "plus").(0); c |]
"mtimes"
| _ -> raise (Failure "bad args"))
prev parent reply other threads:[~2009-02-05 14:49 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-04 12:41 Jan Kybic
2009-02-05 14:48 ` Maurice Bremond [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=rxsiqnpey7z.fsf@inria.fr \
--to=maurice.bremond@inria.fr \
--cc=caml-list@yquem.inria.fr \
--cc=kybic@fel.cvut.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox