• [^] # Re: Support de Numpy

    Posté par . En réponse à la dépêche Pythran 0.6 - compilation de noyaux scientifiques écrits en Python. Évalué à 3.

    Ça dépend comment on procède. On peut facilement convertir des array numpy en RawArray et vice versa. Selon les besoins on n'a pas forcément à transférer grand chose.

    Par exemple :

     size = 42
     MyRawArray1 = RawArray(ctypes.c_double, size*1000)
     MyRawArray2 = RawArray(ctypes.c_double, size*1000)
     initargs = (MyRawArray1, MyRawArray2)
     with mp.Pool(processes=4, initializer=initializer, initargs=initargs) as pool:
     pool.map(worker, range(size))

    Avec

     def initializer(arg1, arg2):
     global MyArray1, MyArray2
     MyArray1 = np.ctypeslib.as_array(arg1)
     MyArray2 = np.ctypeslib.as_array(arg2)

    et

     def worker(arg):
     MyArray1[arg*1000:(arg+1)*1000] = DoSomething(arg, 1)
     MyArray2[arg*1000:(arg+1)*1000] = DoSomething(arg, 2)

    De cette façon il n'y a pratiquement rien à transféré sauf le pointeur pour que chaque sous-processus crée son tableau numpy qui utilise la mémoire partagée.