Re: C is it faster than numpy

Martin <[email protected]> Fri, 25 Feb 2022 09:57:05 +0000
Newsgroups gmane.comp.python.org.uk
Message-ID <CAPy44ZUgQ=0__siSk9xhnbQy5APQJy3yXJUFr=CzO20QnXJPPA@mail.gmail.com>
--===============3878107664300450176==
Content-Type: multipart/alternative; boundary="00000000000030962f05d8d4b952"

--00000000000030962f05d8d4b952
Content-Type: text/plain; charset="UTF-8"

Yeah it uses BLAS, you can read about it here
https://markus-beuckelmann.de/blog/boosting-numpy-blas.html

On Fri, 25 Feb 2022, 09:54 SW, <[email protected]> wrote:

> I think it uses fortran (or used to?) but yes, still close to the metal.
>
> Thanks,
> S
>
> On 25/02/2022 10:41, Giorgio Zoppi wrote:
>
> Well,
> numpy is written in C :) Maybe your C is not the numpy equivalent?
> Best Regards,
> Giorgio
>
> Il giorno ven 25 feb 2022 alle ore 09:03 BELAHCENE Abdelkader <
> [email protected]> ha scritto:
>
>> Hi,
>> a lot of people think that C (or C++) is faster than python, yes I agree,
>> but I think that's not the case with numpy, I believe numpy is faster than
>> C, at least in some cases.
>>
>>
>> *Is there another explanation ? Or where can find  a doc speaking  about
>> the subject? *Thanks a lot
>> Regards
>> Numpy implements vectorization for arrays, or I'm wrong. Anyway here is
>> an example Let's look at the following case:
>> Here is the result on my laptop i3:
>>
>> Labs$ *python3 tempsExe.py  50000*
>>   sum with Python: 1250025000 and NumPy 1250025000
>>       time used Python Sum: * 37.28 sec *
>>       time used  Numpy Sum:  *1.85 sec*
>>
>> Labs$ *./tt    50000 *
>>
>>
>> *   CPU  time :7.521730     The value : 1250025000 *
>> --------------------------------------------
>>
>> This is the Python3 program :
>>
>> import timeit as it
>> import numpy as np
>> import sys
>> try :
>> n=eval(sys.argv[1])
>> except:
>> print ("needs integer as argument") ; exit()
>>
>> a=range(1,n+1)
>> b=np.array(a)
>> def func1():     return sum(a)
>> def func2(): return np.sum(b)
>>
>> print(f"sum with Python: {func1()} and NumPy {func2()} ")
>> tm1=it.timeit(stmt=func1, number=n)
>> print(f"time used Python Sum: {round(tm1,2)} sec")
>> tm2=it.timeit(stmt=func2, number=n)
>> print(f"time used  Numpy Sum: {round(tm2,2)} sec")
>>
>> and Here the C program:
>> #include <time.h>
>> #include <stdio.h>
>> #include <stdlib.h>
>> long func1(int n){
>>          long  r=0;
>>         for (int  i=1; i<= n;i++) r+= i;
>>          return r;
>> }
>> int main(int argc, char* argv[]){
>>          clock_t c0, c1;
>>         long v,count; int n;
>>        if ( argc < 2) {
>>               printf("Please give an argument");
>>              return -1;
>>       }
>>     n=atoi(argv[1]);
>>     c0 = clock();
>>      *for (int j=0;j < n;j++) v=func1(n);*
>>      c1 = clock();
>>      printf ("\tCPU  time :%.2f sec", (float)(c1 - c0)/CLOCKS_PER_SEC);
>>      printf("\n\tThe value : %ld\n",  v);
>> }
>> _______________________________________________
>> python-uk mailing list
>> [email protected]
>> https://mail.python.org/mailman/listinfo/python-uk
>>
>
>
> --
> Life is a chess game - Anonymous.
>
> _______________________________________________
> python-uk mailing [email protected]://mail.python.org/mailman/listinfo/python-uk
>
>
> _______________________________________________
> python-uk mailing list
> [email protected]
> https://mail.python.org/mailman/listinfo/python-uk
>

--00000000000030962f05d8d4b952
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"auto">Yeah it uses BLAS, you can read about it here=C2=A0<a hre=
f=3D"https://markus-beuckelmann.de/blog/boosting-numpy-blas.html">https://m=
arkus-beuckelmann.de/blog/boosting-numpy-blas.html</a></div><br><div class=
=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Fri, 25 Feb 2022,=
 09:54 SW, &lt;<a href=3D"mailto:[email protected]">[email protected]=
o.uk</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"mar=
gin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

 =20
  <div>
    <div>I think it uses fortran (or used to?)
      but yes, still close to the metal.<br>
      <br>
      Thanks,<br>
      S<br>
      <br>
      On 25/02/2022 10:41, Giorgio Zoppi wrote:<br>
    </div>
    <blockquote type=3D"cite">
     =20
      <div dir=3D"ltr">Well,
        <div>numpy is written in C :) Maybe your C is not the numpy
          equivalent?</div>
        <div>Best Regards,</div>
        <div>Giorgio</div>
      </div>
      <br>
      <div class=3D"gmail_quote">
        <div dir=3D"ltr" class=3D"gmail_attr">Il giorno ven 25 feb 2022 all=
e
          ore 09:03 BELAHCENE Abdelkader &lt;<a href=3D"mailto:abdelkader.b=
[email protected]" target=3D"_blank" rel=3D"noreferrer">abdelkader.belahcene=
@enst.dz</a>&gt;
          ha scritto:<br>
        </div>
        <blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex=
