There is a hidden option in cgminer when Icarus support is compiled in:
--icarus-timing <arg> Set how the Icarus timing is calculated - one setting/value for all or comma separated
default Use the default Icarus hash time (2.6316ns)
default[=N] Use the default Icarus hash time (2.6316ns)
short Calculate the hash time and stop adjusting it at ~315 difficulty 1 shares (~1hr)
long Re-calculate the hash time continuously
value Specify the hash time in nanoseconds (e.g. 2.6316)
value[=N] Specify the hash time in nanoseconds (e.g. 2.6316) and abort time (e.g. 2.6316=80)
Icarus timing is required for devices that do not exactly match a default Icarus Rev3 in
processing speed
@ -35,6 +35,8 @@ There is a hidden option in cgminer when Icarus support is compiled in:
@@ -35,6 +35,8 @@ There is a hidden option in cgminer when Icarus support is compiled in:
In 'default' or 'value' mode the 'constants' are calculated once at the start, based on the default
value or the value specified
The optional additional =N specifies to set the default abort at N 1/10ths of a second, not the
calculated value, which is 112 for 2.6316ns
To determine the hash time value for a non Icarus Rev3 device or an Icarus Rev3 with a different
bitstream to the default one, use 'long' mode and give it at least a few hundred shares, or use
// Since this rounds up a the last digit - it is a slight overestimate
// Thus the hash rate will be a VERY slight underestimate
// (by a lot less than the displayed accuracy)
#define ICARUS_HASH_TIME 0.0000000026316
#define ICARUS_REV3_HASH_TIME 0.0000000026316
#define NANOSEC 1000000000.0
// Icarus Rev3 doesn't send a completion message when it finishes
@ -259,17 +259,22 @@ static int icarus_gets(unsigned char *buf, int fd, struct timeval *tv_finish, in
@@ -259,17 +259,22 @@ static int icarus_gets(unsigned char *buf, int fd, struct timeval *tv_finish, in
ssize_tret=0;
intrc=0;
intread_amount=ICARUS_READ_SIZE;
boolfirst=true;
// Read reply 1 byte at a time to get earliest tv_finish