Bitcoin Forum
March 29, 2024, 09:18:26 AM *
News: Latest Bitcoin Core release: 26.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 »
  Print  
Author Topic: excavator by NiceHash - multi-algorithm NVIDIA GPU miner [1.5.6a]  (Read 179208 times)
zawawa
Sr. Member
****
Offline Offline

Activity: 728
Merit: 304


Miner Developer


View Profile
May 19, 2017, 04:05:59 AM
 #401

Well, these numbers are also affected by other hardware components, too.
(My dev PC is quite old...)
I'm pretty sure excavator will reach 300 S/s on my old PC soon, though.

Gateless Gate Sharp, an open-source ETH/XMR miner: http://bit.ly/2rJ2x4V
BTC: 1BHwDWVerUTiKxhHPf2ubqKKiBMiKQGomZ
Unlike traditional banking where clients have only a few account numbers, with Bitcoin people can create an unlimited number of accounts (addresses). This can be used to easily track payments, and it improves anonymity.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1711703906
Hero Member
*
Offline Offline

Posts: 1711703906

View Profile Personal Message (Offline)

Ignore
1711703906
Reply with quote  #2

1711703906
Report to moderator
1711703906
Hero Member
*
Offline Offline

Posts: 1711703906

View Profile Personal Message (Offline)

Ignore
1711703906
Reply with quote  #2

1711703906
Report to moderator
Vaccinus
Sr. Member
****
Offline Offline

Activity: 406
Merit: 250



View Profile
May 19, 2017, 07:06:33 AM
 #402

djeZo
When do you optimize the excavator by 6-8%?

When we put in all of popular algorithms and get some good anti-reversing tehcniques in place so our ideas and hard work isn't stolen again. Until then, we better keep it a bit under, so we don't draw too much attention.

why they should stole your work if they already have the same speed? do you suspect that EWBF is stealing your work and therefore he was able to reach your speed in this way?

patinencomun
Jr. Member
*
Offline Offline

Activity: 76
Merit: 1


View Profile
May 19, 2017, 07:32:48 AM
Last edit: May 19, 2017, 07:56:23 AM by patinencomun
 #403

1.2.0a works great with nvidia cards.

But, I cant make it work with amd cards
[error] opencl | Failed to load phymem.

It comes with phymem.sys , I have to copy this file to any places? (Windows7)

Thank you.
PD: Yes, I have executed turn-driver-signature-enforcement-off.bat and reboot and run excavator as admin.
Driver: win7-64bit-radeon-software-crimson-relive-16.12.2-jan3
zawawa
Sr. Member
****
Offline Offline

Activity: 728
Merit: 304


Miner Developer


View Profile
May 19, 2017, 08:40:49 AM
 #404

1.2.0a works great with nvidia cards.

But, I cant make it work with amd cards
[error] opencl | Failed to load phymem.

It comes with phymem.sys , I have to copy this file to any places? (Windows7)

Thank you.
PD: Yes, I have executed turn-driver-signature-enforcement-off.bat and reboot and run excavator as admin.
Driver: win7-64bit-radeon-software-crimson-relive-16.12.2-jan3

There is a bug in the current alpha version that prevents the driver from being loaded in some cases.
I fixed the bug already and am waiting for the next alpha version myself.

Gateless Gate Sharp, an open-source ETH/XMR miner: http://bit.ly/2rJ2x4V
BTC: 1BHwDWVerUTiKxhHPf2ubqKKiBMiKQGomZ
Kayfolom
Member
**
Offline Offline

Activity: 68
Merit: 10


View Profile
May 19, 2017, 02:26:01 PM
 #405

How to set up on 5 GTX1070?
Old start line:
excavator.exe -a equihash -s zcl.suprnova.cc:4042 -u User.node07:x -ca -ca -od 5 -or -os 0 %core_delta% %mem_delta% %tdp% -os 1 %core_delta% %mem_delta% %tdp% -os 2 %core_delta% %mem_delta% %tdp% -os 3 %core_delta% %mem_delta% %tdp% -os 4 %core_delta% %mem_delta% %tdp%

