Je dois générer une grande quantité de nombres aléatoires (de zéro à 1, répartis uniformément).Erreur de segmentation lors de la génération de nombreux nombres aléatoires à l'aide de PGI Fortran
J'avais d'abord une boucle Do et générait des nombres aléatoires à la volée en tant que tel:
Real :: RandomN
Integer :: N
DO N = 1, 10000
Call RANDOM_NUMBER(RandomN)
... Some Code ...
ENDDO
Cependant, je recevais une erreur de segmentation lors de la génération des nombres (si je commentais le « random_number d'appel (RandomN) "ligne, ça a bien fonctionné).
Puis après avoir lu un message sur les forums PGI (http://www.pgroup.com/userforum/viewtopic.php?t=713&highlight=randomseed). J'ai décidé de générer d'abord tous les nombres et de les mettre dans un tableau.
Real :: RndNum(1:10000,1:5)
Integer :: time(8), seed(2)
Call DATE_AND_TIME(values=time) ! Get the current time
seed(1) = time(4) * (360000*time(5) + 6000*time(6) + 100*time(7) + time(8))
Call RANDOM_SEED(PUT=seed)
Call RANDOM_NUMBER(RndNum)
Cependant, cela me donne un segfault tout de suite. Je l'ai essayé une version réduite sans la graine:
Real :: RndNum(1:10000,1:5)
Call RANDOM_NUMBER(RndNum)
Ce travaux pour quelques itérations de mon code et produit alors une erreur de segmentation ainsi. Est-ce que j'utilise une sorte de mémoire? est-il un moyen de l'effacer? ou l'empêcher d'être épuisé?
J'ai aussi essayé:
CALL SYSTEM_CLOCK(count, count_rate, count_max)
CALL srand(count)
DO N=1, CAPN
RndNum(N,1) = rand()
RndNum(N,2) = rand()
RndNum(N,3) = rand()
RndNum(N,4) = rand()
RndNum(N,5) = rand()
ENDDO
Mais cela donne aussi une erreur de segmentation.
Si cela vous donne une erreur de segmentation, affichez le ** code complet **. Tout y compris 'programme' et' fin programme'. Voir [mcve]. Re votre édition: que s'est-il passé quand vous avez essayé ça? –
Le code complet est de quelques 1000 lignes et implique plusieurs fichiers. J'ai isolé le problème et essayé d'expliquer le bit qui cause le problème. –