Скрипт для автоперебора частот в bfgminer

Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

Скрипт, показанный ниже, перебирает частоты ядра и/или памяти для указанной карты в bfgminer или cgminer. Будет полезен при поиске максимального хэшрейта на майнинге scrypt-криптовалют. Для управления используется Python-скрипт для доступа к API. Для его работы необходимо в конфиге майнера включить следующие опции:

"api-port" : "4028",
"api-allow" : "W:127.0.0.1",
"api-listen" : true,

Все параметры задаются несколькими переменными в начале скрипта. Для отключения перебора по одному из параметров (например, перебирать только частоты ядра при фиксированной частоте памяти) указывайте одно значение, а не диапазон. Переменные *shift задают инкремент для соответствующего параметра.


#!/bin/bash

api='./api-example.py'

timeout='20'
cardnum='0'

core='800-805'
coreshift='1'

mem='1000'
memshift='5'

startcore="${core/-*/}" ;   [[ "${core}" =~ '-' ]] &&   stopcore="${core/*-/}" ||   stopcore="${startcore}"
startmem="${mem/-*/}" ;     [[ "${mem}" =~ '-' ]] &&    stopmem="${mem/*-/}" ||     stopmem="${startmem}"

core="${startcore}"
mem="${startmem}"

while :
do
    $api devs | sed 's/,/,\n/g' | sed -n "/u'GPU': "$cardnum"/,/Memory/p" |
    awk '
        /GPU Clock/{
            c=$3
            gsub(/,/, "", c)
        }

        /Memory Clock/{
            m=$3
            gsub(/,/, "", m)
        }

        /MHS 5s/{
            h=$3
            gsub(/,/, "", h)
        } END {
        print "C:"c, "M:"m , "S:"h
}'

    [ "${core}" -ge "${stopcore}" ] && {
        [ "${mem}" -ge "${stopmem}" ] && break || {
            core="${startcore}"
            mem=$(($mem+$memshift))                                                                                                                            
        }
    } || let core+="${coreshift}"
   
    $api gpuengine $cardnum,$core 1>/dev/null
    $api gpumem $cardnum,$mem 1>/dev/null
    sleep "${timeout}"

done