I'm probably stupid, but I can not translate it into json file config  Huh
djeZo
Hero Member
*****
Offline Offline

Activity: 588
Merit: 520


View Profile
May 19, 2017, 03:08:15 PM
 #406

How to set up on 5 GTX1070?
Old start line:
excavator.exe -a equihash -s zcl.suprnova.cc:4042 -u User.node07:x -ca -ca -od 5 -or -os 0 %core_delta% %mem_delta% %tdp% -os 1 %core_delta% %mem_delta% %tdp% -os 2 %core_delta% %mem_delta% %tdp% -os 3 %core_delta% %mem_delta% %tdp% -os 4 %core_delta% %mem_delta% %tdp%

I'm probably stupid, but I can not translate it into json file config  Huh

The cmd file I use for my machine that has 4 various NVIDIA cards is following:
Code:
[
{"time":1,"commands":[
{"id":1,"method":"algorithm.add","params":["equihash","equihash.eu.nicehash.com:3357","EDITEDOUT"]}
]},
{"time":2,"commands":[
{"id":1,"method":"worker.add","params":["0","0"]},
{"id":1,"method":"worker.add","params":["0","1"]},
{"id":1,"method":"worker.add","params":["0","1"]},
{"id":1,"method":"worker.add","params":["0","2"]},
{"id":1,"method":"worker.add","params":["0","2"]},
{"id":1,"method":"worker.add","params":["0","3"]},
{"id":1,"method":"worker.add","params":["0","3"]}
]},
{"time":5,"commands":[
{"id":1,"method":"device.set.power_limit","params":["0","126"]},
{"id":1,"method":"device.set.core_delta","params":["0","100"]},
{"id":1,"method":"device.set.memory_delta","params":["0","800"]},
{"id":1,"method":"device.set.power_limit","params":["1","90"]},
{"id":1,"method":"device.set.core_delta","params":["1","100"]},
{"id":1,"method":"device.set.memory_delta","params":["1","700"]},
{"id":1,"method":"device.set.power_limit","params":["2","72"]},
{"id":1,"method":"device.set.core_delta","params":["2","100"]},
{"id":1,"method":"device.set.memory_delta","params":["2","400"]},
{"id":1,"method":"device.set.power_limit","params":["3","126"]},
{"id":1,"method":"device.set.core_delta","params":["3","130"]},
{"id":1,"method":"device.set.memory_delta","params":["3","900"]}
]},
{"time":10,"commands":[
{"id":1,"method":"worker.reset","params":["0"]},
{"id":1,"method":"worker.reset","params":["1"]},
{"id":1,"method":"worker.reset","params":["2"]},
{"id":1,"method":"worker.reset","params":["3"]},
{"id":1,"method":"worker.reset","params":["4"]},
{"id":1,"method":"worker.reset","params":["5"]},
{"id":1,"method":"worker.reset","params":["6"]}
]},
{"time":15,"loop":15,"commands":[
  {"id":1,"method":"algorithm.print.speeds","params":[]}
]},
{"event":"on_quit","commands":[
{"id":1,"method":"device.set.tdp","params":["0","100"]},
{"id":1,"method":"device.set.core_delta","params":["0","0"]},
{"id":1,"method":"device.set.memory_delta","params":["0","0"]},
{"id":1,"method":"device.set.tdp","params":["1","100"]},
{"id":1,"method":"device.set.core_delta","params":["1","0"]},
{"id":1,"method":"device.set.memory_delta","params":["1","0"]},
{"id":1,"method":"device.set.tdp","params":["2","100"]},
{"id":1,"method":"device.set.core_delta","params":["2","0"]},
{"id":1,"method":"device.set.memory_delta","params":["2","0"]},
{"id":1,"method":"device.set.tdp","params":["3","100"]},
{"id":1,"method":"device.set.core_delta","params":["3","0"]},
{"id":1,"method":"device.set.memory_delta","params":["3","0"]}
]}
]

First, establish connection with remote pool - algorithm equihash.

Then I add workers so CUDA stuff is initialized (potential jump to P0 state can happen here).

Then waiting a bit for all these CUDA context are initialized and applying clocks and TDP.

