Алгоритм эфективного нагрева проца...

Тема в разделе "WASM.ELECTRONICS", создана пользователем AndreyATC, 18 май 2007.

  1. AndreyATC

    AndreyATC New Member

    Публикаций:
    0
    Регистрация:
    16 май 2007
    Сообщения:
    60
    Все наверно видели или слышали о программах тестирования розогнаных процов!
    Основная задача которых нагрев процессора.
    Вот я и задался идеей написать алгоритм нагрева: натыкал div’ов в цикл и ничего не вышло((( проц почти не нагрелся!
    Вопрос как эфективно его нагревать? Какие алгоритмы при этом используются?
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Была тема такая. Ищи.
     
  3. AndreyATC

    AndreyATC New Member

    Публикаций:
    0
    Регистрация:
    16 май 2007
    Сообщения:
    60
    asd
    да я искал нашол 2 топа:
    http://www.wasm.ru/forum/viewtopic.php?id=13206
    http://www.wasm.ru/forum/viewtopic.php?pid=143958
     
  4. AndreyATC

    AndreyATC New Member

    Публикаций:
    0
    Регистрация:
    16 май 2007
    Сообщения:
    60
    asd
    но по теме там нету((((
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
  6. AndreyATC

    AndreyATC New Member

    Публикаций:
    0
    Регистрация:
    16 май 2007
    Сообщения:
    60
    leo
    идеи там конечно неплохие но самый теплый алгоритм греет всего до 46градусов, а вот S&M до 53:dntknw:
    как оно достигает такого результата непонятно...
     
  7. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    Как говорится, "отладчик в зубы и вперед" (c)
    Вот это я выдрал из S&M одной из первых версий когда-то давно:
    Код (Text):
    1. {$APPTYPE CONSOLE}
    2. {$I-,O+,Q-,R-,S-}
    3.  
    4. var t1, t2 : int64;
    5.  
    6. begin
    7.   repeat
    8.     asm
    9.       dq 9090909090909090h,9090909090909090h,9090909090909090h,9090909090909090h
    10.       dq 9090909090909090h,9090909090909090h;dw 9090h
    11.       pushad
    12.       rdtsc
    13.       mov dword ptr t1,eax
    14.       mov dword ptr t1[4],edx
    15.       push ebp
    16.       mov ebp,esp
    17.       and ebp,-128
    18.       sub esp,256
    19.       fldpi
    20.       fldpi
    21.       fst qword ptr [ebp]
    22.       fst qword ptr [ebp-8]
    23.       fst qword ptr [ebp-16]
    24.       mov ecx,1000000000
    25.       xor eax,eax
    26.       xor ebx,ebx
    27.       xor edi,edi
    28.       @burn:     //align 256
    29.         xor edi,ebx
    30.         db $DD,$44,$2F,0//fld qword ptr [ebp+edi+0]
    31.         fmul qword ptr [ebp+ebx*2-8]
    32.         fmul dword ptr [ebp+edi*4-16]
    33.         fxch st(1)
    34.         fsubp
    35.         fxch st(1)
    36.         dec ecx
    37.       jnz @burn
    38.       fstp qword ptr [ebp]
    39.       fstp qword ptr [ebp]
    40.       add esp,256
    41.       pop ebp
    42.       rdtsc
    43.       mov dword ptr t2,eax
    44.       mov dword ptr t2[4],edx
    45.       popad
    46.     end;
    47.     write(#13'CPU usage: ', 3e11 / (t2 - t1):5:1, '%');
    48.   until false;
    49. end.
    Как видишь, fmul рулит ;)
     
  8. AndreyATC

    AndreyATC New Member

    Публикаций:
    0
    Регистрация:
    16 май 2007
    Сообщения:
    60
    Ща попробую..
     
  9. AndreyATC

    AndreyATC New Member

    Публикаций:
    0
    Регистрация:
    16 май 2007
    Сообщения:
    60
    Atlantic
    :dntknw: видно таки не судьба Єтот код как и кид на форуме:
    Код (Text):
    1. @loop:
    2.         fadd     [a2]
    3.         FXCH    ST(2)
    4.         fsub     [b2]
    5.         FXCH    ST(2)
    6.  
    7.         add eax, ecx
    8.         add edx, ecx
    9.         add EDI, Ecx
    10.         add eax, ecx
    11.         add edx, ecx
    12.         add EDI, Ecx
    13.         dec     ECX
    14.    JNZ     @Loop
    не греют больше 46 градусов, причем fmul греет хуже:dntknw:
     
  10. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    Тот код, который я привел, предназначался для Athlon XP, это во-первых, а во-вторых тот цикл нужно было выровнять по границе 256 байт. Если это не поможет, тогда аттачишься отладчиком к S&M, и когда он приаттачится, один из потоков с вероятностью 99.9% будет остановлен как раз на цикле разогрева, предназначенном для твоего проца ;) Я именно так его и выдрал.
     
  11. AndreyATC

    AndreyATC New Member

    Публикаций:
    0
    Регистрация:
    16 май 2007
    Сообщения:
    60
    Atlantic
    понятно) я тестил на P4 Prescott
    может потому так и вышло(
     
  12. AndreyATC

    AndreyATC New Member

    Публикаций:
    0
    Регистрация:
    16 май 2007
    Сообщения:
    60
    Atlantic
    но самое интересное то что S&M бегает по тому цыклу что ты описал выше)
     
  13. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Имхо, одной арифметикой, без активного использования памяти современные процы особо не разогреешь. У них же бОльшая часть транзисторов на кеш приходится. Вот его и надо прогревать.
     
  14. AndreyATC

    AndreyATC New Member

    Публикаций:
    0
    Регистрация:
    16 май 2007
    Сообщения:
    60
    Ustus
    єто типа fld fst mov movapd....?
     
  15. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    AndreyATC
    Да, но (видимо) лучше не просто читать пару значений из L1, как это делается в вышеприведенном коде с fmul, а читать по одному дворду из кэш линейки так чтобы суммарный размер прочитанных данных был не меньше удвоенного размера L1 (но ес-но умещался в L2). Тогда при каждом чтении будет задействована пересылка целой кэш-линейки из L2 в L1.
     
  16. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    Не думаю, что это будет эффективно - пересылка из L1 в L2 займет от 10 тактов. А тот цикл на Атлоне выполняется с макс. скоростью - 9 инструкций за 3 такта, причем задействованы и ALU, и FPU. В этом секрет его эффективности.
     
  17. AndreyATC

    AndreyATC New Member

    Публикаций:
    0
    Регистрация:
    16 май 2007
    Сообщения:
    60
    Есть такя прога burnP6!
    есть ее исходный код:
    Код (Text):
    1. #  cpuburn-1.4:  burnP6   CPU Loading Utility
    2. #  Copyright 1999  Robert J. Redelmeier.  All Right Reserved
    3. #  Licensed under GNU General Public Licence 2.0.  No warrantee.
    4. #  *** USE AT YOUR OWN RISK ***
    5.  
    6. .text
    7. #ifdef WINDOWS
    8. .globl _main
    9. _main:
    10. #else
    11. .globl _start
    12. _start:
    13. #endif
    14.     finit
    15.     pushl   %ebp
    16.     movl    %esp, %ebp
    17.     andl    $-32, %ebp
    18.     subl    $96, %esp
    19.     fldpi
    20.     fldl    rt
    21.     fstpl   -24(%ebp)
    22.     fldl    e
    23.     fstpl   -32(%ebp)
    24.     movl    half, %edx
    25.     movl    %edx, -8(%ebp)
    26. after_check:
    27.     xorl    %eax, %eax
    28.     movl    %eax, %ebx
    29.     lea -1(%eax), %esi
    30.     movl    $539000000, %ecx    # check after this count  
    31.     movl    %ecx, -4(%ebp)     
    32. .align  32,  0x90
    33. crunch:                # MAIN LOOP  21uops / 8.0 clocks
    34.     fldl    8-24(%ebp,%esi,8)  
    35.     fmull   8-32(%ebp,%esi,8)
    36.     addl    half, %edx
    37.     jnz . + 2
    38.     faddp  
    39.     fldl    -24(%ebp)
    40.     decl    %ebx
    41.     subl    half+9(%esi,%esi,8), %edx
    42.     jmp . + 2
    43.     fmull   8-32(%ebp,%esi,8)
    44.     incl    %ebx
    45.     decl    8-4(%ebp,%esi,8)
    46.     fsubp  
    47.     jnz crunch     
    48.  
    49.     test    %ebx, %ebx  # Testing block
    50.     mov $0, %ebx
    51.     jnz int_exit
    52.     cmpl    half, %edx
    53.     jnz int_exit
    54.     fldpi
    55.     fcomp   %st(1)
    56.     fstsw   %ax
    57.     sahf
    58.     jz  after_check # fp result = pi ?
    59.     decl    %ebx
    60. int_exit:           # error abort
    61.     decl    %ebx
    62.     addl    $96,  %esp
    63.     popl    %ebp
    64.     movl    $1, %eax    # Linux syscall
    65. #ifdef WINDOWS
    66.     ret
    67. #else
    68.     push    %ebx
    69.     push    %eax        # *BSD syscall
    70.     int $0x80
    71. #endif
    72. .align 32,0
    73. half:   .long 0x7fffffff,0
    74. e:  .long 0xffffffff,0x3fdfffff
    75. rt: .long 0xffffffff,0x3fefffff
    76. #
    прога греет неплохо! но когда я перевожу этот код в МАSМ и компилю греет значительно хуже???
    Прога и код прикреплены!
     
  18. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    AndreyATC
    Не забывай про выравнивание кода и данных - это может сильно повлиять на эффективность прогрева.
     
  19. AndreyATC

    AndreyATC New Member

    Публикаций:
    0
    Регистрация:
    16 май 2007
    Сообщения:
    60
    Atlantic
    да но когда ровняеш код по 32-байтной границе компилятор гнет маты:
    error A2189: invalid combination with segment alignment : 32
     
  20. AndreyATC

    AndreyATC New Member

    Публикаций:
    0
    Регистрация:
    16 май 2007
    Сообщения:
    60
    Atlantic
    а вобще эта прога греет ни чем не хуже S&M'a