;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div dir=3D"ltr">Hi,<br>
            a lot of people think that C (or C++) is faster than python,
            yes I agree, but I think that&#39;s not the case with numpy, I
            believe numpy is faster than C, at least in some cases.<br>
            <b>Is there another explanation ?<br>
              Or where can find =C2=A0a doc speaking =C2=A0about the subjec=
t?<br>
            </b>Thanks a lot <br>
            Regards<br>
            Numpy implements vectorization for arrays, or I&#39;m wrong.
            Anyway here is an example Let&#39;s look at the following case:=
<br>
            Here is the result on my laptop i3:<br>
            <br>
            Labs$ <b>python3 tempsExe.py=C2=A0 50000</b> <br>
            =C2=A0 sum with Python: 1250025000 and NumPy 1250025000<br>
            =C2=A0 =C2=A0 =C2=A0 time used Python Sum:=C2=A0<b> 37.28 sec <=
/b><br>
            =C2=A0 =C2=A0 =C2=A0 time used =C2=A0Numpy Sum:=C2=A0 <b>1.85 s=
ec</b><br>
            <br>
            Labs$ <b>./tt =C2=A0=C2=A0 50000 </b><br>
            =C2=A0<b> =C2=A0 CPU =C2=A0time :7.521730<br>
              =C2=A0 =C2=A0 The value : 1250025000 <br>
            </b>--------------------------------------------<br>
            <br>
            This is the Python3 program :<br>
            <br>
            import timeit as it<br>
            import numpy as np<br>
            import sys<br>
            try :<br>
            n=3Deval(sys.argv[1])<br>
            except:<br>
            print (&quot;needs integer as argument&quot;) ; exit()<br>
            <br>
            a=3Drange(1,n+1)<br>
            b=3Dnp.array(a)<br>
            def func1(): =C2=A0 =C2=A0 return sum(a)<br>
            def func2(): return np.sum(b)<br>
            <br>
            print(f&quot;sum with Python: {func1()} and NumPy {func2()} &qu=
ot;)<br>
            tm1=3Dit.timeit(stmt=3Dfunc1, number=3Dn)<br>
            print(f&quot;time used Python Sum: {round(tm1,2)} sec&quot;)<br=
>
            tm2=3Dit.timeit(stmt=3Dfunc2, number=3Dn)<br>
            print(f&quot;time used =C2=A0Numpy Sum: {round(tm2,2)} sec&quot=
;)<br>
            <br>
            and Here the C program:<br>
            #include &lt;time.h&gt;<br>
            #include &lt;stdio.h&gt;<br>
            #include &lt;stdlib.h&gt;<br>
            long func1(int n){<br>
            =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 long =C2=A0r=
=3D0;<br>
            =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (int =C2=A0i=3D1=
; i&lt;=3D n;i++) r+=3D i;<br>
            =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return r;<br>
            }<br>
            int main(int argc, char* argv[]){<br>
            =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 clock_t c0, c1=
; <br>
            =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 long v,count; int n;=
<br>
            =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if ( argc &lt; 2) {<br>
            =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 printf(&quot;Please give an argument&quot;);<br>
            =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 return -1;<br>
            =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }<br>
            =C2=A0=C2=A0=C2=A0 n=3Datoi(argv[1]); <br>
            =C2=A0=C2=A0=C2=A0 c0 =3D clock();<br>
            =C2=A0=C2=A0=C2=A0=C2=A0 <b>for (int j=3D0;j &lt; n;j++) v=3Dfu=
nc1(n);</b><br>
            =C2=A0=C2=A0=C2=A0=C2=A0 c1 =3D clock();<br>
            =C2=A0=C2=A0=C2=A0=C2=A0 printf (&quot;\tCPU =C2=A0time :%.2f s=
ec&quot;, (float)(c1 -
            c0)/CLOCKS_PER_SEC);<br>
            =C2=A0=C2=A0=C2=A0=C2=A0 printf(&quot;\n\tThe value : %ld\n&quo=
t;, =C2=A0v);<br>
            }<br>
          </div>
          _______________________________________________<br>
          python-uk mailing list<br>
          <a href=3D"mailto:[email protected]" target=3D"_blank" rel=3D"=
noreferrer">[email protected]</a><br>
          <a href=3D"https://mail.python.org/mailman/listinfo/python-uk" re=
l=3D"noreferrer noreferrer" target=3D"_blank">https://mail.python.org/mailm=
an/listinfo/python-uk</a><br>
        </blockquote>
      </div>
      <br clear=3D"all">
      <div><br>
      </div>
      -- <br>
      <div dir=3D"ltr">
        <div dir=3D"ltr">Life is a chess game - Anonymous.<br>
        </div>
      </div>
      <br>
      <fieldset></fieldset>
      <pre>_______________________________________________
python-uk mailing list
<a href=3D"mailto:[email protected]" target=3D"_blank" rel=3D"noreferrer=
">[email protected]</a>
<a href=3D"https://mail.python.org/mailman/listinfo/python-uk" target=3D"_b=
lank" rel=3D"noreferrer">https://mail.python.org/mailman/listinfo/python-uk=
</a>
</pre>
    </blockquote>
    <br>
  </div>

_______________________________________________<br>
python-uk mailing list<br>
<a href=3D"mailto:[email protected]" target=3D"_blank" rel=3D"noreferrer=
">[email protected]</a><br>
<a href=3D"https://mail.python.org/mailman/listinfo/python-uk" rel=3D"noref=
errer noreferrer" target=3D"_blank">https://mail.python.org/mailman/listinf=
o/python-uk</a><br>
</blockquote></div>

--00000000000030962f05d8d4b952--

--===============3878107664300450176==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
python-uk mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-uk

--===============3878107664300450176==--