<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/135964</link>
    <title>MATLAB Central Newsreader - mexCallMATLAB is slow</title>
    <description>Feed for thread: mexCallMATLAB is slow</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Tue, 14 Nov 2006 08:30:46 -0500</pubDate>
      <title>mexCallMATLAB is slow</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/135964#342504</link>
      <author>Nikolai Yu. Zolotykh</author>
      <description>mexCallMATLAB is slower.&lt;br&gt;
&lt;br&gt;
Let&lt;br&gt;
A=zeros(1000);&lt;br&gt;
&lt;br&gt;
I want to do an assignment&lt;br&gt;
&lt;br&gt;
A(1,1) = 1&lt;br&gt;
&lt;br&gt;
In MATLAB environment it requires 0.000027 seconds:&lt;br&gt;
&lt;br&gt;
tic;A(1,1)=1;toc;&lt;br&gt;
Elapsed time is 0.000027 seconds.&lt;br&gt;
&lt;br&gt;
The following mexFucntion does the same:&lt;br&gt;
&lt;br&gt;
/* myassignment.c */&lt;br&gt;
#include &quot;mex.h&quot;&lt;br&gt;
void mexFunction(int nOut, mxArray *pOut[],&lt;br&gt;
		 int nIn, const mxArray *pIn[])&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;mexCallMATLAB(1, pOut, 3, pIn, &quot;subsasgn&quot;);&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
mex myassignment.c&lt;br&gt;
A=zeros(1000);&lt;br&gt;
S.type = '()';&lt;br&gt;
S.subs = {1,1};&lt;br&gt;
A=myassignment(A, S, 1);&lt;br&gt;
A(1,1)&lt;br&gt;
&lt;br&gt;
ans =&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;br&gt;
&lt;br&gt;
But now the time requiered is 0.020915 seconds:&lt;br&gt;
&lt;br&gt;
tic;A=myassignment(A, S, 1);toc;&lt;br&gt;
Elapsed time is 0.020915 seconds.&lt;br&gt;
&lt;br&gt;
It is too slow!&lt;br&gt;
&lt;br&gt;
I suppose in mexCallMATLAB MATLAB copies matrices and does not make&lt;br&gt;
the subscript assignment in-place!&lt;br&gt;
&lt;br&gt;
Any suggestions are welcome.</description>
    </item>
    <item>
      <pubDate>Wed, 15 Nov 2006 10:05:07 -0500</pubDate>
      <title>Re: mexCallMATLAB is slow</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/135964#342642</link>
      <author>Titus Edelhofer</author>
      <description>Hi,&lt;br&gt;
in the mex file you shouldn't use mexCallMATLAB, but&lt;br&gt;
just assign values to the array, something like&lt;br&gt;
&lt;br&gt;
/* copy the array */&lt;br&gt;
pOut[0] = mxDuplicateArray(pIn[0]);&lt;br&gt;
/* get the pointer */&lt;br&gt;
double *ptr = mxGetPr(pOut[0]);&lt;br&gt;
/* do the assignment: */&lt;br&gt;
ptr[0] = 1;&lt;br&gt;
&lt;br&gt;
Titus&lt;br&gt;
&lt;br&gt;
&quot;Nikolai Yu. Zolotykh&quot; &amp;lt;zny@uic.nnov.ru&amp;gt; schrieb im Newsbeitrag &lt;br&gt;
news:ef45ef9.-1@webcrossing.raydaftYaTP...&lt;br&gt;
&amp;gt; mexCallMATLAB is slower.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Let&lt;br&gt;
&amp;gt; A=zeros(1000);&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I want to do an assignment&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; A(1,1) = 1&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; In MATLAB environment it requires 0.000027 seconds:&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; tic;A(1,1)=1;toc;&lt;br&gt;
&amp;gt; Elapsed time is 0.000027 seconds.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; The following mexFucntion does the same:&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; /* myassignment.c */&lt;br&gt;
&amp;gt; #include &quot;mex.h&quot;&lt;br&gt;
&amp;gt; void mexFunction(int nOut, mxArray *pOut[],&lt;br&gt;
&amp;gt; int nIn, const mxArray *pIn[])&lt;br&gt;
&amp;gt; {&lt;br&gt;
&amp;gt;  mexCallMATLAB(1, pOut, 3, pIn, &quot;subsasgn&quot;);&lt;br&gt;
&amp;gt; }&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; mex myassignment.c&lt;br&gt;
&amp;gt; A=zeros(1000);&lt;br&gt;
&amp;gt; S.type = '()';&lt;br&gt;
&amp;gt; S.subs = {1,1};&lt;br&gt;
&amp;gt; A=myassignment(A, S, 1);&lt;br&gt;
&amp;gt; A(1,1)&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; ans =&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;     1&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; But now the time requiered is 0.020915 seconds:&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; tic;A=myassignment(A, S, 1);toc;&lt;br&gt;
&amp;gt; Elapsed time is 0.020915 seconds.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; It is too slow!&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I suppose in mexCallMATLAB MATLAB copies matrices and does not make&lt;br&gt;
&amp;gt; the subscript assignment in-place!&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Any suggestions are welcome. </description>
    </item>
    <item>
      <pubDate>Thu, 16 Nov 2006 02:20:31 -0500</pubDate>
      <title>Re: mexCallMATLAB is slow</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/135964#342838</link>
      <author>Zolotykh</author>
      <description>&amp;gt; in the mex file you shouldn't use mexCallMATLAB, but&lt;br&gt;
&amp;gt; just assign values to the array, something like&lt;br&gt;
&lt;br&gt;
Yes.&lt;br&gt;
But my subscription can be very complicated and I don't want to treat&lt;br&gt;
this by myself.</description>
    </item>
  </channel>
</rss>