After 10 seconds, I reset speed counter of all workers.

Then after 15 seconds and every 15 seconds print total speed to console.

And I also have on_quit even that resets applied clocks and TDPs back to default values.

Hope this helps you Smiley

djeZo
Hero Member
*****
Offline Offline

Activity: 588
Merit: 520


View Profile
May 19, 2017, 03:13:19 PM
 #407

NEW RELEASE - v1.2.1a

Download: https://github.com/nicehash/excavator/releases

Urgently read: https://github.com/nicehash/excavator/blob/master/README.md

Changelog:
Quote
support for API and commanding file at the same time
added commanding file event: on_quit
fixed connection bug
added HTTP server for API commands
fixed a bug in phymem.sys
optimized equihash OpenCL kernel
added API method: info
general fixes and improvements

We are also working on a good pro-style API documentation that can be found here: https://github.com/nicehash/excavator/tree/master/api

Kayfolom
Member
**
Offline Offline

Activity: 68
Merit: 10


View Profile
May 19, 2017, 03:30:08 PM
 #408

Thanks for the answer, but I already realized
Code:
[
{"time":0,"commands":[
{"id":1,"method":"algorithm.add","params":["equihash","zcl.suprnova.cc:4042","User.node07"]}
]},
{"time":3,"commands":[
{"id":1,"method":"worker.add","params":["0","0"]},
{"id":1,"method":"worker.add","params":["0","0"]},
{"id":1,"method":"worker.add","params":["0","1"]},
{"id":1,"method":"worker.add","params":["0","1"]},
{"id":1,"method":"worker.add","params":["0","2"]},
{"id":1,"method":"worker.add","params":["0","2"]},
{"id":1,"method":"worker.add","params":["0","3"]},
{"id":1,"method":"worker.add","params":["0","3"]},
{"id":1,"method":"worker.add","params":["0","4"]},
{"id":1,"method":"worker.add","params":["0","4"]}
]},
{"time":5,"commands":[
{"id":2,"method":"device.set.tdp","params":["0","111"]},
{"id":2,"method":"device.set.tdp","params":["1","111"]},
{"id":2,"method":"device.set.tdp","params":["2","111"]},
{"id":2,"method":"device.set.tdp","params":["3","111"]},
{"id":2,"method":"device.set.tdp","params":["4","111"]},
{"id":2,"method":"device.set.core_delta","params":["0","80"]},
{"id":2,"method":"device.set.core_delta","params":["0","80"]},
{"id":2,"method":"device.set.core_delta","params":["0","80"]},
{"id":2,"method":"device.set.core_delta","params":["0","80"]},
{"id":2,"method":"device.set.core_delta","params":["0","80"]},
{"id":2,"method":"device.set.memory_delta","params":["0","700"]},
{"id":2,"method":"device.set.memory_delta","params":["0","700"]},
{"id":2,"method":"device.set.memory_delta","params":["0","700"]},
{"id":2,"method":"device.set.memory_delta","params":["0","700"]},
{"id":2,"method":"device.set.memory_delta","params":["0","700"]}
]},
{"time":10,"loop":10,"commands":[
{"id":1,"method":"worker.print.speed","params":["0"]},
{"id":1,"method":"worker.print.speed","params":["1"]},
{"id":1,"method":"worker.print.speed","params":["2"]},
{"id":1,"method":"worker.print.speed","params":["3"]},
{"id":1,"method":"worker.print.speed","params":["4"]},
{"id":1,"method":"worker.print.speed","params":["5"]},
{"id":1,"method":"worker.print.speed","params":["6"]},
{"id":1,"method":"worker.print.speed","params":["7"]},
{"id":1,"method":"worker.print.speed","params":["8"]},
{"id":1,"method":"worker.print.speed","params":["9"]},
{"id":1,"method":"algorithm.print.speeds","params":["0"]}
]}
]
By the way what does it mean ""id":2" ? In the documentation about this forgot to write...

