I just tried this and got >3% improvement in mining speed. On my 6870, I was getting 299 MHash/sec, and now I'm getting 308 or so. The change is simple enough for anyone to do it - you don't need to be a programmer to use it.
EDIT - Thank you! This has been added to git (not by me), so now everyone can use this speed-up without editing any files.
https://github.com/m0mchil/poclbm/commit/3d43c4e4c2c476cf367822868202f02d168d6f3b Also, please read the comments here
http://www.reddit.com/r/Bitcoin/comments/i9yba/2_3_increase_in_mining_per_gpu/; the person who added it to git knows more than I do, you should listen to him about SDK versions etc. Thanks for all the donations too!
EDIT2 - Thanks to the awesomeness of reddit and these forums, I now know that this change has been applied to Diablo miner as well.
https://github.com/Diablo-D3/DiabloMiner/commit/ae16718dfa538aeef31f34e19542f3c18501efe5 I guess we can stop this thread now, and everyone can enjoy the speedup without editing any files. Thank you for trying this out.
You can go to phatk's kernel.cl file (don't worry, it just sits there in the open, no need to recompile anything), find this line
#define Ma(x, y, z) amd_bytealign((y), (x | z), (z & x))
and change it to this line
#define Ma(x, y, z) amd_bytealign( (z^x), (y), (x) )
Once you've done it, restart the miner.
Technically, this is 1 less instruction for the Maj function in the hash, which is called ~128 times for each nonce value, so we get +3% to mining speed. This will ONLY WORK if you're running with BFI_INT. I'm using phoenix with phatk kernel on Ubuntu, so YMMV, but I see no reason for this to not work with other setups. As always, do play around with aggression and other settings after you've applied the change. Deepbit seems to be accepting my shares generated this way, but it comes AS IS, without any warranty whatsoever - if it doesn't work for you, or has been posted already, please don't blame me
If this helps you mine faster, please share your MHash/sec results, before and after. You can also donate to 15igh5HkCXwvvan4aiPYSYZwJZbHxGBYwB . I hear people are getting 50 BTC for things like this, and it would be nice to get some.
If you want to verify the correctness of the change, here's the truth table for the new Ma() function
x y z Ma
0 0 0 0
1 0 0 0
0 1 0 0
1 1 0 1
0 0 1 0
1 0 1 1
0 1 1 1
1 1 1 1
and here's C code that was used to generate it
#include <stdio.h>
int main()
{
#define CH(src0,src1,src2) ( ((src1)&(src0)) | ((src2)&~(src0)) )
unsigned int x,y,z;
for(z=0;z<=1;z++) for(y=0;y<=1;y++) for(x=0;x<=1;x++)
{
printf("%d %d %d %d\n",x,y,z, CH(z^x,y,x) );
}
return 0;
}
Finally, I am newbie, so it would be nice if someone reposted this to the proper Bitcoin mining thread/board and/or checked-in this change into the source control.
Thanks and have fun!