Bitcoin Forum
September 25, 2018, 06:15:07 PM *
News: ♦♦ New info! Bitcoin Core users absolutely must upgrade to previously-announced 0.16.3 [Torrent]. All Bitcoin users should temporarily trust confirmations slightly less. More info.
 
   Home   Help Search Donate Login Register  
Pages: [1]
  Print  
Author Topic: Utility to find the best GPU / MEM clock combination  (Read 1564 times)
mzahor
Newbie
*
Offline Offline

Activity: 43
Merit: 0


View Profile
November 10, 2013, 01:31:46 PM
 #1

Hi guys, I've created little PHP script that will walk through GPU / MEM freq. combinations and log
hashrate to text file.
It will use aticonfig for GPU/MEM freq. modification and cgminer's API to chech hash rate.

Usage
php ./findOptimalFreq.php gpu_id gpu_from gpu_to memory_from memory_to freq_increment delay_sec

GPU_ID - it's ID under which aticonfig sees the card  [ you can list cards with aticonfig --lsa ]
[ cgminer must see it under same number ]
gpu_from - testing freq. from [ example 900 ]
gpu_to - testing to
memory_from - testing memory from
memory_to - testing memory to
freq_increment - step size [ example 2 ]
delay_sec - delay between changing freq. and measuring hash rate [ 10-15 seems to be good ]

Output goes to ./testGPU'datetime'.txt

If you find it useful consider donation:
BTC: 12XEVHYjYzhpNmoZmGgrWVsnzZPe25ceY3
LTC: LTaUDmmBVvRkZ7XzpMznV5WNvjgD15GDJv

save it as findOptimalFreq.php
------

<?php
#
# Sample Socket I/O to CGMiner API
#
function getsock($addr, $port)
{
 $socket = null;
 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
 if ($socket === false || $socket === null)
 {
   $error = socket_strerror(socket_last_error());
   $msg = "socket create(TCP) failed";
   echo "ERR: $msg '$error'\n";
   return null;
 }

 $res = socket_connect($socket, $addr, $port);
 if ($res === false)
 {
   $error = socket_strerror(socket_last_error());
   $msg = "socket connect($addr,$port) failed";
   echo "ERR: $msg '$error'\n";
   socket_close($socket);
   return null;
 }
 return $socket;
}
#
# Slow ...
function readsockline($socket)
{
 $line = '';
 while (true)
 {
   $byte = socket_read($socket, 1);
   if ($byte === false || $byte === '')
      break;
   if ($byte === "\0")
      break;
   $line .= $byte;
 }
 return $line;
}
#
function request($cmd)
{
 $socket = getsock('127.0.0.1', 4028);
 if ($socket != null)
 {
   socket_write($socket, $cmd, strlen($cmd));
   $line = readsockline($socket);
   socket_close($socket);

   if (strlen($line) == 0)
   {
      echo "WARN: '$cmd' returned nothing\n";
      return $line;
   }

   print "$cmd returned '$line'\n";

   if (substr($line,0,1) == '{')
      return json_decode($line, true);

   $data = array();

   $objs = explode('|', $line);
   foreach ($objs as $obj)
   {
      if (strlen($obj) > 0)
      {
         $items = explode(',', $obj);
         $item = $items[0];
         $id = explode('=', $items[0], 2);
         if (count($id) == 1 or !ctype_digit($id[1]))
            $name = $id[0];
         else
            $name = $id[0].$id[1];

         if (strlen($name) == 0)
            $name = 'null';

         if (isset($data[$name]))
         {
            $num = 1;
            while (isset($data[$name.$num]))
               $num++;
            $name .= $num;
         }

         $counter = 0;
         foreach ($items as $item)
         {
            $id = explode('=', $item, 2);
            if (count($id) == 2)
               $data[$name][$id[0]] = $id[1];
            else
               $data[$name][$counter] = $id[0];

            $counter++;
         }
      }
   }

   return $data;
 }

 return null;
}
#

if (isset($argv) and count($argv) > 1)
{
// $r = request($argv[1]);
$gpu_id = $argv[1];
$engine_from = $argv[2];
$engine_to = $argv[3];
$memory_from = $argv[4];
$memory_to = $argv[5];
$increment = $argv[6];
$delay_sec = $argv[7];

}
else
{
// $r = request('summary');
#
//echo print_r($r, true)."\n";
echo "Usage: php ./findOptimalFreq.php gpu_id gpu_from gpu_to memory_from memory_to freq_increment delay_sec\n";
return 0;
}

#
$myFile = "./testGPU".date("Y-m-d H:i:s").".txt";
$fh = fopen($myFile, 'w');
$output = "";
for ($engine = $engine_from ; $engine <= $engine_to ; $engine += $increment )
{
for ( $memory = $memory_from ; $memory <= $memory_to ; $memory += $increment )
{
  echo "ENGINE: $engine , MEMORY: $memory\n";
  $output =  "$engine,$memory,";

  system("aticonfig --adapter=$gpu_id --od-setclocks=$engine,$memory");
  sleep($delay_sec);

   $r = request("{\"command\":\"gpu\",\"parameter\":\"$gpu_id\"}");
   echo $r['GPU'][0]['MHS 5s'];
   $output .= $r['GPU'][0]['MHS 5s'];
   $output .= "\n";
   fwrite($fh, $output);
}

}
fclose($fh);

?>
1537899307
Hero Member
*
Offline Offline

Posts: 1537899307

View Profile Personal Message (Offline)

Ignore
1537899307
Reply with quote  #2

1537899307
Report to moderator
1537899307
Hero Member
*
Offline Offline

Posts: 1537899307

View Profile Personal Message (Offline)

Ignore
1537899307
Reply with quote  #2

1537899307
Report to moderator
Make a difference with your Ether.
Donate Ether for the greater good.
SPRING.WETRUST.IO
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction. Advertise here.
1537899307
Hero Member
*
Offline Offline

Posts: 1537899307

View Profile Personal Message (Offline)

Ignore
1537899307
Reply with quote  #2

1537899307
Report to moderator
1537899307
Hero Member
*
Offline Offline

Posts: 1537899307

View Profile Personal Message (Offline)

Ignore
1537899307
Reply with quote  #2

1537899307
Report to moderator
rampalija
Full Member
***
Offline Offline

Activity: 154
Merit: 100



View Profile
November 11, 2013, 11:43:18 PM
 #2

you should explain it a little more details

Pages: [1]
  Print  
 
Jump to:  

Sponsored by , a Bitcoin-accepting VPN.
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!