The result is more than pathetic:
Code:
[18:22:27][0x00001e24][info] core | Device #0-0 speed: 202.539308 H/s
[18:22:27][0x00001e24][info] core | Device #0-1 speed: 206.219820 H/s
[18:22:27][0x00001e24][info] core | Device #1-2 speed: 207.831280 H/s
[18:22:27][0x00001e24][info] core | Device #1-3 speed: 206.463997 H/s
[18:22:27][0x00001e24][info] core | Device #2-4 speed: 208.180113 H/s
[18:22:27][0x00001e24][info] core | Device #2-5 speed: 204.169727 H/s
[18:22:27][0x00001e24][info] core | Device #3-6 speed: 204.628798 H/s
[18:22:27][0x00001e24][info] core | Device #3-7 speed: 207.113224 H/s
[18:22:27][0x00001e24][info] core | Device #4-8 speed: 207.310311 H/s
[18:22:27][0x00001e24][info] core | Device #4-9 speed: 208.467500 H/s
[18:22:27][0x00001e24][info] core | Algorithm 'equihash' total speed: 2.062495 kH/s

The previous version excavator gave 2,241 kH/s.
djeZo
Hero Member
*****
Offline Offline

Activity: 588
Merit: 520


View Profile
May 19, 2017, 03:33:06 PM
 #409

id is just there for marking JSON message, if you don't need that returned (such as when creating json messages) you just set to to any number you like.

Speed should not be any different. Are you sure you setup everything correctly? Running two workers per device?

You can check with HTTP WEB and see more details what is going on (is gpu utlization 100%?).

Kayfolom
Member
**
Offline Offline

Activity: 68
Merit: 10


View Profile
May 19, 2017, 03:57:56 PM
 #410

The final version of the config
Code:
[
{"time":1,"commands":[
{"id":1,"method":"algorithm.add","params":["equihash","zcl.suprnova.cc:4042","Kayfolom.node07"]}
]},
{"time":2,"commands":[
{"id":1,"method":"worker.add","params":["0","0"]},
{"id":1,"method":"worker.add","params":["0","0"]},
{"id":1,"method":"worker.add","params":["0","1"]},
{"id":1,"method":"worker.add","params":["0","1"]},
{"id":1,"method":"worker.add","params":["0","2"]},
{"id":1,"method":"worker.add","params":["0","2"]},
{"id":1,"method":"worker.add","params":["0","3"]},
{"id":1,"method":"worker.add","params":["0","3"]},
{"id":1,"method":"worker.add","params":["0","4"]},
{"id":1,"method":"worker.add","params":["0","4"]}
]},
{"time":5,"commands":[
{"id":1,"method":"device.set.tdp","params": ["0","111"]},
{"id":1,"method":"device.set.core_delta","params": ["0","80"]},
{"id":1,"method":"device.set.memory_delta","params":["0","700"]},
{"id":1,"method":"device.set.tdp","params": ["1","111"]},
{"id":1,"method":"device.set.core_delta","params": ["1","80"]},
{"id":1,"method":"device.set.memory_delta","params":["1","700"]},
{"id":1,"method":"device.set.tdp","params": ["2","111"]},
{"id":1,"method":"device.set.core_delta","params": ["2","80"]},
{"id":1,"method":"device.set.memory_delta","params":["2","700"]},
{"id":1,"method":"device.set.tdp","params": ["3","111"]},
{"id":1,"method":"device.set.core_delta","params": ["3","80"]},
{"id":1,"method":"device.set.memory_delta","params":["3","700"]},
{"id":1,"method":"device.set.tdp","params": ["4","111"]},
{"id":1,"method":"device.set.core_delta","params": ["4","80"]},
{"id":1,"method":"device.set.memory_delta","params":["4","700"]}
]},
{"time":10,"commands":[
{"id":1,"method":"worker.reset","params":["0"]},
{"id":1,"method":"worker.reset","params":["1"]},
{"id":1,"method":"worker.reset","params":["2"]},
{"id":1,"method":"worker.reset","params":["3"]},
{"id":1,"method":"worker.reset","params":["4"]},
{"id":1,"method":"worker.reset","params":["5"]},
{"id":1,"method":"worker.reset","params":["6"]},
{"id":1,"method":"worker.reset","params":["7"]},
{"id":1,"method":"worker.reset","params":["8"]},
{"id":1,"method":"worker.reset","params":["9"]}
]},
{"time":15,"loop":20,"commands":[
{"id":1,"method":"worker.print.speed","params":["0"]},
{"id":1,"method":"worker.print.speed","params":["1"]},
{"id":1,"method":"worker.print.speed","params":["2"]},
{"id":1,"method":"worker.print.speed","params":["3"]},
{"id":1,"method":"worker.print.speed","params":["4"]},
{"id":1,"method":"worker.print.speed","params":["5"]},
{"id":1,"method":"worker.print.speed","params":["6"]},
{"id":1,"method":"worker.print.speed","params":["7"]},
{"id":1,"method":"worker.print.speed","params":["8"]},
{"id":1,"method":"worker.print.speed","params":["9"]},
{"id":1,"method":"algorithm.print.speeds","params":["0"]}
]},
{"event":"on_quit","commands":[
{"id":1,"method":"device.set.tdp","params": ["0","100"]},
{"id":1,"method":"device.set.core_delta","params": ["0","0"]},
{"id":1,"method":"device.set.memory_delta","params":["0","0"]},
{"id":1,"method":"device.set.tdp","params": ["1","100"]},
{"id":1,"method":"device.set.core_delta","params": ["1","0"]},
{"id":1,"method":"device.set.memory_delta","params":["1","0"]},
{"id":1,"method":"device.set.tdp","params": ["2","100"]},
{"id":1,"method":"device.set.core_delta","params": ["2","0"]},
{"id":1,"method":"device.set.memory_delta","params":["2","0"]},
{"id":1,"method":"device.set.tdp","params": ["3","100"]},
{"id":1,"method":"device.set.core_delta","params": ["3","0"]},
{"id":1,"method":"device.set.memory_delta","params":["3","0"]},
{"id":1,"method":"device.set.tdp","params": ["4","100"]},
{"id":1,"method":"device.set.core_delta","params": ["4","0"]},
{"id":1,"method":"device.set.memory_delta","params":["4","0"]}
]}
]

