IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

Parallèlisation calcul sur plusieurs coeurs [Python 3.X]


Sujet :

Calcul scientifique Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2022
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2022
    Messages : 15
    Points : 13
    Points
    13
    Par défaut Parallèlisation calcul sur plusieurs coeurs
    Bonsoir,

    Je cherche à parallèliser du calcul sous python, faire en sorte qu'il soit réparti sur plusieurs coeurs.
    Voilà ce que je veux parallèliser : pow(a,b,c)

    Comment faire? Je précise que j'ai cherché, mais ce que j'ai trouvé ne correspond pas.

    Merci par avance pour votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par blaidddrwg Voir le message
    Comment faire? Je précise que j'ai cherché, mais ce que j'ai trouvé ne correspond pas.
    Paralléliser, c'est exécuter des instructions/opérations "en même temps"...
    Paralléliser pow (une seule opération) est difficile sauf à ré-écrire cette fonction. Par exemple, sous la forme d'une boucle où on exécute n-itérations en parallèle (plutôt qu'en séquentiel).

    Du coup, avant de paralléliser, il faut un algorithme qui permette de...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2022
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2022
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Paralléliser, c'est exécuter des instructions/opérations "en même temps"...
    Paralléliser pow (une seule opération) est difficile sauf à ré-écrire cette fonction. Par exemple, sous la forme d'une boucle où on exécute n-itérations en parallèle (plutôt qu'en séquentiel).

    Du coup, avant de paralléliser, il faut un algorithme qui permette de...

    - W
    Salut wiztricks,

    J'avais bien compris ce qu'étais la parallèlisation, mais merci pour le rappel.
    Effectivement, j'avais pas pensé à une boucle sous forme de n itérations, qui se rapprocherait du coup d'une exponentiation rapide.
    Merci pour l'idée, je vais tenter cette approche !

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 103
    Points : 4 449
    Points
    4 449
    Par défaut
    bonjour

    De même, pas compris la demande puisque pour une seule fonction cela n'a pas de sens (puisque le multi-tache en python a un cout relativement important)

    Pour des opérations cpu, il y a des exemples dans la doc

    Citation Envoyé par blaidddrwg Voir le message
    J'avais bien compris ce qu'étais la parallèlisation
    j'avais pas pensé à une boucle sous forme de n itérations, qui se rapprocherait du coup d'une exponentiation rapide.
    Mais "une boucle sous forme de n itérations" est justement le principe de la parallélisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Pour un besoin, je lance en même temps et mélangé:  # si désire réécrire pow() ?
        sous_calcul1()
        sous_calcul2()
        sous_calcul3()
     
    Pour chaque besoin dans besoins, je lance en même temps:
        calcul1(besoin)
        calcul2(besoin)   # éventuellement
        calcul3(besoin)   # éventuellement
    mais, si ce n'est réécrire la fonction originale, avec ta demande, on ne voit qu'un seul besoin et un seul calcul
    Et pow() est compilée depuis C, la réécrire en python (multi-cpu si un algo le permet), je ne suis pas sûr du gain...
    $moi= ( !== ) ? : ;

  5. #5
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2022
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2022
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par papajoker Voir le message
    bonjour

    De même, pas compris la demande puisque pour une seule fonction cela n'a pas de sens (puisque le multi-tache en python a un cout relativement important)

    Pour des opérations cpu, il y a des exemples dans la doc


    Mais "une boucle sous forme de n itérations" est justement le principe de la parallélisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Pour un besoin, je lance en même temps et mélangé:  # si désire réécrire pow() ?
        sous_calcul1()
        sous_calcul2()
        sous_calcul3()
     
    Pour chaque besoin dans besoins, je lance en même temps:
        calcul1(besoin)
        calcul2(besoin)   # éventuellement
        calcul3(besoin)   # éventuellement
    mais, si ce n'est réécrire la fonction originale, avec ta demande, on ne voit qu'un seul besoin et un seul calcul
    Et pow() est compilée depuis C, la réécrire en python (multi-cpu si un algo le permet), je ne suis pas sûr du gain...
    Bonsoir papajoker,

    J'ai tenté de passer par une boucle de n itérations. Cela prend beaucoup trop de temps, donc pas une bonne solution.
    En réalité, il n'y a pas qu'un seul calcul, je génère une suite, mais je voulais mettre au boulot tous les cpu du pc, sinon cela ne sert à rien d'en avoir plusieurs...
    Dommage donc qu'on ne puisse pas dire à python ce calcul là tu me le réparti sur x coeurs.

    Merci pour vos réponses

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Puisqu'il s'agit de pow(a, b, c), je suppose qu'il s'agit d'exponentiation modulaire: (a**b)%c

    Il existe un algorithme rapide signalé d'ailleurs dans wikipedia:
    https://fr.wikipedia.org/wiki/Exponentiation_modulaire

    Voilà sa traduction en Python:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def powmod(x, y, n):
        """Exponentiation modulaire rapide: (x**y)%n 
                avec x, y et n entiers
        """
        result = 1
        while y>0:
            if y&1>0:
                result = (result*x)%n
            y >>= 1
            x = (x*x)%n  
        return result
    On retrouve, bien sûr, les mêmes résultats qu'avec le "pow" du Python de base. (Attention d'ailleurs avec le "pow" du module math qui, lui, n'est pas modulaire)

    Mais on ne peut pas paralléliser ce calcul, parce que chaque nouveau terme dépend du précédent. Pour le faire, il faudrait que chaque terme puisse être calculé indépendamment, et qu'il suffise de les assembler à la fin. Ce n'est donc pas une insuffisance de Python, mais une forme d'algorithme qui ne permet pas le calcul en parallèle.

    Il ne reste plus qu'à trouver un autre algorithme compatible avec le calcul en parallèle, et vérifier qu'on a bien un avantage de temps de calcul....

    [Edit] J'ajoute un autre exemple qui, lui, est compatible avec le calcul parallèle: on crée une liste de 1000 nombres de 17 chiffres, et on calcule ceux qui sont premiers par la méthode des divisions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    from math import sqrt, floor
    import concurrent.futures
    from random import randint
    from time import perf_counter
     
    ##############################################################################
    def estpremier(n):
        """dit si un nombre est premier (renvoie True ou False) par la méthode des 
           divisions
        """
        if n<2:
            return False
        if n % 2==0:
            return n == 2 # pour les nombres pairs, seul 2 est premier
        d, rac = 3, int(floor(sqrt(n)))
        while d <= rac:
            if n % d == 0:
                return False # diviseur trouvé => n n'est pas premier
            d += 2 # nombre impair suivant
        return True # aucun diviseur trouvé: n est premier
     
    ##############################################################################
    if __name__ == '__main__':
     
        #=========================================================================
        # génère une liste de nombres aléatoires de 15 chiffres
        nbc = 17
        nb = 1000
        nombres = [randint(10**(nbc-1), 10**nbc-1) for i in range(0, nb)]
        print(nombres)
        print()
     
        #=========================================================================
        # calcul utilisant les coeurs disponibles du CPU multicores
        tps1 = perf_counter()
        resultat1 = []
        with concurrent.futures.ProcessPoolExecutor() as executor:
            for nombre, resultat in zip(nombres, executor.map(estpremier, nombres)):
                resultat1.append([nombre, resultat])
        tps1 = perf_counter()-tps1
        print(resultat1)
        print(tps1)
        print()
     
        #========================================================================= 
        # calcul normal dans une boucle
        tps2 = perf_counter()
        resultat2 = []
        for nombre in nombres:
            resultat2.append([nombre, estpremier(nombre)])
        tps2 = perf_counter()-tps2
        print(resultat2)
        print(tps2)
        print()
     
        print(tps2/tps1)
    Un exemple de résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [67922143904539104, 87772736065220510, 69615011683857899, 25165770730986699, 21978760502065494, 21123580725275767, 80787569809942635, 43660943950177691, 50967309895759252, 17292168956708776, 35407952120049313, 45674049678410236, 42597944748176893, 33662886850655682, 74992428939210204, 81579083142464979, 76313621423272884, 73252403610877338, 14160175901574433, 25583289243080513, 69672517743170057, 58783586129131755, 94641649753607215, 42056349104233871, 86394549777693998, 70059584080428276, 91433875647109668, 19802653740366652, 58309042117651810, 80980078016598060, 67835172022179395, 58967574828517576, 40030859397293317, 16889309382042127, 27401057955388684, 92201416989305827, 35488178569427131, 81021614067981074, 58996439518875776, 65931500136973451, 62748947990149502, 23984128913836971, 52648162296251082, 69486895764651994, 45400327725069215, 37212384269628735, 30723439633104173, 81224637666600787, 67540988227502116, 76862964313595163, 33318678015435924, 71869422641775310, 93742731435319841, 42091122914915522, 33640001131868091, 40791662841709433, 88179978435590314, 76902564499148517, 81881823517658131, 28445657098110599, 33222010398462650, 14209809717412539, 42696865783469457, 99361135123328548, 60585262131974839, 41229646925126797, 30909125015312481, 55225446943754004, 34417502722450933, 86198105213031056, 51943531005279717, 22210175126622340, 95240246138683894, 26791740989872079, 71891176835572362, 34425889648392032, 18253043806715846, 65930430265671412, 99434067133198444, 50361567490691476, 36261508992556298, 91220281386930734, 20117521828389989, 60059288401578836, 27373585563973306, 48430310420014074, 27356557076627959, 52608485454477812, 45026179311665405, 41186441977483623, 25693424718449171, 42223699477937401, 53798537221967833, 39115576106813612, 10321373291545877, 94913350994082330, 63559530602551899, 58762689501044193, 70237904700854056, 59865566099754100, 61249450367601823, 48603576315290117, 67084170418850888, 55952292411531044, 90488212831827458, 59780635458504746, 24608336963919016, 79709165793552885, 33309668978226484, 65450306882973604, 97472705198302008, 64133433161151939, 92419708181734171, 15579820046560898, 15718593630000472, 45607709390264898, 49568694950141393, 69643706073351341, 14049064513764846, 36279537413804679, 22860438319832941, 39660233418292819, 40909183287008945, 55071174177692178, 98423134270241196, 15626766598734498, 12762679139361159, 40961161583177919, 66588225169910013, 94040743428195573, 14599108053117685, 15226527390592828, 16998536421817107, 53105229270371631, 95268814762396182, 56863671557209540, 35854192473044815, 32880604634621524, 82950619368121509, 47239128037291294, 75120379125959723, 10265464290650397, 83937670584482235, 18410065025568666, 13790839878975420, 76005727614429666, 53004765733007393, 28310850924575685, 53637592448004980, 96860361230874012, 86444265491744329, 19274988495558872, 35960588246710728, 89701981836340242, 89245979971776263, 40963040417141093, 95282599722913289, 96573642812114804, 95724473818030171, 71187266390750600, 71798253688840889, 33018352602733403, 79685597942351899, 22554575371712282, 43720595617631988, 35761897888371593, 45565171316723941, 62022886311161440, 75173269269107881, 48793921827539945, 91712396514671663, 68741664355018211, 34150528702245845, 56888720146078950, 83168819150854037, 43985612759839805, 57579591479545630, 93118918075494095, 64531501656216563, 24977924213515836, 40307501337761093, 69415579577128121, 83651953427724763, 94707349143778344, 73224645696015513, 23506366802944062, 18679134115109320, 13927002838630252, 40329419963820274, 13245912397953334, 55918728898410898, 39284103300248526, 18306261159424179, 19486770200415355, 17641939603486112, 73130797382938522, 99478908293863386, 95534258454782217, 98162651944367319, 54367884266744241, 93758462379116249, 86161612260807525, 83871345826245115, 35802420442643614, 81246240818603514, 41304583285765987, 47711318411857750, 77390918894179043, 20589482157316383, 49899785553710213, 88655086257138582, 71224074013666021, 93309321194043532, 39928169070770530, 70078342187231926, 24959312931214307, 24491992282721250, 75994422129580367, 20466061388741083, 66341779844873216, 40676828718890876, 64826709071446625, 39675438385512094, 13968801053872170, 68427048082916476, 62497370630557874, 52740558092372782, 74818142846404740, 20448626807831760, 69343289129176293, 15933602684885478, 93724717247589342, 44032215869034762, 13135812309989271, 54917995160612423, 76188277529817413, 39345331611216957, 61528629770554292, 34426165260814307, 15092561656635575, 64278495772530010, 18394236483835010, 59701945623498242, 92970938241182554, 54875489115804253, 21024024392827081, 20475528132875344, 66391936822860605, 47856157566601207, 69184138817701822, 24039192796985295, 16412304518942803, 37818893744103147, 57152917563200274, 20989045783081749, 75198400625035790, 53979368061326525, 72173963335772878, 35713947828069005, 90895884792941991, 33182189024974673, 68005144000313199, 21298448411273021, 29450487764581215, 35647852497823917, 72545551269016961, 40867520273867743, 38190085992543814, 53691441887234212, 90989185333909435, 98685756071351947, 39366025022177631, 23570624311376966, 29352708498673413, 12593854942803448, 20498038929848606, 45273857631364167, 87918864761259376, 30628189354321571, 18726171930197889, 23404333075707768, 81110712820611812, 94288992702571626, 77831741357892030, 44337250065136751, 77192786771626194, 89693660174048932, 11118199976990081, 64603794403151123, 76171868404996156, 18623950861740232, 23559067406028195, 97374710631557361, 22934131761396345, 19527955622589004, 42217290512649048, 18277361816846871, 80321854229327093, 20537058794318665, 97321324799544213, 31013246831419142, 95867637270761296, 56422204894670187, 65626915496858666, 32544532542696717, 96534657321064379, 66346565952060594, 21402189348444696, 88972655249628825, 67515198722619764, 41629108929146441, 76055773106494761, 22919114109056101, 29255594825696286, 50731487003069353, 19343730080485598, 39728129049955151, 18789251552393689, 36083971491361812, 24821456458137678, 83551488518795325, 78759297982865639, 38112231995874369, 40881475682506129, 73227159406016872, 58513082580819626, 37988433512169497, 76204277492186816, 28120854698827770, 52457214675791973, 68344718067703845, 42956137262649471, 57085363842147810, 50889246950044217, 47044470621477112, 37942634865207894, 31651472712845072, 89990178127631157, 14746335016639776, 13799802923913963, 84180141416642210, 16743115442494256, 62009184555774812, 18302381186386708, 24992416652739993, 22880517087635775, 83313767238538027, 27199075370643162, 36947896312059577, 91253552102294774, 60149136135265823, 75320486872002530, 26199293921200202, 18438686718042961, 60172308354288370, 72980667889195192, 86540108798884779, 99786447500619569, 54335475892432158, 46746667629736060, 33435925611516304, 80153344772917145, 21169949408353166, 29861640392434590, 17230181532422843, 76508906979466050, 65059960736276067, 27815499513500955, 49670342193564837, 90008398033174299, 87208792085891292, 28970749377157522, 77280102449697918, 54117588869735982, 55200498424414259, 59252427220264393, 22961246042334218, 49208118999978354, 13309305858360842, 85038312106446285, 55873514555529651, 55045439199725332, 51388929554381859, 79427775835253387, 54104005019265410, 50512103593076127, 77592974690652372, 98304196891747178, 99199625100830325, 10275338591284986, 36177392748451694, 21813746924990563, 99689866374290299, 18901207953468507, 35731579975679809, 96566719507238111, 56483588782785440, 87086667852375635, 85893582424979220, 71152499153978504, 30186325378194863, 26775438004419034, 10823634479413525, 85365024641315641, 71066620016839099, 12543012657620388, 48013774894456504, 60469687664521346, 96244297230182715, 88904866957714180, 90614581769508597, 96446595335645717, 20296728238176577, 66079571447485724, 76596071127117122, 37272222601599553, 18466785295340510, 35088062389808390, 65289937606892032, 40731057568663132, 23116798149052682, 47317530462840102, 22263493391488568, 37354816993659882, 12845326947310548, 85618201475769286, 55990255894675673, 78381026701307873, 26902474854902051, 47135106169696671, 42575651231774958, 27507063853004631, 39050936100286211, 60408712837424005, 11951522054400680, 86263193812740006, 38486593147991519, 97753799075469169, 80394189870771686, 26324522678934950, 12475732752396086, 68192835074138626, 31059441632545362, 45000069074632882, 59168515077166870, 92549304297898636, 86303308993485587, 63114879192692215, 54809660005591876, 26020632786372151, 73273963887396245, 68859714999082980, 77096077380593804, 50493856544496236, 43653850509918246, 40997089012964644, 29913525824167164, 52053433543402250, 40976236965246293, 89663175656450371, 37534773145668837, 59632062959161896, 18695884793405791, 63399810015463763, 74596743385478582, 85625070677782179, 38270561651469784, 89826411732132231, 19798370096249451, 78704553549203380, 39873301708330565, 10699574402339054, 95522212596778978, 89572930997834971, 83807815780200190, 33263535546731833, 90402925824239965, 36529155006807591, 39240524415306355, 66999679698232337, 43662508105230500, 71698659147981585, 29362662385953638, 52575435519892977, 27418917781391978, 59410017148789143, 29280188003791461, 66084752652097389, 25841960277986213, 98825006579746135, 39644684299623459, 77534291859881032, 48691840827184236, 62851165594187782, 43314951887543098, 87068973985823577, 47953902827739118, 25094352836458184, 47254696411541962, 16589193064023995, 96246793613989614, 54925187053889800, 14075057339149736, 29924021121046215, 22670867728409028, 51439387954215085, 38908720396252218, 81169166296898142, 53919416955636744, 57582879915685706, 38663992343861761, 59346121976652252, 73844538648857480, 71693871108577053, 42845112731526856, 26709203724091598, 88758318602279039, 31667792373654880, 39789886704532600, 39776005547304606, 39775234930354092, 63003756935669482, 39888652488326546, 58171198023799734, 25942384564673543, 78508541728229731, 40159199011971438, 83778147321767660, 52162176693411261, 54090316577868340, 37803703373924473, 59189874220326813, 88035323871780156, 93688407378058391, 55382927148227456, 84400566140722913, 97415286927507416, 95272169290230198, 91344803603684771, 89210472664354508, 69816365008372292, 43173918008759103, 84832336930369399, 75214317885334991, 85199360744628011, 31413063720025565, 94344134200263542, 98352561487829480, 40598259187453597, 49117719842685738, 55059390815275021, 50540276157120589, 39857521417232250, 75143673547788230, 75353420434601254, 46569883746414016, 42080565017037258, 54552869020250190, 60891112488666265, 61420698186100899, 97486937180909527, 38937406056040983, 18846040052345205, 68959275987499571, 11782440752629696, 41697586174841860, 84990158708534533, 95818292287270663, 29991506871548244, 19451402140235978, 45518526993224075, 79079418228784871, 11040618821999381, 53102323325362084, 50733803904018648, 73498014757554907, 69201228655030880, 62370223641168357, 22503733282460610, 39664724797040569, 45352727484572843, 45887788662867705, 17526902447205600, 76065947942312122, 98524052641570980, 63296539119822559, 37174287882702345, 81494128977588630, 28685530147863191, 85009153294016121, 60084549238779463, 15498320871840971, 86785035096948998, 85015223857980986, 45806078321654133, 22084475397831608, 85000099026021472, 25625870185141979, 62590422030834342, 10228926253456667, 81559622187297330, 65862213318705788, 66256713108964760, 70257469148357743, 31898687269576959, 10588413719736814, 51073793145930303, 90342715470487829, 90317466794025403, 12702026988996778, 18372644545328864, 72114981013484716, 22194532426386871, 19885792656168439, 83502372025005407, 72942779768830446, 54813347778697970, 63758269619365285, 41979804768219999, 30039408481266675, 64251358954060634, 58091881375650543, 39436553854256340, 10951866526090627, 60074304854625565, 54624325247879789, 56438246454812798, 36462861643551706, 69754098419641119, 18929016565166625, 15316296742349796, 68849658546941733, 45640934028316159, 20643635569482248, 96653969612138179, 28690578829167808, 60958145362010369, 80798570300533910, 72787667282543604, 90533199583412472, 38650171451119863, 38008555070350570, 23978582334226364, 98461489757303455, 59096500295184678, 83315681651451337, 85803029700860810, 77227024478754454, 79487627981920006, 62431273017386039, 51120998290758022, 51672330281154969, 83567862203674838, 40173506419624009, 30728291746121611, 99563297957043496, 60800329801845386, 17901884254014765, 68556389257027448, 95912630539865480, 76679876704997397, 60742098993737762, 65012025123256299, 86300294976242907, 55690743551685932, 92671696369193025, 28306356782277219, 19253859612627965, 63879830389112087, 22256382012150671, 14430187063613738, 91000569492775075, 77397432806289479, 61633016962022803, 59629615871602112, 28678023829350110, 11167308230843851, 48840227799043823, 15193727311576827, 22471281545387616, 45461404669258286, 77243226059552964, 45537702964041096, 96095778808164645, 94914877031782924, 64504300446241860, 36212761003089663, 77248622764242020, 47624942674780656, 50469452409576692, 28809042533295644, 21954557875413189, 13881798877160925, 63540870162943566, 49466363503703912, 27831771804849230, 73351288640206838, 38768761703077918, 22586774149218780, 64707621933931537, 52055603215234290, 14638479835837207, 93631482467095921, 70302206986333981, 94677856909670436, 57576061795674631, 16824125080889175, 87875189598812790, 25244451613731483, 81281124483966854, 87769132998981592, 28240001810118501, 51379291611216487, 25254105648363624, 96353551758313435, 50681277250743358, 66450630296801841, 60718331325447326, 71527954887051430, 67682540836748607, 54812761733580097, 36545376366044756, 54872978162514545, 26016844871745848, 13104468017759763, 70224548959691936, 34352286637641052, 93663124416880380, 25175654090814058, 32766953418067723, 66043245760720509, 93930965348649624, 89607649698119208, 86638530442733221, 32842489293738254, 23032377398584890, 61572201524820460, 49357809925059959, 53256059365959875, 73001620026539664, 55146693934152987, 40352815073535168, 29526353756126382, 13054743348678817, 12288029814466605, 26521403866860128, 78249483706065021, 91031636960216054, 29974391249106281, 75112348369629253, 15900369256248147, 22024671842014712, 57380985077293393, 10922697117025366, 67460709099920889, 43483551987827953, 82893145836578062, 78175399092105571, 77424274040101043, 47635179938125162, 89552530861408072, 55156747278045808, 20627409500776614, 62383708275714154, 77144257798921643, 49376005893481120, 15860772729585811, 41565493198613449, 39325230433825740, 71967162668471650, 16278188498737904, 75902470406203138, 78329282275727098, 56801719649572171, 63863966539397382, 84009128727803965, 68084384286048564, 96577787818040871, 26948414192834835, 95721388745868032, 71277005204461274, 89700888219153777, 16952658096686753, 87697926242508703, 26412400966787939, 27282249011417927, 90493500157339143, 50456750261006821, 88418176569378204, 29942464003478722, 30799859977517543, 84568255081877760, 43111677612301884, 66188358420438131, 72915320336272759, 85536578279263564, 71126066860058380, 27135616147663180, 54142714099466107, 14396058198205285, 69108613839185915, 71122765873551011, 72896273597754243, 96440860253144868, 53514433171175229, 51557653150727406, 54235510238175106, 29950861558702716, 14919042561595700, 27238739198326413, 13781570628135941, 78168779458441349, 66343689260514733, 75508018127020821, 20527911857661729, 68798227241804448, 13351625655390332, 73088597244969559, 83132064087848407, 57276525814188042, 23023639981979382, 60256114863685476, 31877008651891556, 49483984789264665, 22892098100260937, 80511365330247768, 79681829477658329, 44596490563631370, 25263486898265033, 66292917567460213, 57478381580425088, 92468006198652713, 39015974024506419, 34473154276573695, 97061897105504146, 87071238618040473, 77720431323889865, 59132302659522924, 10669190927015204, 11256740626671832, 98722069846733535, 34507253251430446, 82218414543905447, 33234265848334304, 13836071121591539, 95759717731470862, 24986170434953985, 67260863992544401, 73277270542210057, 48829846796741146, 75925697783081731, 30323804193875608, 79404657219951175, 50238793393552637, 31998801682762570, 50610856592221340, 83291684018972002, 92650706900160025, 87758944738512251, 85100297981262365, 27942762063280793, 44352645837630936, 13633068786498189, 45438528835566983, 37192340347331625, 78386262754644672, 35427257708090245, 34880346415593568, 81867581363598678, 59805858449728079, 55576890270919140, 86332675073448105, 27041335782644474, 47578711102782547, 49904529451932690, 91596237158411367, 96560142935830264, 73332604448352465, 20548313805445039, 39385206555417453, 14186732734819809, 54746378453143531, 74328174211174368, 44943123966235694, 99889947330347900, 68227064993677639, 93679290623885631, 19315872061210264, 76898529976630884, 90367447186431392, 49809130759645154, 36166346651660785, 60205482392845746, 39910046730228425, 69397932069332957, 53803542932093746, 70907158949230264, 43112680878807274, 53489900006707312, 27558054813825701, 75207012403253954, 44187326475880857, 64425108333851586, 64380918187399866, 42408355045368087, 20453397558042504, 67649791432356761, 91552583682941240, 24816625123728889, 40833030490593169, 74012467046216805, 37983373677058316, 92729530573630461, 28583305349959759, 35449501429353202, 66909174713843414, 19178197742346010, 43417463420069795, 59609507216009009, 15782456086133903, 68222867003611736, 73279391667235425, 12208835109669290, 65047368654573586, 21397998056695507, 96777549181019719, 58443739683697753, 32108709414404777, 10894163600278093, 40935031933089764, 85176769532542870, 72429284432558097, 92864319926720681, 66628178159303416, 23996839402108456, 88771102849310050, 77753594958575991, 52729156330460194, 69878675854546834, 68002374160641310, 76998328619917623, 66783473404014598, 52847773353398662, 14346689719834911, 30189952559791142, 58904439789628382, 11909838906018539, 72863634319265204, 69381130951365588, 51194640482577056, 73918945760544587, 29307005680981284, 96645423219866388, 87076044821104854, 16688138932263123, 89136119856173416, 93270218554257934, 58054909777304249, 93647295815110423, 48054500750316711, 37482413011789424, 88348184281662198, 32047680045981466, 28770215577183474, 44964920101996894, 18058258123302660, 19079291341582770, 60862751498375234, 45431109195488929, 84007886957648080, 75004493853260812, 35679013245730366, 61819973004405321, 83348498939880275, 23800319397314729, 33004737706997848, 92278424263225303, 31139953069317508, 26066237443984153, 42243827504840855, 27842976989308284, 45242935122964522, 91945789059705818, 75808911570738718, 23052528219908142, 22455660273109293, 14375934306870145, 42461713522668687, 43602943400669574, 92328219211615386, 97873302413248096, 94387408147923117, 19457097852247510, 66813211628344404, 87695424176284909, 86593832357270388, 39554984596723928, 78962719925856685, 66777139145364877, 22047152834229998]
    
    26.212338099999997
    
    184.335153
    
    7.032381174726265
    On voit que ce calcul sur 1000 nombres de 17 chiffres a demandé environ 7 fois moins de temps en utilisant tous les cœurs de mon CPU (qui en a 8).

    On n'a pas toujours un aussi bon résultat, au moins pour 2 raisons:
    - c'est l'OS qui attribue les calculs aux CPU disponibles, et ça dépend donc de l'activité du PC
    - la machinerie pour le calcul parallèle coûte du temps, aussi il faut que le calcul vaille la peine (soit assez lourd).
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  7. #7
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2022
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2022
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonjour

    Puisqu'il s'agit de pow(a, b, c), je suppose qu'il s'agit d'exponentiation modulaire: (a**b)%c

    Il existe un algorithme rapide signalé d'ailleurs dans wikipedia:
    https://fr.wikipedia.org/wiki/Exponentiation_modulaire

    Voilà sa traduction en Python:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def powmod(x, y, n):
        """Exponentiation modulaire rapide: (x**y)%n 
                avec x, y et n entiers
        """
        result = 1
        while y>0:
            if y&1>0:
                result = (result*x)%n
            y >>= 1
            x = (x*x)%n  
        return result
    On retrouve, bien sûr, les mêmes résultats qu'avec le "pow" du Python de base. (Attention d'ailleurs avec le "pow" du module math qui, lui, n'est pas modulaire)

    Mais on ne peut pas paralléliser ce calcul, parce que chaque nouveau terme dépend du précédent. Pour le faire, il faudrait que chaque terme puisse être calculé indépendamment, et qu'il suffise de les assembler à la fin. Ce n'est donc pas une insuffisance de Python, mais une forme d'algorithme qui ne permet pas le calcul en parallèle.

    Il ne reste plus qu'à trouver un autre algorithme compatible avec le calcul en parallèle, et vérifier qu'on a bien un avantage de temps de calcul....

    [Edit] J'ajoute un autre exemple qui, lui, est compatible avec le calcul parallèle: on crée une liste de 1000 nombres de 17 chiffres, et on calcule ceux qui sont premiers par la méthode des divisions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    from math import sqrt, floor
    import concurrent.futures
    from random import randint
    from time import perf_counter
     
    ##############################################################################
    def estpremier(n):
        """dit si un nombre est premier (renvoie True ou False) par la méthode des 
           divisions
        """
        if n<2:
            return False
        if n % 2==0:
            return n == 2 # pour les nombres pairs, seul 2 est premier
        d, rac = 3, int(floor(sqrt(n)))
        while d <= rac:
            if n % d == 0:
                return False # diviseur trouvé => n n'est pas premier
            d += 2 # nombre impair suivant
        return True # aucun diviseur trouvé: n est premier
     
    ##############################################################################
    if __name__ == '__main__':
     
        #=========================================================================
        # génère une liste de nombres aléatoires de 15 chiffres
        nbc = 17
        nb = 1000
        nombres = [randint(10**(nbc-1), 10**nbc-1) for i in range(0, nb)]
        print(nombres)
        print()
     
        #=========================================================================
        # calcul utilisant les coeurs disponibles du CPU multicores
        tps1 = perf_counter()
        resultat1 = []
        with concurrent.futures.ProcessPoolExecutor() as executor:
            for nombre, resultat in zip(nombres, executor.map(estpremier, nombres)):
                resultat1.append([nombre, resultat])
        tps1 = perf_counter()-tps1
        print(resultat1)
        print(tps1)
        print()
     
        #========================================================================= 
        # calcul normal dans une boucle
        tps2 = perf_counter()
        resultat2 = []
        for nombre in nombres:
            resultat2.append([nombre, estpremier(nombre)])
        tps2 = perf_counter()-tps2
        print(resultat2)
        print(tps2)
        print()
     
        print(tps2/tps1)
    Un exemple de résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [67922143904539104, 87772736065220510, 69615011683857899, 25165770730986699, 21978760502065494, 21123580725275767, 80787569809942635, 43660943950177691, 50967309895759252, 17292168956708776, 35407952120049313, 45674049678410236, 42597944748176893, 33662886850655682, 74992428939210204, 81579083142464979, 76313621423272884, 73252403610877338, 14160175901574433, 25583289243080513, 69672517743170057, 58783586129131755, 94641649753607215, 42056349104233871, 86394549777693998, 70059584080428276, 91433875647109668, 19802653740366652, 58309042117651810, 80980078016598060, 67835172022179395, 58967574828517576, 40030859397293317, 16889309382042127, 27401057955388684, 92201416989305827, 35488178569427131, 81021614067981074, 58996439518875776, 65931500136973451, 62748947990149502, 23984128913836971, 52648162296251082, 69486895764651994, 45400327725069215, 37212384269628735, 30723439633104173, 81224637666600787, 67540988227502116, 76862964313595163, 33318678015435924, 71869422641775310, 93742731435319841, 42091122914915522, 33640001131868091, 40791662841709433, 88179978435590314, 76902564499148517, 81881823517658131, 28445657098110599, 33222010398462650, 14209809717412539, 42696865783469457, 99361135123328548, 60585262131974839, 41229646925126797, 30909125015312481, 55225446943754004, 34417502722450933, 86198105213031056, 51943531005279717, 22210175126622340, 95240246138683894, 26791740989872079, 71891176835572362, 34425889648392032, 18253043806715846, 65930430265671412, 99434067133198444, 50361567490691476, 36261508992556298, 91220281386930734, 20117521828389989, 60059288401578836, 27373585563973306, 48430310420014074, 27356557076627959, 52608485454477812, 45026179311665405, 41186441977483623, 25693424718449171, 42223699477937401, 53798537221967833, 39115576106813612, 10321373291545877, 94913350994082330, 63559530602551899, 58762689501044193, 70237904700854056, 59865566099754100, 61249450367601823, 48603576315290117, 67084170418850888, 55952292411531044, 90488212831827458, 59780635458504746, 24608336963919016, 79709165793552885, 33309668978226484, 65450306882973604, 97472705198302008, 64133433161151939, 92419708181734171, 15579820046560898, 15718593630000472, 45607709390264898, 49568694950141393, 69643706073351341, 14049064513764846, 36279537413804679, 22860438319832941, 39660233418292819, 40909183287008945, 55071174177692178, 98423134270241196, 15626766598734498, 12762679139361159, 40961161583177919, 66588225169910013, 94040743428195573, 14599108053117685, 15226527390592828, 16998536421817107, 53105229270371631, 95268814762396182, 56863671557209540, 35854192473044815, 32880604634621524, 82950619368121509, 47239128037291294, 75120379125959723, 10265464290650397, 83937670584482235, 18410065025568666, 13790839878975420, 76005727614429666, 53004765733007393, 28310850924575685, 53637592448004980, 96860361230874012, 86444265491744329, 19274988495558872, 35960588246710728, 89701981836340242, 89245979971776263, 40963040417141093, 95282599722913289, 96573642812114804, 95724473818030171, 71187266390750600, 71798253688840889, 33018352602733403, 79685597942351899, 22554575371712282, 43720595617631988, 35761897888371593, 45565171316723941, 62022886311161440, 75173269269107881, 48793921827539945, 91712396514671663, 68741664355018211, 34150528702245845, 56888720146078950, 83168819150854037, 43985612759839805, 57579591479545630, 93118918075494095, 64531501656216563, 24977924213515836, 40307501337761093, 69415579577128121, 83651953427724763, 94707349143778344, 73224645696015513, 23506366802944062, 18679134115109320, 13927002838630252, 40329419963820274, 13245912397953334, 55918728898410898, 39284103300248526, 18306261159424179, 19486770200415355, 17641939603486112, 73130797382938522, 99478908293863386, 95534258454782217, 98162651944367319, 54367884266744241, 93758462379116249, 86161612260807525, 83871345826245115, 35802420442643614, 81246240818603514, 41304583285765987, 47711318411857750, 77390918894179043, 20589482157316383, 49899785553710213, 88655086257138582, 71224074013666021, 93309321194043532, 39928169070770530, 70078342187231926, 24959312931214307, 24491992282721250, 75994422129580367, 20466061388741083, 66341779844873216, 40676828718890876, 64826709071446625, 39675438385512094, 13968801053872170, 68427048082916476, 62497370630557874, 52740558092372782, 74818142846404740, 20448626807831760, 69343289129176293, 15933602684885478, 93724717247589342, 44032215869034762, 13135812309989271, 54917995160612423, 76188277529817413, 39345331611216957, 61528629770554292, 34426165260814307, 15092561656635575, 64278495772530010, 18394236483835010, 59701945623498242, 92970938241182554, 54875489115804253, 21024024392827081, 20475528132875344, 66391936822860605, 47856157566601207, 69184138817701822, 24039192796985295, 16412304518942803, 37818893744103147, 57152917563200274, 20989045783081749, 75198400625035790, 53979368061326525, 72173963335772878, 35713947828069005, 90895884792941991, 33182189024974673, 68005144000313199, 21298448411273021, 29450487764581215, 35647852497823917, 72545551269016961, 40867520273867743, 38190085992543814, 53691441887234212, 90989185333909435, 98685756071351947, 39366025022177631, 23570624311376966, 29352708498673413, 12593854942803448, 20498038929848606, 45273857631364167, 87918864761259376, 30628189354321571, 18726171930197889, 23404333075707768, 81110712820611812, 94288992702571626, 77831741357892030, 44337250065136751, 77192786771626194, 89693660174048932, 11118199976990081, 64603794403151123, 76171868404996156, 18623950861740232, 23559067406028195, 97374710631557361, 22934131761396345, 19527955622589004, 42217290512649048, 18277361816846871, 80321854229327093, 20537058794318665, 97321324799544213, 31013246831419142, 95867637270761296, 56422204894670187, 65626915496858666, 32544532542696717, 96534657321064379, 66346565952060594, 21402189348444696, 88972655249628825, 67515198722619764, 41629108929146441, 76055773106494761, 22919114109056101, 29255594825696286, 50731487003069353, 19343730080485598, 39728129049955151, 18789251552393689, 36083971491361812, 24821456458137678, 83551488518795325, 78759297982865639, 38112231995874369, 40881475682506129, 73227159406016872, 58513082580819626, 37988433512169497, 76204277492186816, 28120854698827770, 52457214675791973, 68344718067703845, 42956137262649471, 57085363842147810, 50889246950044217, 47044470621477112, 37942634865207894, 31651472712845072, 89990178127631157, 14746335016639776, 13799802923913963, 84180141416642210, 16743115442494256, 62009184555774812, 18302381186386708, 24992416652739993, 22880517087635775, 83313767238538027, 27199075370643162, 36947896312059577, 91253552102294774, 60149136135265823, 75320486872002530, 26199293921200202, 18438686718042961, 60172308354288370, 72980667889195192, 86540108798884779, 99786447500619569, 54335475892432158, 46746667629736060, 33435925611516304, 80153344772917145, 21169949408353166, 29861640392434590, 17230181532422843, 76508906979466050, 65059960736276067, 27815499513500955, 49670342193564837, 90008398033174299, 87208792085891292, 28970749377157522, 77280102449697918, 54117588869735982, 55200498424414259, 59252427220264393, 22961246042334218, 49208118999978354, 13309305858360842, 85038312106446285, 55873514555529651, 55045439199725332, 51388929554381859, 79427775835253387, 54104005019265410, 50512103593076127, 77592974690652372, 98304196891747178, 99199625100830325, 10275338591284986, 36177392748451694, 21813746924990563, 99689866374290299, 18901207953468507, 35731579975679809, 96566719507238111, 56483588782785440, 87086667852375635, 85893582424979220, 71152499153978504, 30186325378194863, 26775438004419034, 10823634479413525, 85365024641315641, 71066620016839099, 12543012657620388, 48013774894456504, 60469687664521346, 96244297230182715, 88904866957714180, 90614581769508597, 96446595335645717, 20296728238176577, 66079571447485724, 76596071127117122, 37272222601599553, 18466785295340510, 35088062389808390, 65289937606892032, 40731057568663132, 23116798149052682, 47317530462840102, 22263493391488568, 37354816993659882, 12845326947310548, 85618201475769286, 55990255894675673, 78381026701307873, 26902474854902051, 47135106169696671, 42575651231774958, 27507063853004631, 39050936100286211, 60408712837424005, 11951522054400680, 86263193812740006, 38486593147991519, 97753799075469169, 80394189870771686, 26324522678934950, 12475732752396086, 68192835074138626, 31059441632545362, 45000069074632882, 59168515077166870, 92549304297898636, 86303308993485587, 63114879192692215, 54809660005591876, 26020632786372151, 73273963887396245, 68859714999082980, 77096077380593804, 50493856544496236, 43653850509918246, 40997089012964644, 29913525824167164, 52053433543402250, 40976236965246293, 89663175656450371, 37534773145668837, 59632062959161896, 18695884793405791, 63399810015463763, 74596743385478582, 85625070677782179, 38270561651469784, 89826411732132231, 19798370096249451, 78704553549203380, 39873301708330565, 10699574402339054, 95522212596778978, 89572930997834971, 83807815780200190, 33263535546731833, 90402925824239965, 36529155006807591, 39240524415306355, 66999679698232337, 43662508105230500, 71698659147981585, 29362662385953638, 52575435519892977, 27418917781391978, 59410017148789143, 29280188003791461, 66084752652097389, 25841960277986213, 98825006579746135, 39644684299623459, 77534291859881032, 48691840827184236, 62851165594187782, 43314951887543098, 87068973985823577, 47953902827739118, 25094352836458184, 47254696411541962, 16589193064023995, 96246793613989614, 54925187053889800, 14075057339149736, 29924021121046215, 22670867728409028, 51439387954215085, 38908720396252218, 81169166296898142, 53919416955636744, 57582879915685706, 38663992343861761, 59346121976652252, 73844538648857480, 71693871108577053, 42845112731526856, 26709203724091598, 88758318602279039, 31667792373654880, 39789886704532600, 39776005547304606, 39775234930354092, 63003756935669482, 39888652488326546, 58171198023799734, 25942384564673543, 78508541728229731, 40159199011971438, 83778147321767660, 52162176693411261, 54090316577868340, 37803703373924473, 59189874220326813, 88035323871780156, 93688407378058391, 55382927148227456, 84400566140722913, 97415286927507416, 95272169290230198, 91344803603684771, 89210472664354508, 69816365008372292, 43173918008759103, 84832336930369399, 75214317885334991, 85199360744628011, 31413063720025565, 94344134200263542, 98352561487829480, 40598259187453597, 49117719842685738, 55059390815275021, 50540276157120589, 39857521417232250, 75143673547788230, 75353420434601254, 46569883746414016, 42080565017037258, 54552869020250190, 60891112488666265, 61420698186100899, 97486937180909527, 38937406056040983, 18846040052345205, 68959275987499571, 11782440752629696, 41697586174841860, 84990158708534533, 95818292287270663, 29991506871548244, 19451402140235978, 45518526993224075, 79079418228784871, 11040618821999381, 53102323325362084, 50733803904018648, 73498014757554907, 69201228655030880, 62370223641168357, 22503733282460610, 39664724797040569, 45352727484572843, 45887788662867705, 17526902447205600, 76065947942312122, 98524052641570980, 63296539119822559, 37174287882702345, 81494128977588630, 28685530147863191, 85009153294016121, 60084549238779463, 15498320871840971, 86785035096948998, 85015223857980986, 45806078321654133, 22084475397831608, 85000099026021472, 25625870185141979, 62590422030834342, 10228926253456667, 81559622187297330, 65862213318705788, 66256713108964760, 70257469148357743, 31898687269576959, 10588413719736814, 51073793145930303, 90342715470487829, 90317466794025403, 12702026988996778, 18372644545328864, 72114981013484716, 22194532426386871, 19885792656168439, 83502372025005407, 72942779768830446, 54813347778697970, 63758269619365285, 41979804768219999, 30039408481266675, 64251358954060634, 58091881375650543, 39436553854256340, 10951866526090627, 60074304854625565, 54624325247879789, 56438246454812798, 36462861643551706, 69754098419641119, 18929016565166625, 15316296742349796, 68849658546941733, 45640934028316159, 20643635569482248, 96653969612138179, 28690578829167808, 60958145362010369, 80798570300533910, 72787667282543604, 90533199583412472, 38650171451119863, 38008555070350570, 23978582334226364, 98461489757303455, 59096500295184678, 83315681651451337, 85803029700860810, 77227024478754454, 79487627981920006, 62431273017386039, 51120998290758022, 51672330281154969, 83567862203674838, 40173506419624009, 30728291746121611, 99563297957043496, 60800329801845386, 17901884254014765, 68556389257027448, 95912630539865480, 76679876704997397, 60742098993737762, 65012025123256299, 86300294976242907, 55690743551685932, 92671696369193025, 28306356782277219, 19253859612627965, 63879830389112087, 22256382012150671, 14430187063613738, 91000569492775075, 77397432806289479, 61633016962022803, 59629615871602112, 28678023829350110, 11167308230843851, 48840227799043823, 15193727311576827, 22471281545387616, 45461404669258286, 77243226059552964, 45537702964041096, 96095778808164645, 94914877031782924, 64504300446241860, 36212761003089663, 77248622764242020, 47624942674780656, 50469452409576692, 28809042533295644, 21954557875413189, 13881798877160925, 63540870162943566, 49466363503703912, 27831771804849230, 73351288640206838, 38768761703077918, 22586774149218780, 64707621933931537, 52055603215234290, 14638479835837207, 93631482467095921, 70302206986333981, 94677856909670436, 57576061795674631, 16824125080889175, 87875189598812790, 25244451613731483, 81281124483966854, 87769132998981592, 28240001810118501, 51379291611216487, 25254105648363624, 96353551758313435, 50681277250743358, 66450630296801841, 60718331325447326, 71527954887051430, 67682540836748607, 54812761733580097, 36545376366044756, 54872978162514545, 26016844871745848, 13104468017759763, 70224548959691936, 34352286637641052, 93663124416880380, 25175654090814058, 32766953418067723, 66043245760720509, 93930965348649624, 89607649698119208, 86638530442733221, 32842489293738254, 23032377398584890, 61572201524820460, 49357809925059959, 53256059365959875, 73001620026539664, 55146693934152987, 40352815073535168, 29526353756126382, 13054743348678817, 12288029814466605, 26521403866860128, 78249483706065021, 91031636960216054, 29974391249106281, 75112348369629253, 15900369256248147, 22024671842014712, 57380985077293393, 10922697117025366, 67460709099920889, 43483551987827953, 82893145836578062, 78175399092105571, 77424274040101043, 47635179938125162, 89552530861408072, 55156747278045808, 20627409500776614, 62383708275714154, 77144257798921643, 49376005893481120, 15860772729585811, 41565493198613449, 39325230433825740, 71967162668471650, 16278188498737904, 75902470406203138, 78329282275727098, 56801719649572171, 63863966539397382, 84009128727803965, 68084384286048564, 96577787818040871, 26948414192834835, 95721388745868032, 71277005204461274, 89700888219153777, 16952658096686753, 87697926242508703, 26412400966787939, 27282249011417927, 90493500157339143, 50456750261006821, 88418176569378204, 29942464003478722, 30799859977517543, 84568255081877760, 43111677612301884, 66188358420438131, 72915320336272759, 85536578279263564, 71126066860058380, 27135616147663180, 54142714099466107, 14396058198205285, 69108613839185915, 71122765873551011, 72896273597754243, 96440860253144868, 53514433171175229, 51557653150727406, 54235510238175106, 29950861558702716, 14919042561595700, 27238739198326413, 13781570628135941, 78168779458441349, 66343689260514733, 75508018127020821, 20527911857661729, 68798227241804448, 13351625655390332, 73088597244969559, 83132064087848407, 57276525814188042, 23023639981979382, 60256114863685476, 31877008651891556, 49483984789264665, 22892098100260937, 80511365330247768, 79681829477658329, 44596490563631370, 25263486898265033, 66292917567460213, 57478381580425088, 92468006198652713, 39015974024506419, 34473154276573695, 97061897105504146, 87071238618040473, 77720431323889865, 59132302659522924, 10669190927015204, 11256740626671832, 98722069846733535, 34507253251430446, 82218414543905447, 33234265848334304, 13836071121591539, 95759717731470862, 24986170434953985, 67260863992544401, 73277270542210057, 48829846796741146, 75925697783081731, 30323804193875608, 79404657219951175, 50238793393552637, 31998801682762570, 50610856592221340, 83291684018972002, 92650706900160025, 87758944738512251, 85100297981262365, 27942762063280793, 44352645837630936, 13633068786498189, 45438528835566983, 37192340347331625, 78386262754644672, 35427257708090245, 34880346415593568, 81867581363598678, 59805858449728079, 55576890270919140, 86332675073448105, 27041335782644474, 47578711102782547, 49904529451932690, 91596237158411367, 96560142935830264, 73332604448352465, 20548313805445039, 39385206555417453, 14186732734819809, 54746378453143531, 74328174211174368, 44943123966235694, 99889947330347900, 68227064993677639, 93679290623885631, 19315872061210264, 76898529976630884, 90367447186431392, 49809130759645154, 36166346651660785, 60205482392845746, 39910046730228425, 69397932069332957, 53803542932093746, 70907158949230264, 43112680878807274, 53489900006707312, 27558054813825701, 75207012403253954, 44187326475880857, 64425108333851586, 64380918187399866, 42408355045368087, 20453397558042504, 67649791432356761, 91552583682941240, 24816625123728889, 40833030490593169, 74012467046216805, 37983373677058316, 92729530573630461, 28583305349959759, 35449501429353202, 66909174713843414, 19178197742346010, 43417463420069795, 59609507216009009, 15782456086133903, 68222867003611736, 73279391667235425, 12208835109669290, 65047368654573586, 21397998056695507, 96777549181019719, 58443739683697753, 32108709414404777, 10894163600278093, 40935031933089764, 85176769532542870, 72429284432558097, 92864319926720681, 66628178159303416, 23996839402108456, 88771102849310050, 77753594958575991, 52729156330460194, 69878675854546834, 68002374160641310, 76998328619917623, 66783473404014598, 52847773353398662, 14346689719834911, 30189952559791142, 58904439789628382, 11909838906018539, 72863634319265204, 69381130951365588, 51194640482577056, 73918945760544587, 29307005680981284, 96645423219866388, 87076044821104854, 16688138932263123, 89136119856173416, 93270218554257934, 58054909777304249, 93647295815110423, 48054500750316711, 37482413011789424, 88348184281662198, 32047680045981466, 28770215577183474, 44964920101996894, 18058258123302660, 19079291341582770, 60862751498375234, 45431109195488929, 84007886957648080, 75004493853260812, 35679013245730366, 61819973004405321, 83348498939880275, 23800319397314729, 33004737706997848, 92278424263225303, 31139953069317508, 26066237443984153, 42243827504840855, 27842976989308284, 45242935122964522, 91945789059705818, 75808911570738718, 23052528219908142, 22455660273109293, 14375934306870145, 42461713522668687, 43602943400669574, 92328219211615386, 97873302413248096, 94387408147923117, 19457097852247510, 66813211628344404, 87695424176284909, 86593832357270388, 39554984596723928, 78962719925856685, 66777139145364877, 22047152834229998]
    
    26.212338099999997
    
    184.335153
    
    7.032381174726265
    On voit que ce calcul sur 1000 nombres de 17 chiffres a demandé environ 7 fois moins de temps en utilisant tous les cœurs de mon CPU (qui en a 8).

    On n'a pas toujours un aussi bon résultat, au moins pour 2 raisons:
    - c'est l'OS qui attribue les calculs aux CPU disponibles, et ça dépend donc de l'activité du PC
    - la machinerie pour le calcul parallèle coûte du temps, aussi il faut que le calcul vaille la peine (soit assez lourd).
    Bonjour,

    J'utilise en fait déjà l'exponentiation rapide (mais merci pour le lien) ainsi que la lib gmpy2 qui a l'avantage d'être ultra rapide !
    Bêtement, je m'étais dit : la charge d'un calcul est bien répartie sur x cpu, alors pourquoi ne pas répartir la charge calcul sur x coeurs ?
    A priori, cela est impossible (pour ce calcul).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programmation Concurente sur plusieurs coeurs
    Par Beginer dans le forum Windows
    Réponses: 4
    Dernier message: 25/01/2010, 18h50
  2. étendre un calcul sur plusieurs feuille
    Par braquin dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/10/2009, 15h48
  3. [Débutant] Calcul sur plusieurs fichiers MAT
    Par colocolo dans le forum MATLAB
    Réponses: 25
    Dernier message: 03/03/2009, 23h45
  4. Fonction de calcul sur plusieurs lignes
    Par babsy dans le forum SQL
    Réponses: 1
    Dernier message: 13/11/2007, 11h34
  5. Calcul sur plusieurs champs similaires
    Par Zebulonn dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/05/2005, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo