Nvidia/AMD Cuda/OpenCL on Boinc projects - which card to buy?

Message boards : GPUs : Nvidia/AMD Cuda/OpenCL on Boinc projects - which card to buy?
Message board moderation

To post messages, you must log in.

1 · 2 · 3 · 4 . . . 6 · Next

AuthorMessage
Peter Hucker
Avatar

Send message
Joined: 6 Oct 06
Posts: 1144
United Kingdom
Message 101547 - Posted: 10 Nov 2020, 20:07:24 UTC

I normally consider which card to buy for Boinc based on the "theoretical floating point speed" quoted for the card in Techpowerup reviews, taking account of whether the project I want to run it on is single or double precision.

But I noticed on PrimeGrid that Cuda tasks are horrendously faster than they should be (by a factor of 2 by looking at other people's results - I only have AMD cards at present). On Einstein there seems to be very little difference. Does anyone know which projects write more efficient Cuda code and how much of a difference it makes?

I'm trying to work out if it's worth buying a more expensive and theoretically slower Nvidia card because it can run the better Cuda coding on some projects.
ID: 101547 · Report as offensive
ProDigit

Send message
Joined: 8 Nov 19
Posts: 642
United States
Message 101570 - Posted: 14 Nov 2020, 9:52:05 UTC - in response to Message 101547.  
Last modified: 14 Nov 2020, 9:56:20 UTC

I normally consider which card to buy for Boinc based on the "theoretical floating point speed" quoted for the card in Techpowerup reviews, taking account of whether the project I want to run it on is single or double precision.

But I noticed on PrimeGrid that Cuda tasks are horrendously faster than they should be (by a factor of 2 by looking at other people's results - I only have AMD cards at present). On Einstein there seems to be very little difference. Does anyone know which projects write more efficient Cuda code and how much of a difference it makes?

I'm trying to work out if it's worth buying a more expensive and theoretically slower Nvidia card because it can run the better Cuda coding on some projects.

So far, the best bang for your buck, is not always the GPU that'll get you the best performance.
To get the best, get the GPU with the most cuda cores. That'll be the RTX 3090.
If they have too many cuda cores (most likely) you'll be able to double, triple, quadruple, octuple,.... whatever-uple the project, until it's running at maximum performance.

If you're looking for the best bang for the buck, it'll be a toss-up between the $700 3080 and $500 3070.
I'm leaning towards the 3080, because it's faster, and has faster RAM, but also uses 325W, vs 225W on the 3070 (stock).
The 3080 can be pushed to run about as fast as it does at 250W or perhaps even lower wattages.
The 3070 is supposed to go for $500, but it'll be a while until it will reach this price. It also can be lowered in wattage. So it'll be up to you, to decide what $$$ amount you want to spend in terms of initial purchase price, running cost, and what your case can handle in terms of heat.
All RTX 3000 series GPUs (3090, 3080, 3070), are currently in high demand, and scalpers are trying to sell them for prices 2 to 3x MSRP.
Give them 1 to 2 months, for prices to come down.
The $500 MSRP priced 3070 would perform very similar to the $1200 MSRP priced RTX 2080Ti.
On average it's <5% slower. The 3080 is on average 10-15% faster than the 2080Ti.
So: 2060 < 2060 KO < 2060 Super < 2070 < 2070 Super < 2080 < 2080 Super < 3070 < 2080 Ti < 3080 < 3090
ID: 101570 · Report as offensive
robsmith
Volunteer tester
Help desk expert

Send message
Joined: 25 May 09
Posts: 976
United Kingdom
Message 101571 - Posted: 14 Nov 2020, 10:33:58 UTC - in response to Message 101547.  

You need to look at the individual projects' forum to see what people have found.
You have identified one thing to consider - not every project has well optimised applications and this applies to all three major GPU types. For now we can discount Intel as they are so far behind the other two. Not every project has the resources available to them to highly optimise for the most recent nVidia cards. Also to consider is that some projects require double precision which is not always available on nVidia, but is available on most AMD.
All this means that the on-paper performance is not always a good guide to what happens in the real world when faced with the real data and applications we see from projects.
In your position I would stick with what you know (You it's AMD, me it's nVidia) as there is a much smaller learning curve when moving up their own performance-price curve than that encountered when flipping from one "breed" to the other.
ID: 101571 · Report as offensive
Peter Hucker
Avatar

Send message
Joined: 6 Oct 06
Posts: 1144
United Kingdom
Message 101575 - Posted: 14 Nov 2020, 23:27:29 UTC - in response to Message 101570.  
Last modified: 14 Nov 2020, 23:44:29 UTC

I normally consider which card to buy for Boinc based on the "theoretical floating point speed" quoted for the card in Techpowerup reviews, taking account of whether the project I want to run it on is single or double precision.

But I noticed on PrimeGrid that Cuda tasks are horrendously faster than they should be (by a factor of 2 by looking at other people's results - I only have AMD cards at present). On Einstein there seems to be very little difference. Does anyone know which projects write more efficient Cuda code and how much of a difference it makes?

I'm trying to work out if it's worth buying a more expensive and theoretically slower Nvidia card because it can run the better Cuda coding on some projects.

So far, the best bang for your buck, is not always the GPU that'll get you the best performance.
To get the best, get the GPU with the most cuda cores. That'll be the RTX 3090.
If they have too many cuda cores (most likely) you'll be able to double, triple, quadruple, octuple,.... whatever-uple the project, until it's running at maximum performance.

If you're looking for the best bang for the buck, it'll be a toss-up between the $700 3080 and $500 3070.
I'm leaning towards the 3080, because it's faster, and has faster RAM, but also uses 325W, vs 225W on the 3070 (stock).
The 3080 can be pushed to run about as fast as it does at 250W or perhaps even lower wattages.
The 3070 is supposed to go for $500, but it'll be a while until it will reach this price. It also can be lowered in wattage. So it'll be up to you, to decide what $$$ amount you want to spend in terms of initial purchase price, running cost, and what your case can handle in terms of heat.
All RTX 3000 series GPUs (3090, 3080, 3070), are currently in high demand, and scalpers are trying to sell them for prices 2 to 3x MSRP.
Give them 1 to 2 months, for prices to come down.
The $500 MSRP priced 3070 would perform very similar to the $1200 MSRP priced RTX 2080Ti.
On average it's <5% slower. The 3080 is on average 10-15% faster than the 2080Ti.
So: 2060 < 2060 KO < 2060 Super < 2070 < 2070 Super < 2080 < 2080 Super < 3070 < 2080 Ti < 3080 < 3090


An RTX 3090. Wow, £1685 for a card that's half the speed at DP (which two of the 4 projects I run use) as my 7 year old AMD R9 280X which I got for £70 2nd hand. So double an order of magnitude worse value for money. Is that the best they can do? Even SP is only 9 times faster, but for 24 times the price.

Looks like the only sensible thing to buy for Boinc GPU use is an old AMD which still has proper DP on it, and once those have all worn out and aren't available any more, a 2nd hand professional card.

Ok, you were right about the 3080, if you're running SP only. My spreadsheet rates that as 35% better bang for the buck than my current R9 280X card. But for DP it's 12 times worse value!

For reference, I'm running Einstein and Collatz (both single precision), and Milkyway and Primegrid (both double precision).
ID: 101575 · Report as offensive
Peter Hucker
Avatar

Send message
Joined: 6 Oct 06
Posts: 1144
United Kingdom
Message 101576 - Posted: 14 Nov 2020, 23:33:58 UTC - in response to Message 101571.  
Last modified: 14 Nov 2020, 23:48:56 UTC

You need to look at the individual projects' forum to see what people have found.
You have identified one thing to consider - not every project has well optimised applications and this applies to all three major GPU types. For now we can discount Intel as they are so far behind the other two. Not every project has the resources available to them to highly optimise for the most recent nVidia cards. Also to consider is that some projects require double precision which is not always available on nVidia, but is available on most AMD.
All this means that the on-paper performance is not always a good guide to what happens in the real world when faced with the real data and applications we see from projects.
In your position I would stick with what you know (You it's AMD, me it's nVidia) as there is a much smaller learning curve when moving up their own performance-price curve than that encountered when flipping from one "breed" to the other.


I'm currently making decisions on a spreadsheet. I enter the price, the DP and SP speed from a Techpowerup review, and it calculates which is best value for money. I've set a 2nd hand card to be worth half as much as a new one, as it will probably last half as long. I've told the spreadsheet how many projects I run on SP and DP, and it works out which is best. I use R9 280X, second hand a 7 year old design, £70 each. They score 5.85. New AMDs score around 1.7 (they have half the DP ratio, plus you're paying extra for new technology). New or used Nvidias are off the scale at 0.2 to 0.6. 1:32 DP ratio? I don't think so. Even only looking at SP work, a new AMD scores the same as my old ones, and a Nvidia lower!

At least CPUs are improving, instead of going backwards like GPUs. The Ryzens are lovely. I'm shortly going to buy a Ryzen 9 3900X (the 3950X and the 5900X are a little faster but way more expensive). £350 for the CPU. £50 for the MB and £50 for the RAM. Everything else is scrap parts lying about. 3.2 times faster than my current best computer, an i5-8600K.
ID: 101576 · Report as offensive
Profile Keith Myers
Volunteer tester
Help desk expert
Avatar

Send message
Joined: 17 Nov 16
Posts: 599
United States
Message 101577 - Posted: 15 Nov 2020, 1:24:57 UTC

You'll never find consumer Nvidia cards matching AMD FP64 performance. Nvidia deliberately hamstrings FP64 performance on consumer cards to force the user that wants that kind calculation to their professional series called Tesla and Quadro which costs 3X-4X the price of the consumer cards.

They have in the past made "prosumer" cards like the TitanX or TitanV which have full 1:2 FP64 performance. The latest Nvidia Ampere series halved the FP64 performance of the previous Turing series. Now at a pathetic 1:64 ratio.

The worst the AMD cards have ever been is 1:16 FP64 ratio which their latest series has.

But luckily, only a few projects utilize FP64 calculations so you are not alway penalized for choosing Nvidia over AMD.
ID: 101577 · Report as offensive
Profile David Riese

Send message
Joined: 24 Dec 05
Posts: 50
United States
Message 101579 - Posted: 15 Nov 2020, 4:04:18 UTC - in response to Message 101576.  

Here are Collatz @ Home performance data, generated using my Macs and optimized crunching parameters.

AMD RX 5700 XT - ~7 M credits/day
NVIDIA GTX 1080 Ti - ~7 M credits/day
AMD RX Vega 56/64 - ~6.5 M credits/day
NVIDIA GTX 1080 - ~5 M credits/day
AMD RX 580 - ~4 M credits/day
NVIDIA GTX 980 Ti - ~4 M credits/day
NVIDIA GTX 980 - ~3 M credits/day

Some folks may achieve better numbers than me through undervoltage, overclocking, and better optimization of the crunching parameters. And, of course, the performance of a particular GPU under MacOS may be different than under Windows or Linux. Finally, some projects may be better at utilizing AMD GPUs than NVIDIA GPUs and vice versa. So, I agree with the advice of one of the previous posters that you check the message boards of the projects for which you crunch. FWIW, NVIDIA GPUs appear to be a much better bang for the buck than AMD GPUs when crunching Collatz @ Home tasks. But the most recent versions of the MacOS are not compatible with contemporary NVIDIA GPUs.

Good luck!
David J. Riese II, PhD
Auburn University Harrison School of Pharmacy

ID: 101579 · Report as offensive
Peter Hucker
Avatar

Send message
Joined: 6 Oct 06
Posts: 1144
United Kingdom
Message 101587 - Posted: 16 Nov 2020, 1:38:03 UTC - in response to Message 101577.  

You'll never find consumer Nvidia cards matching AMD FP64 performance. Nvidia deliberately hamstrings FP64 performance on consumer cards to force the user that wants that kind calculation to their professional series called Tesla and Quadro which costs 3X-4X the price of the consumer cards.
One of two reasons I hate Nvidia. The other is their deliberate slowing down of OpenCL support. Both of these things are underhanded.

But luckily, only a few projects utilize FP64 calculations so you are not always penalized for choosing Nvidia over AMD.
Milkyway and Primegrid both use FP64. Einstein and Collatz do not. Since those are the 4 projects I run on GPUs, FP64 is important.
ID: 101587 · Report as offensive
Peter Hucker
Avatar

Send message
Joined: 6 Oct 06
Posts: 1144
United Kingdom
Message 101588 - Posted: 16 Nov 2020, 1:52:53 UTC - in response to Message 101579.  

FWIW, NVIDIA GPUs appear to be a much better bang for the buck than AMD GPUs when crunching Collatz @ Home tasks.
Depends if you buy new or used. I consider a used card to be worth half a new one, as it's probably 50% worn out. Taking that factor into consideration, the best cards I've found for Collatz or any other single precision project like Einstein are as follows (the number is FP32 GFLOPS per UK pound when the card is 2nd hand):

Nvidia RTX 3080 - 79.39
AMD RX 580 - 75.22
AMD RX 570 - 68.85
AMD R9 290X - 67.05
Nvidia RTX 3070 - 66.81
AMD Pro Duo - 63.75
AMD Vega 56 - 60.25
AMD RX 5500 - 59.72
AMD Vega 64 - 58.63
AMD R9 280X - 58.51 (The ones I use, since they're the best value for FP64)

As you can see, Nvidia don't have many candidates.

And now for FP64:

AMD Radeon R9 280X - 14.63
AMD FirePro W8100 - 11.4
AMD Firepro S9100 - 10.19
AMD Radeon HD 7970 - 10.07
AMD Radeon HD 7950 - 9.56
AMD FirePro S9150 - 8.63
AMD Radeon R9 290X - 8.38
AMD Radeon HD 6990 - 7.29
AMD Radeon R9 290 - 6.73
AMD Radeon R9 390 - 6.27

So zero Nvidias!

But the most recent versions of the MacOS are not compatible with contemporary NVIDIA GPUs.
Why have Apple never realised compatibility is important to people? They do it with everything, I remember when serial and parallel ports changed to USB. Some PCs are still made with them on now! But Apple just removed them (cost saving probably, which is insane considering how much an Apple costs).
ID: 101588 · Report as offensive
ProDigit

Send message
Joined: 8 Nov 19
Posts: 642
United States
Message 101644 - Posted: 19 Nov 2020, 16:11:08 UTC
Last modified: 19 Nov 2020, 16:12:26 UTC

I don't think DP makes that big of a difference.
Most projects use *some* DP, but mostly 32 bit float.
Even projects that use more DP, still use single precision.

You'd have to compare how the GPU performs per watt, or PPD performance in a project.
That's more significant, than it's DP performance.
Most projects I run, favor Nvidia over AMD.
Especially those running CUDA.
ID: 101644 · Report as offensive
Profile Jord
Volunteer tester
Help desk expert
Avatar

Send message
Joined: 29 Aug 05
Posts: 14688
Netherlands
Message 101655 - Posted: 19 Nov 2020, 23:42:34 UTC - in response to Message 101644.  

Even projects that use more DP, still use single precision.
Maybe so, but the problem with the projects that require Double Precision, is that you cannot use a Single Precision GPU, at all. So then the issue is moot whether the project only uses DP or also (in part) SP.
ID: 101655 · Report as offensive
Peter Hucker
Avatar

Send message
Joined: 6 Oct 06
Posts: 1144
United Kingdom
Message 101661 - Posted: 20 Nov 2020, 7:35:22 UTC - in response to Message 101644.  

I don't think DP makes that big of a difference.
Most projects use *some* DP, but mostly 32 bit float.
Even projects that use more DP, still use single precision.

You'd have to compare how the GPU performs per watt, or PPD performance in a project.
That's more significant, than it's DP performance.
Most projects I run, favor Nvidia over AMD.
Especially those running CUDA.


Milkyway is appalling on a card with a low DP ratio.

I've never seen any project that's good for Nvidia. I've often compared my 7 year old AMD on Primegrid to my wingman using a Nvidia, and his takes way longer.
ID: 101661 · Report as offensive
Peter Hucker
Avatar

Send message
Joined: 6 Oct 06
Posts: 1144
United Kingdom
Message 101662 - Posted: 20 Nov 2020, 7:35:39 UTC - in response to Message 101655.  

Even projects that use more DP, still use single precision.
Maybe so, but the problem with the projects that require Double Precision, is that you cannot use a Single Precision GPU, at all. So then the issue is moot whether the project only uses DP or also (in part) SP.
No signatures please.
ID: 101662 · Report as offensive
Profile Keith Myers
Volunteer tester
Help desk expert
Avatar

Send message
Joined: 17 Nov 16
Posts: 599
United States
Message 101663 - Posted: 20 Nov 2020, 8:20:21 UTC - in response to Message 101661.  

Surprised you never ran tasks at Seti. Nvidia was much, much faster than any other vendor. Magnitudes difference.
GPUGrid is where my cards run best. No other vendors allowed.
ID: 101663 · Report as offensive
Peter Hucker
Avatar

Send message
Joined: 6 Oct 06
Posts: 1144
United Kingdom
Message 101665 - Posted: 20 Nov 2020, 8:26:34 UTC - in response to Message 101663.  

Surprised you never ran tasks at Seti.
I've always had other projects I wanted to run and never got to SETI. I was actually just about to when they closed down!

Nvidia was much, much faster than any other vendor. Magnitudes difference. GPUGrid is where my cards run best. No other vendors allowed.
Only due to the programmer deciding to write better code for Cuda. Every time I look at buying a card, I find AMD gives more bang for the buck. They're best at CPUs too, the Ryzens are way better than Intel. As for Nvidia deliberately crippling double precision and OpenCL, that's criminal in my book. They're boycotted!
ID: 101665 · Report as offensive
robsmith
Volunteer tester
Help desk expert

Send message
Joined: 25 May 09
Posts: 976
United Kingdom
Message 101666 - Posted: 20 Nov 2020, 8:37:09 UTC

Quite a number of compliers, or more specifically linkers, will compile part of an application using DP and other parts using SP, however such applications will indicate as requiring DP capability to run. This means that they will fail to run on a processor that does not have either built-in DP, or some form of "DP emulation". Of course it is possible to compile DP emulation into the application so it will run on SP processors, but that really does lead to a considerable loss in performance (last time I used one of these compliers the loss in performance was more than a ten-fold increase in execution time over the same code running in SP only mode).

Discussions about speed advantages are fairly mute in applications where accuracy is vital - let's say one uses SP to calculate the orbital mechanics for an asteroid and that shows it will miss Earth by a safe margin, however, run the same code using DP one finds that on the same orbit the asteroid will collide with Earth. In such a case I would rather take a bit longer (even ten times longer) to get to the correct answer than rush in and get the wrong answer.
ID: 101666 · Report as offensive
robsmith
Volunteer tester
Help desk expert

Send message
Joined: 25 May 09
Posts: 976
United Kingdom
Message 101667 - Posted: 20 Nov 2020, 8:58:31 UTC - in response to Message 101665.  

Surprised you never ran tasks at Seti.
I've always had other projects I wanted to run and never got to SETI. I was actually just about to when they closed down! [/quote]
First inaccuracy - SETI@Home HAS NOT closed down, it has gone into hibernation, probably for a year or so, but it is NOT CLOSED.

Nvidia was much, much faster than any other vendor.

Yes, for a number of reasons, most significant being that their GPUs were better at the set of calculations needed for SETI than AMD processors.

Magnitudes difference. GPUGrid is where my cards run best. No other vendors allowed.

If a project codes and complies their application for a particular processor then that is their choice - perhaps they only had a person who could code for AMD GPUs?

Only due to the programmer deciding to write better code for Cuda.

Not quite right, someone, after applying a lot of heavy weight number theory decided to try a different approach to how one block of code was arranged, this block of code being common to all processors. By applying these changes, and he was able to get quite a jump in performance, but it only worked with any degree of accuracy on nVidia GPUs. Later he used a few tricks available in the operating system to improve the way the GPU and CPU parts of the application communicated with each other - again this only worked on nVdia cards and under Linux (not for the want of trying by people who were AMD GPU programmers, and Windows programmers.).

Every time I look at buying a card, I find AMD gives more bang for the buck. They're best at CPUs too, the Ryzens are way better than Intel.

Your money, your decision (I happen to agree with you about Ryzen CPUs - they have jumped over Intel both in terms of price and performance in the last couple of years.

As for Nvidia deliberately crippling double precision and OpenCL, that's criminal in my book. They're boycotted!

Again, not true. AMD have OpenCL built into their firmware, and the whole processing unit is optimised around OpenCL. nVidia came late to the OpenCL party, and had to work it into their existing system, and since that is optimised around CUDA there are features of OpenCL and CUDA that do not play well with each other in therms of performance. It is interesting that many of the mega-computers that use GPUs and GPU-like processors use nVidia and not AMD because of the scaling potential that the latter have over AMD.
ID: 101667 · Report as offensive
Peter Hucker
Avatar

Send message
Joined: 6 Oct 06
Posts: 1144
United Kingdom
Message 101684 - Posted: 21 Nov 2020, 15:18:44 UTC - in response to Message 101666.  

Quite a number of compliers, or more specifically linkers, will compile part of an application using DP and other parts using SP, however such applications will indicate as requiring DP capability to run. This means that they will fail to run on a processor that does not have either built-in DP, or some form of "DP emulation". Of course it is possible to compile DP emulation into the application so it will run on SP processors, but that really does lead to a considerable loss in performance (last time I used one of these compliers the loss in performance was more than a ten-fold increase in execution time over the same code running in SP only mode).

Discussions about speed advantages are fairly mute in applications where accuracy is vital - let's say one uses SP to calculate the orbital mechanics for an asteroid and that shows it will miss Earth by a safe margin, however, run the same code using DP one finds that on the same orbit the asteroid will collide with Earth. In such a case I would rather take a bit longer (even ten times longer) to get to the correct answer than rush in and get the wrong answer.
Don't all GPUs have DP? It's just a matter of how slow it is. For example a new Nvidia tends to be 1:64, so the code you spoke of being ten times slower emulating DP in the SP part of the card, would be faster by a factor of 6.4 over running DP straight on the card.
ID: 101684 · Report as offensive
Peter Hucker
Avatar

Send message
Joined: 6 Oct 06
Posts: 1144
United Kingdom
Message 101685 - Posted: 21 Nov 2020, 15:28:49 UTC - in response to Message 101667.  

First inaccuracy - SETI@Home HAS NOT closed down, it has gone into hibernation, probably for a year or so, but it is NOT CLOSED.
From what I heard they were re-looking at the results so far using in house processing. I guess further down the line they might need us again, but I've not heard anything definite.

Yes, for a number of reasons, most significant being that their GPUs were better at the set of calculations needed for SETI than AMD processors.
I thought it was because a 3rd party rewrote the SETI code to make it way more efficient and he happened to be a CUDA programmer. The same could have been done in OpenCL. I can't believe AMD cards are missing a key bit of code!

Your money, your decision
Are you implying I'm wrong? I check the floating point speed on Techpowerup, and look at the price of the card. AMD is always cheaper/faster. If I see a Nvidia that's cheaper that year, I'll buy one.

(I happen to agree with you about Ryzen CPUs - they have jumped over Intel both in terms of price and performance in the last couple of years.
AMD have often been better value for money for CPUs, but I went off them a long time ago because of this!

Again, not true. AMD have OpenCL built into their firmware, and the whole processing unit is optimised around OpenCL. nVidia came late to the OpenCL party, and had to work it into their existing system, and since that is optimised around CUDA there are features of OpenCL and CUDA that do not play well with each other in therms of performance. It is interesting that many of the mega-computers that use GPUs and GPU-like processors use nVidia and not AMD because of the scaling potential that the latter have over AMD.
Well I was told (by someone in one of these forums) they slowed OpenCL down to make Cuda look better.
ID: 101685 · Report as offensive
robsmith
Volunteer tester
Help desk expert

Send message
Joined: 25 May 09
Posts: 976
United Kingdom
Message 101690 - Posted: 21 Nov 2020, 16:10:11 UTC - in response to Message 101684.  

Your comment shows how little you know about GPUs.
Sadly not all GPU have DP burnt into their hardware.
AMD have had it over the majority of their GPU for a fair time (if you needed DP back when that arrived then that was certainly one up to AMD), whereas nVidia consumer grade GPUs its not been there that long, with the majority nVidia achieves DP by emulation - hence the performance hit. However the nVidia very high end processors, normally considered to be for "workstation" or "HPC" use, have had DP for some considerable time - these cards are monstrously expensive (topping out at about £5.5k each), and their performance on DP is eye-watering fast and they are very capable of being used in high count parallel arrays to give even more spectacular performance.
ID: 101690 · Report as offensive
1 · 2 · 3 · 4 . . . 6 · Next

Message boards : GPUs : Nvidia/AMD Cuda/OpenCL on Boinc projects - which card to buy?

Copyright © 2021 University of California. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.