Result:
Code:
[18:54:29][0x000009c4][info] core | Device #0-0 speed: 208.146179 H/s
[18:54:29][0x000009c4][info] core | Device #0-1 speed: 209.735081 H/s
[18:54:29][0x000009c4][info] core | Device #1-2 speed: 223.026859 H/s
[18:54:29][0x000009c4][info] core | Device #1-3 speed: 223.899505 H/s
[18:54:29][0x000009c4][info] core | Device #2-4 speed: 223.427464 H/s
[18:54:29][0x000009c4][info] core | Device #2-5 speed: 224.297069 H/s
[18:54:29][0x000009c4][info] core | Device #3-6 speed: 225.697251 H/s
[18:54:29][0x000009c4][info] core | Device #3-7 speed: 228.411534 H/s
[18:54:29][0x000009c4][info] core | Device #4-8 speed: 223.633259 H/s
[18:54:29][0x000009c4][info] core | Device #4-9 speed: 222.171429 H/s
[18:54:30][0x000009c4][info] core | Algorithm 'equihash' total speed: 2.211706 kH/s

While excavator remains the worst of all. We are waiting for the programmers to play enough with parsing json and  take up the real deal  Wink
joaogti36
Full Member
***
Offline Offline

Activity: 162
Merit: 100


View Profile
May 19, 2017, 04:10:01 PM
 #411

now this looks nice Cheesy

waiting for even better version :-D
keep it simple
felixbrucker
Hero Member
*****
Offline Offline

Activity: 700
Merit: 500


View Profile WWW
May 19, 2017, 04:31:48 PM
 #412

We are also working on a good pro-style API documentation that can be found here: https://github.com/nicehash/excavator/tree/master/api

very nice, i like it Smiley
UnclWish
Sr. Member
****
Offline Offline

Activity: 1484
Merit: 253


View Profile
May 19, 2017, 04:33:09 PM
 #413

Waitnig optimizing for GCN1.0 cards.
zawawa
Sr. Member
****
Offline Offline

Activity: 728
Merit: 304


Miner Developer


View Profile
May 19, 2017, 05:14:07 PM
 #414

