Показать сообщение отдельно

  #8  
Старый 13.02.2008, 23:54
Xserg
Участник форума
Регистрация: 09.12.2006
Сообщений: 135
Провел на форуме:
426226

Репутация: 726
По умолчанию

Цитата:
Сообщение от Xserg  
Зы но 9 лет вместо 10 почти не радует .
Подумалось, нельзя ли еще побыстрее? Оказалось можно.

Необходимые компоненты:

[+] Microsoft Visual Studio 2005 или старше (в смысле поновее)
[+] CUDA for Windows Тут
[-] Видеокарта Nvidia GeForce8800 Ultra … [+]GeForce8500GT (1.8т.руб) в десять раз медленнее
[+] немного мозгов , для написания программы


Вот так не сложно запускается 128 потоков одновременно
Код:
 unsigned int * data;
  cudaMalloc((void**)&data, sizeof(hdata));
  cudaMemcpy(data, hdata, sizeof(hdata), cudaMemcpyHostToDevice);
  md5<<<16,8>>>(data);//16-мультипроцуссоров * 8 шейдеров =128 threads
  cudaMemcpy(hdata, data, sizeof(hdata), cudaMemcpyDeviceToHost);
Так пишется программа для синхронного выполнения 128 шейдерными процессорами.
Код:
__global__ void md5(unsigned int * data)
{
unsigned int Pdata[16];
for (int i=0;i<16;i++) Pdata[i]=data[(blockIdx.x*16 + threadIdx.x*8) +i];
__syncthreads();
unsigned int a=0x67452301;
unsigned int b=0xefcdab89;
unsigned int c=0x98badcfe;
unsigned int d=0x10325476;
a= a + (d ^ (b & (c ^ d))) + Pdata[ 0] + 0xd76aa478; a=(a<< 7)|(a>>(32- 7)); a= b + a;
d= d + (c ^ (a & (b ^ c))) + Pdata[ 1] + 0xe8c7b756; d=(d<<12)|(d>>(32-12)); d= a + d;
c= c + (b ^ (d & (a ^ b))) + Pdata[ 2] + 0x242070db; c=(c<<17)|(c>>(32-17)); c= d + c;
b= b + (a ^ (c & (d ^ a))) + Pdata[ 3] + 0xc1bdceee; b=(b<<22)|(b>>(32-22)); b= c + b;
// и т.д.
Совсем не сложно .

Получаем перебор 320 000 000 паролей в секунду.

Зы 2 месяца вместо 9 лет уже радует.

Последний раз редактировалось Xserg; 14.02.2008 в 00:47..
 
Ответить с цитированием