Setting up Linux to crunch CUDA90 and above for Windows users

Message boards : Number crunching : Setting up Linux to crunch CUDA90 and above for Windows users
Message board moderation

To post messages, you must log in.

Previous · 1 . . . 122 · 123 · 124 · 125 · 126 · 127 · 128 . . . 136 · Next

AuthorMessage
Profile Keith Myers Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 29 Apr 01
Posts: 9870
Credit: 930,270,908
RAC: 1,524,487
United States
Message 2003695 - Posted: 22 Jul 2019, 2:58:48 UTC - in response to Message 2003686.  

Yes, that is correct. Host ID appears as lower case hostid in the file. Both hostid and rpc_seqno only appears once in the very first part of the file near the top for a Seti project only host. A Find in the Editor will find them. If you have other projects in the client_state, make sure to adjust the hostid's and rpc_seqno's for those projects in their respective sections.


. . Again Keith thanks for your help! Thanks to a slow keyboard interface I stuffed up part of the process but overall it was a success. I failed one objective because of poor typing skills but got there in the end.

. . Is this the technique that Juan used/uses to preserve a host ID when migrating from one OS to another?

Stephen

?

Yes, the same procedure is used when converting a Windows host to a Linux host. The only way since you can't merge different OS'
Seti@Home classic workunits:20,676 CPU time:74,226 hours
ID: 2003695 · Report as offensive     Reply Quote
Profile Keith Myers Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 29 Apr 01
Posts: 9870
Credit: 930,270,908
RAC: 1,524,487
United States
Message 2003698 - Posted: 22 Jul 2019, 3:06:22 UTC - in response to Message 2003695.  

Yes, that is correct. Host ID appears as lower case hostid in the file. Both hostid and rpc_seqno only appears once in the very first part of the file near the top for a Seti project only host. A Find in the Editor will find them. If you have other projects in the client_state, make sure to adjust the hostid's and rpc_seqno's for those projects in their respective sections.


. . Again Keith thanks for your help! Thanks to a slow keyboard interface I stuffed up part of the process but overall it was a success. I failed one objective because of poor typing skills but got there in the end.

. . Is this the technique that Juan used/uses to preserve a host ID when migrating from one OS to another?

Stephen

?

Yes, the same procedure is used when converting a Windows host to a Linux host. The only way since you can't merge different OS'
I adjust fan control when I invoke the overclock script. You do have to run the script once before you start BOINC and after you turn on the host. But it is a 10 second job in the Terminal. This is my script. You can see how it functions and can piece together your own script. You can cutout the PowerMizer mode and the memory and gpu overclock part if you only want fan control. This is fan control for Pascal cards. It gets more complicated if you have Turing cards because they have two fan interfaces that you have to adjust separately.

#!/bin/bash

/usr/bin/nvidia-settings -a "[gpu:0]/GPUPowerMizerMode=1"
/usr/bin/nvidia-settings -a "[gpu:1]/GPUPowerMizerMode=1"
/usr/bin/nvidia-settings -a "[gpu:2]/GPUPowerMizerMode=1"

/usr/bin/nvidia-settings -a "[gpu:0]/GPUFanControlState=1"
/usr/bin/nvidia-settings -a "[fan:0]/GPUTargetFanSpeed=100"
/usr/bin/nvidia-settings -a "[gpu:1]/GPUFanControlState=1"
/usr/bin/nvidia-settings -a "[fan:1]/GPUTargetFanSpeed=100"
/usr/bin/nvidia-settings -a "[gpu:2]/GPUFanControlState=1"
/usr/bin/nvidia-settings -a "[fan:2]/GPUTargetFanSpeed=100"

/usr/bin/nvidia-settings -a "[gpu:0]/GPUMemoryTransferRateOffset[3]=800" -a "[gpu:0]/GPUGraphicsClockOffset[3]=40"
/usr/bin/nvidia-settings -a "[gpu:1]/GPUMemoryTransferRateOffset[3]=800" -a "[gpu:1]/GPUGraphicsClockOffset[3]=0"
/usr/bin/nvidia-settings -a "[gpu:2]/GPUMemoryTransferRateOffset[3]=800" -a "[gpu:2]/GPUGraphicsClockOffset[3]=0"

Seti@Home classic workunits:20,676 CPU time:74,226 hours
ID: 2003698 · Report as offensive     Reply Quote
Stephen "Heretic" Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 20 Sep 12
Posts: 4698
Credit: 151,039,529
RAC: 240,166
Australia
Message 2003699 - Posted: 22 Jul 2019, 3:07:33 UTC - in response to Message 2003692.  

Just remember, completely exit the boinc (not just the manager, the boinc client itself) before try to edit the file or nothing will work.


. . I had that part right (thankfully) but it is a very good point, some people might not think to do that.

Stephen

:)
ID: 2003699 · Report as offensive     Reply Quote
Stephen "Heretic" Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 20 Sep 12
Posts: 4698
Credit: 151,039,529
RAC: 240,166
Australia
Message 2003703 - Posted: 22 Jul 2019, 3:19:18 UTC - in response to Message 2003698.  
Last modified: 22 Jul 2019, 3:20:37 UTC

I adjust fan control when I invoke the overclock script. You do have to run the script once before you start BOINC and after you turn on the host. But it is a 10 second job in the Terminal. This is my script. You can see how it functions and can piece together your own script. You can cutout the PowerMizer mode and the memory and gpu overclock part if you only want fan control. This is fan control for Pascal cards. It gets more complicated if you have Turing cards because they have two fan interfaces that you have to adjust separately

. . I have much work to do in this regard, the fan script hasn't worked for ages but the 'unrestricted' and 'overclock' scripts I had been using to run the 970 in P0 stopped working with this change. I try opening a terminal and running them but they don't run, they get a 'can't find' error but I can double click on the file and select 'run in terminal' and they do (I think) but the terminal window opens and closes faster than I can blink so I cannot see what they are doing, and they don't work. The 970s go to P0 while idle but drop back to P2 as soon as they start crunching.