Waitnig optimizing for GCN1.0 cards.

I know, I know... Let me see what I can do for you.

Gateless Gate Sharp, an open-source ETH/XMR miner: http://bit.ly/2rJ2x4V
BTC: 1BHwDWVerUTiKxhHPf2ubqKKiBMiKQGomZ
sp_
Legendary
*
Offline Offline

Activity: 2856
Merit: 1087

Team Black developer


View Profile
May 19, 2017, 11:04:09 PM
 #415

djeZo
When do you optimize the excavator by 6-8%?
When we put in all of popular algorithms and get some good anti-reversing tehcniques in place so our ideas and hard work isn't stolen again. Until then, we better keep it a bit under, so we don't draw too much attention.

Your kernel is slow. You stole the idea from the silent army..


Team Black Miner (ETHB3 ETH ETC VTC KAWPOW FIROPOW ZILLIQA + dual mining + tripple mining.. https://github.com/sp-hash/TeamBlackMiner
Daniel0785
Newbie
*
Offline Offline

Activity: 7
Merit: 0


View Profile
May 19, 2017, 11:36:04 PM
 #416

The wait is over, folks! Here comes the new version:

excavator v1.2.0a
https://github.com/nicehash/excavator/releases/tag/v1.2.0a

New features include:

  • changed commanding interface to JSON based messages over startup file or API
  • CUDA: added decred
  • added OpenCL support
  • OpenCL: added pascal
  • OpenCL: added equihash

Please read the documentations very carefully, especially if you are using AMD cards.

We would love to hear your feedback to make excavator the best miner ever. Enjoy!
How to set something like "--gpu-platform 1" in GG?
djeZo
Hero Member
*****
Offline Offline

Activity: 588
Merit: 520


View Profile
May 19, 2017, 11:40:37 PM
 #417

djeZo
When do you optimize the excavator by 6-8%?
When we put in all of popular algorithms and get some good anti-reversing tehcniques in place so our ideas and hard work isn't stolen again. Until then, we better keep it a bit under, so we don't draw too much attention.

Your kernel is slow. You stole the idea from the silent army..



I based it off Tromp's solver, which was under MIT. Some parts of the code (indices dup checking and sorting) is from SA (again MIT), besides that, I didn't even read SA kernel. We can't say the same about your endeavours eh? Sell this GPL closed source, sell that GPL closed source...

alucard20724
Sr. Member
****
Offline Offline

Activity: 703
Merit: 272


View Profile
May 20, 2017, 03:18:48 AM
 #418

djeZo
When do you optimize the excavator by 6-8%?
When we put in all of popular algorithms and get some good anti-reversing tehcniques in place so our ideas and hard work isn't stolen again. Until then, we better keep it a bit under, so we don't draw too much attention.

Your kernel is slow. You stole the idea from the silent army..



I based it off Tromp's solver, which was under MIT. Some parts of the code (indices dup checking and sorting) is from SA (again MIT), besides that, I didn't even read SA kernel. We can't say the same about your endeavours eh? Sell this GPL closed source, sell that GPL closed source...

i love watching you all bicker... it's like watching the orange guy's presidency... just not as much orange.   Grin
whitrzac
Member
**
Offline Offline

Activity: 126
Merit: 10

90*c is good, right?


View Profile
May 20, 2017, 03:33:38 AM
 #419

I was able to setup dual mining on my AMD cards using the claymore miner easy enough. Has anyone figured out dualmining on excavator on nvidia cards?

I'm running 2x 980ti cards
zawawa
Sr. Member
****
Offline Offline

Activity: 728
Merit: 304


Miner Developer


View Profile
May 20, 2017, 03:50:09 AM
 #420

Well, we are pretty innocuous... I must admit that the current political show is quite entertaining,
but it's pretty scary if you really think about it.

Anyway, I still need to figure out why my RX 470 is not behaving well. My RX 480 is running at 292 S/s, though.

Gateless Gate Sharp, an open-source ETH/XMR miner: http://bit.ly/2rJ2x4V
BTC: 1BHwDWVerUTiKxhHPf2ubqKKiBMiKQGomZ
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 »
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!