[pypy-dev] Vectorizing numpy traces

Richard Plangger rich at pasra.at
Tue Feb 24 19:18:10 CET 2015


hi,

i'm currently trying to find a way to generate simd code for python
loops that operate on numpy arrays.
The IRC is quite busy so I think I'd rather post it as an email...

I have familiarized myself with pypy and read most of the docs and read
the code in the metainterp to understand how the traces are built.

I translated pypy with --withmod-micronumpy enabled (installed numpy
pypy fork in an virtual env) and gave the jitviewer a try.
Here is a sample program that does not really make sense, but I think it
would contain opportunity to generate SIMD instructions.

```
import numpy
def invoke():
    a = numpy.zeros(1024)
    b = numpy.zeros(1024)
    c = numpy.zeros(1024)
    # (2)
    for i in range(0,1024):
        c[i] = a[i] + b[i]
    # (3)
    c = a + b

if __name__ == '__main__':
    i = 0
    # (1)
    while i < 500:
        invoke()
        i += 1
```

Here is the trace of invoke visible in jitviewer (uploaded to
https://postimg.org/image/kbntluw55/full/).

Here are some questions I have that would really help me to get going:

(1) Is there a better way to get loops hot?

(2) I cannot really figure out what all those trace/loop parameters are.
obviously i can guess some but most of them do not really make sense to
me. Am I missing some settings to be able to display more information
for the trace?
    In addition to that I do not really see any chance to generate a
simd loop for (2). Every array access is (arguably) guarded by an array
index overflow and I think to skip that check would be invalid.

(3) There is no trace generated for this instruction? Does this
internally call a c function?

(4) What in our opinion makes sense to vectorize with simd instructions?
Could you provide some sample loops/code (ranging from simple to complex
loops)?

I would really appreciate any help and/or push into the right direction.

Best,
Richard

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://mail.python.org/pipermail/pypy-dev/attachments/20150224/42668554/attachment.sig>


More information about the pypy-dev mailing list