Browse Source

poprawka allreduce

master
Piotr Dergun 7 years ago
parent
commit
5a07553d42
1 changed files with 10 additions and 8 deletions
  1. +10
    -8
      DergunPiotr-WaskoDominik/projekt/sha1breaker.cpp

+ 10
- 8
DergunPiotr-WaskoDominik/projekt/sha1breaker.cpp View File

@ -54,12 +54,15 @@ int main(int argc, char** argv) {
str = new char[maxStrSize]; str = new char[maxStrSize];
if (!rank) czasomierzacz.Begin(); if (!rank) czasomierzacz.Begin();
success = 0;
maxKomb = pow(lexSize,minStrSize-1); maxKomb = pow(lexSize,minStrSize-1);
for(strSize = minStrSize;strSize<=maxStrSize;strSize++){ //petla generujaca jaka ma być długość hasła z którego bedzie generowany hash for(strSize = minStrSize;strSize<=maxStrSize;strSize++){ //petla generujaca jaka ma być długość hasła z którego bedzie generowany hash
maxKomb *= lexSize; maxKomb *= lexSize;
i = rank; i = rank;
MPI_Allreduce(&success,&sumSuccess,1,MPI::SHORT,MPI::SUM,MPI_COMM_WORLD);
if (sumSuccess > 0) break;
while(i<maxKomb){//generowanie różnych haseł while(i<maxKomb){//generowanie różnych haseł
for(int j=0;j<strSize;j++){ for(int j=0;j<strSize;j++){
str[j] = lex[(i >> (offset*j)) & mask]; str[j] = lex[(i >> (offset*j)) & mask];
@ -68,21 +71,20 @@ int main(int argc, char** argv) {
sha1((unsigned char*)str,strSize,result); //obliczanie hash z wygenerowanego wcześniej hasła sha1((unsigned char*)str,strSize,result); //obliczanie hash z wygenerowanego wcześniej hasła
if(strcasecmp(argv[1],result) == 0){ //znalazłem odpowiedz 109 if(strcasecmp(argv[1],result) == 0){ //znalazłem odpowiedz 109
success = 0; //ustwaiem zmienna success na 0
success = 1;
cout<<endl<<" Złamałem hasha: "; cout<<endl<<" Złamałem hasha: ";
for(int l=0;l<strSize;l++) cout<<str[l]; for(int l=0;l<strSize;l++) cout<<str[l];
cout<<endl; cout<<endl;
} }
MPI_Allreduce(&success,&sumSuccess,1,MPI::SHORT,MPI::BAND,MPI_COMM_WORLD); //robię bitowe AND na zmiennej 'success'. wyjdzie 0 gdy 'success' z któregokolwiek procesu jest równy 0
if(!sumSuccess) goto stop; //sumSuccess = 0 wiec ten proces się kończy.
//niech więcej nie liczy po tej pętli while skoro znalazł
if (success > 0)
break;
i+=size; i+=size;
} }
} }
stop:
if (!rank) cout<<" Czas = "<<czasomierzacz.End()<<" ms"<<endl<<endl; if (!rank) cout<<" Czas = "<<czasomierzacz.End()<<" ms"<<endl<<endl;
delete[] result; delete[] result;

Loading…
Cancel
Save