. . Change always brings issues :(

Stephen

:(
ID: 2003703 · Report as offensive     Reply Quote
Profile Keith Myers Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 29 Apr 01
Posts: 9870
Credit: 930,270,908
RAC: 1,524,487
United States
Message 2003723 - Posted: 22 Jul 2019, 5:00:34 UTC - in response to Message 2003703.  

I adjust fan control when I invoke the overclock script. You do have to run the script once before you start BOINC and after you turn on the host. But it is a 10 second job in the Terminal. This is my script. You can see how it functions and can piece together your own script. You can cutout the PowerMizer mode and the memory and gpu overclock part if you only want fan control. This is fan control for Pascal cards. It gets more complicated if you have Turing cards because they have two fan interfaces that you have to adjust separately

. . I have much work to do in this regard, the fan script hasn't worked for ages but the 'unrestricted' and 'overclock' scripts I had been using to run the 970 in P0 stopped working with this change. I try opening a terminal and running them but they don't run, they get a 'can't find' error but I can double click on the file and select 'run in terminal' and they do (I think) but the terminal window opens and closes faster than I can blink so I cannot see what they are doing, and they don't work. The 970s go to P0 while idle but drop back to P2 as soon as they start crunching.

. . Change always brings issues :(

Stephen

:(

Unrestricted mode has to be run as superuser in Terminal. Are your scripts marked for execution?
Seti@Home classic workunits:20,676 CPU time:74,226 hours
ID: 2003723 · Report as offensive     Reply Quote
Profile Stargate (SA)
Volunteer tester
Avatar

Send message
Joined: 4 Mar 10
Posts: 1850
Credit: 2,251,863
RAC: 7,479
Australia
Message 2003728 - Posted: 22 Jul 2019, 5:34:50 UTC

This why I'm scared to make the switch to Linux, as there is no one close by to help me.. ( Would love to ) but I'm PC dumb!

Steve
ID: 2003728 · Report as offensive     Reply Quote
Profile Keith Myers Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 29 Apr 01
Posts: 9870
Credit: 930,270,908
RAC: 1,524,487
United States
Message 2003732 - Posted: 22 Jul 2019, 6:15:21 UTC - in response to Message 2003728.  

Plenty of help here in the forums. I've been known to walk a Linux newbie through the steps over the phone.
Seti@Home classic workunits:20,676 CPU time:74,226 hours
ID: 2003732 · Report as offensive     Reply Quote
Stephen "Heretic" Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 20 Sep 12
Posts: 4698
Credit: 151,039,529
RAC: 240,166
Australia
Message 2003737 - Posted: 22 Jul 2019, 6:53:23 UTC - in response to Message 2003723.  

Unrestricted mode has to be run as superuser in Terminal. Are your scripts marked for execution?


. . I run them with sudo, is there anything tricky about the run line I may have forgotten? Permissions were the first thing I checked and they are marked for execution by anybody ...

Stephen

< scratching head>
ID: 2003737 · Report as offensive     Reply Quote
Profile Bernie Vine
Volunteer moderator
Volunteer tester
Avatar

Send message
Joined: 26 May 99
Posts: 9863
Credit: 84,900,199
RAC: 58,664
United Kingdom
Message 2003738 - Posted: 22 Jul 2019, 6:56:46 UTC - in response to Message 2003728.  

This why I'm scared to make the switch to Linux, as there is no one close by to help me.. ( Would love to ) but I'm PC dumb!

Steve

It depends what you want to do, in the previous posts Stephen was trying to preserve his machine ID, if you don't care about that, as I didn't, it is not that difficult.

Also I converted crunchers only. I still need my WIndows PC's for gaming, and to be fair I prefer the look and feel of Win, however you can't beat Linux for crunching ;-)

What I basically did was put an SSD into each machine, leave the Win HHD in situ but disconnected, therefore if I need to boot to Windows just a quick replug.

Installing Ubuntu and getting the special app up and running I can now do in probably less that an hour.
ID: 2003738 · Report as offensive     Reply Quote
Stephen "Heretic" Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 20 Sep 12
Posts: 4698
Credit: 151,039,529
RAC: 240,166
Australia
Message 2003739 - Posted: 22 Jul 2019, 6:57:49 UTC - in response to Message 2003732.  

Plenty of help here in the forums. I've been known to walk a Linux newbie through the steps over the phone.


. . Steve would appreciate that help Keith but he is in Adelaide here in OZ!

. . If I can that far down my ToDo list that I upgrade cell phone service contract to include unlimited calls to mobiles then I would call him myself. My landline has unlimited calls to other landlines but not mobiles, and boy, do they know how to charge for those :(

Stephen

<shrug>
ID: 2003739 · Report as offensive     Reply Quote
Stephen "Heretic" Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 20 Sep 12
Posts: 4698
Credit: 151,039,529
RAC: 240,166
Australia
Message 2003741 - Posted: 22 Jul 2019, 7:09:03 UTC - in response to Message 2003738.  
Last modified: 22 Jul 2019, 7:10:36 UTC

This why I'm scared to make the switch to Linux, as there is no one close by to help me.. ( Would love to ) but I'm PC dumb!
Steve

It depends what you want to do, in the previous posts Stephen was trying to preserve his machine ID, if you don't care about that, as I didn't, it is not that difficult.
Also I converted crunchers only. I still need my WIndows PC's for gaming, and to be fair I prefer the look and feel of Win, however you can't beat Linux for crunching ;-)
What I basically did was put an SSD into each machine, leave the Win HHD in situ but disconnected, therefore if I need to boot to Windows just a quick replug.
Installing Ubuntu and getting the special app up and running I can now do in probably less that an hour.

. . Absolute agreement on what you say. I have already advised Steve to throw in an SSD to keep the systems separate and he is (I believe) OK with that but he is nervous about Linux, and the number of times it has bitten my posterior I can understand the problem. But the beauty of Linux is that if you install it and point it, and most importantly the boot loader, all to the new SSD it will NOT touch the windows setup/drive at all, but it is Windows aware and very well so too. It will allow you the option from the first boot screen under advanced options to boot through into Windows and then it politely drops out and Windows loads in a flash.

. . But it is a strange new world for a total newbie and he feels he needs a step by step assist to negotiate it. And sometimes advice from Linux gurus comes from such a level of confidence with the OS that they take a lot for granted and sometimes skip what may be very important things when they give advice.

. . I wish I could reassure him enough to take the step. As you say, when they are on totally independent drives all he has to do is unplug the SSD to get back to Windows. Most importantly, as you also said, when starting from scratch the worst you have to do is go back to the beginning and start again, losing nothing but a little time.

Stephen

:)
ID: 2003741 · Report as offensive     Reply Quote
Profile Keith Myers Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 29 Apr 01
Posts: 9870
Credit: 930,270,908
RAC: 1,524,487
United States
Message 2003743 - Posted: 22 Jul 2019, 7:16:39 UTC - in response to Message 2003737.  

Unrestricted mode has to be run as superuser in Terminal. Are your scripts marked for execution?


. . I run them with sudo, is there anything tricky about the run line I may have forgotten? Permissions were the first thing I checked and they are marked for execution by anybody ...

Stephen

< scratching head>

I can't think of anything other than some possible issues with bash in your .profile file. Are you doing something like this?

keith@Serenity:~$ sudo su
[sudo] password for keith: 
root@Serenity:/home/keith# cd Desktop
root@Serenity:/home/keith/Desktop# ./gpuoverclock.sh

Seti@Home classic workunits:20,676 CPU time:74,226 hours
ID: 2003743 · Report as offensive     Reply Quote
Profile Stargate (SA)
Volunteer tester
Avatar

Send message
Joined: 4 Mar 10
Posts: 1850
Credit: 2,251,863
RAC: 7,479
Australia
Message 2003748 - Posted: 22 Jul 2019, 7:43:41 UTC - in response to Message 2003741.  

I will be putting a SSD in soon, after last comp died I coughed up a lot more than was expected though cheap was enough to set me back on SSD and any other other additions...

Stephen, I thank you and anyone else, but I'm PC dumb when playing around with apps, codes or other..
Again Ty Stephen..
ID: 2003748 · Report as offensive     Reply Quote
Stephen "Heretic" Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 20 Sep 12
Posts: 4698
Credit: 151,039,529
RAC: 240,166
Australia
Message 2003752 - Posted: 22 Jul 2019, 8:05:52 UTC - in response to Message 2003743.  

I can't think of anything other than some possible issues with bash in your .profile file. Are you doing something like this?

keith@Serenity:~$ sudo su
[sudo] password for keith: 
root@Serenity:/home/keith# cd Desktop
root@Serenity:/home/keith/Desktop# ./gpuoverclock.sh


. . Keith you just solved it! I am such a forgetful old sod. I was trying to run it by sudo /unrestricted.sh. I forgot the 'bleep' period. D'oh!

Stephen

:(
ID: 2003752 · Report as offensive     Reply Quote
Stephen "Heretic" Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 20 Sep 12
Posts: 4698
Credit: 151,039,529
RAC: 240,166
Australia
Message 2003753 - Posted: 22 Jul 2019, 8:10:35 UTC - in response to Message 2003748.  

I will be putting a SSD in soon, after last comp died I coughed up a lot more than was expected though cheap was enough to set me back on SSD and any other other additions...

Stephen, I thank you and anyone else, but I'm PC dumb when playing around with apps, codes or other..
Again Ty Stephen..


. . May I suggest you have a word to Erg. He may be able to offer some assistance and he is in your neck of the woods.

. . Do you have a spare/reusable 4GB flashdrive for your Linux Live disk? I am seeing 16GB pen drives going pretty cheap these days if you don't.

Stephen

{in case you hadn't noticed we are right behind you getting up and running ... :) }

:)
ID: 2003753 · Report as offensive     Reply Quote
Profile Keith Myers Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 29 Apr 01
Posts: 9870
Credit: 930,270,908
RAC: 1,524,487
United States
Message 2003754 - Posted: 22 Jul 2019, 8:27:07 UTC - in response to Message 2003752.  

I can't think of anything other than some possible issues with bash in your .profile file. Are you doing something like this?

keith@Serenity:~$ sudo su
[sudo] password for keith: 
root@Serenity:/home/keith# cd Desktop
root@Serenity:/home/keith/Desktop# ./gpuoverclock.sh


. . Keith you just solved it! I am such a forgetful old sod. I was trying to run it by sudo /unrestricted.sh. I forgot the 'bleep' period. D'oh!

Stephen

:(

Yes it is hell getting old and forgetting things. Prepending the command with ./ effectively says "forget about the PATH, I want you to look only in the current directory".
Without the ./ the system looks through the PATH directories in the order given for the executable and if it can't find the program produces a command not found error. Which what you got when you forgot the period.
Seti@Home classic workunits:20,676 CPU time:74,226 hours
ID: 2003754 · Report as offensive     Reply Quote
Stephen "Heretic" Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 20 Sep 12
Posts: 4698
Credit: 151,039,529
RAC: 240,166
Australia
Message 2003771 - Posted: 22 Jul 2019, 12:43:16 UTC - in response to Message 2003754.  
Last modified: 22 Jul 2019, 12:47:54 UTC

Yes it is hell getting old and forgetting things. Prepending the command with ./ effectively says "forget about the PATH, I want you to look only in the current directory".
Without the ./ the system looks through the PATH directories in the order given for the executable and if it can't find the program produces a command not found error. Which what you got when you forgot the period.


. . Yep and with lack of use (and some degree of pre-occupation) that completely slipped my mind ...

. . Well one box is 'upgraded' Now for the Ryzen rig. But I might wait until after the outage ...

Stephen

:)
ID: 2003771 · Report as offensive     Reply Quote
TBar
Volunteer tester

Send message
Joined: 22 May 99
Posts: 4864
Credit: 589,619,879
RAC: 1,393,200
United States
Message 2003781 - Posted: 22 Jul 2019, 14:43:04 UTC - in response to Message 2003771.  

That was an awful lot of drama for nothing in my book. The outcome wasn't any different than just installing a new system with the All-In-One.
After the new system was up and running simply edit the two lines in your new client-state file to reclaim your old host ID.
It should have taken about 45 minutes without any drama, Not Days. You still end up with a dead host with a new ID number, awaiting for tasks to clear so it can be deleted.
Stuff like this scares away the newbees. It really is very easy to just install Ubuntu and the All-In-One package, then just double-click on boincmgr.
ID: 2003781 · Report as offensive     Reply Quote
Stephen "Heretic" Special Project $250 donor
Volunteer tester
Avatar

Send message
Joined: 20 Sep 12
Posts: 4698
Credit: 151,039,529
RAC: 240,166
Australia
Message 2003791 - Posted: 22 Jul 2019, 15:26:08 UTC - in response to Message 2003781.  

That was an awful lot of drama for nothing in my book. The outcome wasn't any different than just installing a new system with the All-In-One.
After the new system was up and running simply edit the two lines in your new client-state file to reclaim your old host ID.
It should have taken about 45 minutes without any drama, Not Days. You still end up with a dead host with a new ID number, awaiting for tasks to clear so it can be deleted.
Stuff like this scares away the newbees. It really is very easy to just install Ubuntu and the All-In-One package, then just double-click on boincmgr.


. . Well as Keith stated the issue wasn't about a new install but about preserving the Host ID without using up Host IDs that would be doomed to be a hole in the volunteer database. Sadly while I was focusing on the process I got careless with the OS install and failed to notice that one keystroke didn't register when setting the machine's host-name so I defeated my own objective. But it is done now. And I am not at this 24/7 so that is only several hours of effort spaced out over 5 days, but you are right the end result was virtually the same as just doing a straight install and doing the ID change after the event. But it is all a learning process, it's just that I so rarely make such changes that by the time it is needed again everything will have changed further and I will have forgotten some things again. Such is life, I am glad for people with patience like Keith.

. . At least I tried ...

Stephen

<shrug>
ID: 2003791 · Report as offensive     Reply Quote
Profile Bernie Vine
Volunteer moderator
Volunteer tester
Avatar

Send message
Joined: 26 May 99
Posts: 9863
Credit: 84,900,199
RAC: 58,664
United Kingdom
Message 2003801 - Posted: 22 Jul 2019, 16:18:00 UTC
Last modified: 22 Jul 2019, 16:21:48 UTC

A bit of help here, one of my Linux machines has just errored 5 AP, all with this error

<core_client_version>7.14.2</core_client_version>
<![CDATA[
<message>
process exited with code 193 (0xc1, -63)</message>
<stderr_txt>
Running on device number: 1
Maximum single buffer size set to:256MB
DATA_CHUNK_UNROLL set to:16
oclFFT plan class overrides requested: global radix 256; local radix 16;  max workgroup size 256
FFA thread block override value:2304
FFA thread fetchblock override value:1152
GPU not found: type=NVIDIA, opencl_device_index=1, device_num=-1
WARNING: boinc_get_opencl_ids failed with code -1
OpenCL platform detected: NVIDIA Corporation
WARNING: BOINC supplied wrong platform!
Number of OpenCL devices found : 1 
BOINC assigns slot on device #1.
WARNING: BOINC failed to provide OpenCL device, using own enumeration abilities
SIGSEGV: segmentation violation
Stack trace (7 frames):
../../projects/setiathome.berkeley.edu/astropulse_7.08_x86_64-pc-linux-gnu__opencl_nvidia_100(boinc_catch_signal+0x4d)[0x4c6fdd]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x12890)[0x7fdf554d2890]
/usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1(+0xf5315)[0x7fdf524e3315]
../../projects/setiathome.berkeley.edu/astropulse_7.08_x86_64-pc-linux-gnu__opencl_nvidia_100[0x485cf9]
../../projects/setiathome.berkeley.edu/astropulse_7.08_x86_64-pc-linux-gnu__opencl_nvidia_100[0x46a1df]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x7fdf54387b97]
../../projects/setiathome.berkeley.edu/astropulse_7.08_x86_64-pc-linux-gnu__opencl_nvidia_100[0x40bd89]

Exiting...

</stderr_txt>
]]>


I am guessing this line is the problem

"WARNING: BOINC failed to provide OpenCL device, using own enumeration abilities"

Any assistance would be welcome, it also now has 142 tasks "waiting to start"

I have shut it down and checked the riser connections, and now rebooted OK and seem to be crunching OK

Yes it does detect OpenCL on startup

22/07/2019 17:09:20	Data directory: /home/bav/BOINC	
22/07/2019 17:09:20	CUDA: NVIDIA GPU 0: GeForce GTX 1060 3GB (driver version 418.56, CUDA version 10.1, compute capability 6.1, 3018MB, 2695MB available, 3936 GFLOPS peak)	
22/07/2019 17:09:20	CUDA: NVIDIA GPU 1: GeForce GTX 1060 3GB (driver version 418.56, CUDA version 10.1, compute capability 6.1, 3019MB, 2950MB available, 3936 GFLOPS peak)	
22/07/2019 17:09:20	OpenCL: NVIDIA GPU 0: GeForce GTX 1060 3GB (driver version 418.56, device version OpenCL 1.2 CUDA, 3018MB, 2695MB available, 3936 GFLOPS peak)	
22/07/2019 17:09:20	OpenCL: NVIDIA GPU 1: GeForce GTX 1060 3GB (driver version 418.56, device version OpenCL 1.2 CUDA, 3019MB, 2950MB available, 3936 GFLOPS peak)	
SETI@home	22/07/2019 17:09:20	Found app_info.xml; using anonymous platform	
22/07/2019 17:09:21	[libc detection] gathered: 2.27, Ubuntu GLIBC 2.27-3ubuntu1	
ID: 2003801 · Report as offensive     Reply Quote
Previous · 1 . . . 122 · 123 · 124 · 125 · 126 · 127 · 128 . . . 136 · Next

Message boards : Number crunching : Setting up Linux to crunch CUDA90 and above for Windows users


 
©2019 University of California
 
SETI@home and Astropulse are funded by grants from the National Science Foundation, NASA, and donations from SETI@home volunteers. AstroPulse is funded in part by the NSF through grant AST-0307956.