# DoubleMark (Prime Benchmark) - Open Source



## Licht

_Welcome to the most posted in topic in coding and programming!_

After much work and allot of delays and errors i have finally finished build 3.

8, 30th : Next version is version 1. Stress testing is near finished and has been released to testers, proven to be highly effective and efficient. All glitches from last version are already fixed. Next version is from scratch so it'll be a lot cleaner, way different. Drawback being it takes a while to recode everything.

http://www.overclock.net/downloads/3...ml#post3674602


----------



## Duckydude

Nice work







, worked perfectly for me







. This sounds like a really cool project, would be a nice new benchmarking utility that we could compare around here.

Here are my results for 25K:


----------



## Licht

Quote:


Originally Posted by *Duckydude* 
Nice work







, worked perfectly for me







. This sounds like a really cool project, would be a nice new benchmarking utility that we could compare around here.

Here are my results for 25K:









I'm working on build 3 for you Q6600 guys, will be done very soon. Should support the full 16 cores. (I will have to do a bit of math before anything so i can optimize it.)


----------



## dskina

Running at stock everything, atm.


----------



## Licht

Quote:


Originally Posted by *dskina* 
Running at stock everything, atm.










I don't think B2 counts prime numbers incorrectly (cross thread integer changed must throw it off.)


----------



## The Bartender Paradox

A question and a suggestion-

What method are you using to check for primes?

Also perhaps you could include some info on how many prime numbers there are for our given length chosen, or spit out an error when the number of primes found don't match the number of primes there actually is. So we can see if our computer screwed up calculating.

Oh, and a B2 screeney: (stock Q6600)









Edit: err.. compare this to Duckydude, I found 2 more primes


----------



## Licht

Quote:


Originally Posted by *The Bartender Paradox* 
A question and a suggestion-

What method are you using to check for primes?

Also perhaps you could include some info on how many prime numbers there are for our given length chosen, or spit out an error when the number of primes found don't match the number of primes there actually is. So we can see if our computer screwed up calculating.

Oh, and a B2 screeney: (stock Q6600)









Edit: err.. compare this to Duckydude, I found 2 more primes









Yeah i already confirmed that it was counting prime numbers wrong. It has something to do with cross thread value accessing. It is an easy fix and will be resolved in build 3. My method for detecting prime numbers is a simple and efficient method, however i am keeping it a secret until V1.0 when i go open source. (Unless plans change, although i promise to give that code up on V1.0 regardless, it is done in a single line of code!) Also, yeah i am also working on a sum check for Build 3 or 4.

Thanks for the help man, based on your noticing the 2 number difference in detected primes i can now confirm the error is within the crossthread memory access. I will find a way around it in build 3, shouldn't be too hard.

Ok, long story short. *Memory access is bugged, working on the issue be done soon. All scores are indeed valid the error is in the memory not in the system itself, i personally guarantee all scores are 100% accurate up to a 10th (It is impossible on Windows to measure a length of time more precise then this) of a second* (the score variances between tests are caused by other threads interfering with my applications processing, the more programs you turn off the less it will vary. If i forbid this it could cause system instability, this issue is present in every benchmark.)


----------



## ThePope

Sweet Licht! I Cannot wait to see more of your work


----------



## Polska

Cool stuff will keep an eye on this. Here is one result of mine. This is on stock e6850 (having system stability issues trying to determine if its to do with overclocking







).









Also, after I ran a test, the radio buttons for the number of threads all became accessible (screenshot 2).










I don't know if you detect how many cores the system has (because mine only had 1 and 2 available on program launch) but once they were available I ran it with 4 threads (on a dual core) and the program crashed. I assume you want the other options disabled, just wanted to let you know they are available after running the benchmark once.


----------



## Licht

Quote:


Originally Posted by *Polska* 
Cool stuff will keep an eye on this. Here is one result of mine. This is on stock e6850 (having system stability issues trying to determine if its to do with overclocking







).









Also, after I ran a test, the radio buttons for the number of threads all became accessible (screenshot 2).










I don't know if you detect how many cores the system has (because mine only had 1 and 2 available on program launch) but once they were available I ran it with 4 threads (on a dual core) and the program crashed. I assume you want the other options, just wanted to let you know they are available after running the benchmark once.

I had forgotten about that hickup, it came after i ran into some autoscaling issues with my adaptive threading. I meant to lock them off but apparently overlooked that before releasing (i was rushing quite a bit.) Now i am working on finishing up my adaptive threading code, when i am done it will be capable of any amount of threads no matter the number without losing any performance. This was intended for build 2 like i said but the rush left me locking the controls then forgetting to remove said renabling code.

No, i am not detecting how many cores the system has right now since that could leave the program locking off controls for rigs in the future when CPU access may be changed. Since you can run any amount of threads on any CPU it doesn't matter, so i classified those controls as thread controls instead of core usage controls. Although you can run 16 threads on a dual core for example, you will get better performance with 2.
*
PS : Just realized something, don't touch more threads then you have cores. The way i have thread affinity set up for adaptive threading will crash it after all...*


----------



## Kamakazi

1st of all this is cool.

Second of all, where do I get the rad megaman background?


----------



## afzsom

Using build 2, here are the computer specs:
E6600 @ 3.6GHz (1.425v, 400x9)
DDR2-800 Corsair XMS2 (5-5-5-12 2T)
Windows XP Pro SP2 32bit


----------



## Polska

Quote:



Originally Posted by *Kamakazi*


Second of all, where do I get the rad megaman background?


It's actually part of a larger background I whipped up quickly from something I came across on digg. (It's made so it looks like they are standing on the taskbar







)
http://polska.laggers.ca/img/bg.jpg

Here without the Polska text if you wish to use it.
http://polska.laggers.ca/img/nsbg.jpg

The psd (photoshop) if you want to totally change it:
http://polska.laggers.ca/img/sbg.zip

EDIT: sorry for taking it off topic.


----------



## Licht

Quote:



Originally Posted by *Polska*


It's actually part of a larger background I whipped up quickly from something I came across on digg. (It's made so it looks like they are standing on the taskbar







)
http://polska.laggers.ca/img/bg.jpg

Here without the Polska text if you wish to use it.
http://polska.laggers.ca/img/nsbg.jpg

The psd (photoshop) if you want to totally change it:
http://polska.laggers.ca/img/sbg.zip

EDIT: sorry for taking it off topic.


I don't care. Go as offtopic as you like.


----------



## C-bro

Just figured I'd let you know that I came across the same issue with the run once and unlock all 16 threads. But another error I have found is if you run a lengthy benchmark and close the application (with the X), it continues to run in the background. I had originally tested with 75k and I shut it down, then like 5 minutes later I had the result pop up. You may want to add a "Shutdown" button that uses Application.Exit(). I *believe* that not only stops all threads but also frees resources when working with C#. It's the way to properly close a program from a button.


----------



## LoGGi!

I found no other glitches than the one that makes you able to choose any amount of threads. Seems cool though, ran it in 18453 with my 6400+ at 3512 MHz. Seems the AMD's keep up a bit better compared to the Intels in Prime than Pi


----------



## Dueling Banjo's

couldnt u just run multiple instances of super pi?


----------



## Licht

Quote:


Originally Posted by *Dueling Banjo's* 
couldnt u just run multiple instances of super pi?

This is finding prime numbers, not calculating the value of pi, which is different. Ontop of that running 2 instances of superpi requires you to set affinity for each one. And ontop of that you couldn't get an accurate score off of it. It also makes it impossible for the cores to work together, this program is far superior to super pi (or will be upon completion) in measuring the power of multi-core CPU.

Quote:

Just figured I'd let you know that I came across the same issue with the run once and unlock all 16 threads. But another error I have found is if you run a lengthy benchmark and close the application (with the X), it continues to run in the background. I had originally tested with 75k and I shut it down, then like 5 minutes later I had the result pop up. You may want to add a "Shutdown" button that uses Application.Exit(). I believe that not only stops all threads but also frees resources when working with C#. It's the way to properly close a program from a button.
Yeah i am working on that, i need to access the close application button event. I also need to lock the maximize button. I have the access any number of threads fixed, and i'm pretty sure i have all 16 threads working. Releasing the next build with all this plus the stuff i didn't mention after i fix a few things.

Quote:

I found no other glitches than the one that makes you able to choose any amount of threads. Seems cool though, ran it in 18453 with my 6400+ at 3512 MHz. Seems the AMD's keep up a bit better compared to the Intels in Prime than Pi
Any program that allows the cores to work together will allow the CPU to use it's HT links, thus giving AMD a slight advantage. I am also considering parallel processing to further increase multi-core utilization. Which would at the same time give AMD even more of an advantage (*any* program that uses multi-core well gives AMD an advantage, it is just what comes with good multi-core programming and HT links. That also means Nahalem will gain advantages, any CPU with HT links will.)

\\/ \\/ \\/
Ok long story short, the bugs in Build2 are fixed and Build3's bugs simply need to be corrected then i am done.


----------



## LoGGi!

Nice, keep up the work


----------



## Licht

Well, i am stuck. Anyone with knowledge of C# they think is greater then mine please add me on a messenger i need assistance correcting 2 issues. Details upon adding me.


----------



## Licht

Bump, Prime Benchmark is now open source. I have attached the source code in RAR form (0.2 compression, uncompressed is 512k.) I abandoned my own development of Prime Benchmark because of an inability to correct a few glitches. I scoured long and hard to correct the issue and ask the communities of Overclock.net have fun with the source code and feel free to continue work on it on your own. I ask that you keep "Original code by Licht" in the about button, those are my only terms other then that i don't care what you do with it. I know the code is probably not so great and could be done better, but i started C# the same week i started the program, bear with me.


----------



## afzsom

I'll have a look-see for you Licht.


----------



## arekieh

Very nice,
Definitely gonna try tomorrow,
+rep on the great work


----------



## JoBlo69

there is a C++ library that you can incorporate to use HDD space as a location for the int numbers your calculating...

THe purpose of this, is to get around the 32 bit number limit (2 ^ 31) 2.4 million or something... or 4 gb of ram.

http://gmplib.org/

This may be something you can add in as some kind of HDD bench? because the speed of this method will tax your dive constantly...


----------



## Licht

Quote:



Originally Posted by *JoBlo69*


there is a C++ library that you can incorporate to use HDD space as a location for the int numbers your calculating...

THe purpose of this, is to get around the 32 bit number limit (2 ^ 31) 2.4 million or something... or 4 gb of ram.

http://gmplib.org/

This may be something you can add in as some kind of HDD bench? because the speed of this method will tax your dive constantly...


Basically is a virtual memory library? And i will look into as soon as i fix the 2 major issues that have caused Build 3 to be stuck in WIP.


----------



## JoBlo69

^^Yes its like a virtual memory library. It gets around the 32bit memory limit, that holds you back in finding a prime number larger than 2.4 million digits. It's just really slow, because hdds are obviously slower than ram, and the way the ram is accessed to calculate the prime numbers, there is a huge amount of read/write, so with a hdd, it goes much slower...

I noticed that you uploaded the source, maybe i'll play around with this part, and see what happens...


----------



## Licht

Quote:



Originally Posted by *JoBlo69*


^^Yes its like a virtual memory library. It gets around the 32bit memory limit, that holds you back in finding a prime number larger than 2.4 million digits. It's just really slow, because hdds are obviously slower than ram, and the way the ram is accessed to calculate the prime numbers, there is a huge amount of read/write, so with a hdd, it goes much slower...

I noticed that you uploaded the source, maybe i'll play around with this part, and see what happens...


If you can figure out why quad core tests are only testing 3 and why there are inconsistencies with multi-threaded tests verses single threaded ones give me a call. I'm going to play around with thread.join() today and see if that will eliminate some issues.


----------



## JoBlo69

i'll mess around with it...

I've been having issues with VC++ 2008 installed. I have 2005, and naturally, these 2008 projects wont work, so i went ahead and installed 2008, and it mest up my config in 2005, and broke itself...

So I'm working out this mess now, and once i get this straightened out, I'll take a stab at the quad core situation...


----------



## Licht

Quote:



Originally Posted by *JoBlo69*


i'll mess around with it...

I've been having issues with VC++ 2008 installed. I have 2005, and naturally, these 2008 projects wont work, so i went ahead and installed 2008, and it mest up my config in 2005, and broke itself...

So I'm working out this mess now, and once i get this straightened out, I'll take a stab at the quad core situation...


Thanks for the help i literally started C# that day i made the first build of this application. It is obviously going to have issues stemming from my inexperience. However i had a year's experience in GML (a spin off of C, Lua, and Basic.) Which was enough for me to pick it up and go.

So you know i am pretty sure the issue lies somehow within the code utilizing Kernel32.DLL.


----------



## rx7speed

well I can give this a shot when I get home.


----------



## JoBlo69

Quote:



So you know i am pretty sure the issue lies somehow within the code utilizing Kernel32.DLL.


I think the code it self is fine, more or less guessing atm. Mainly because i see some strange calls being made from some functions that look odd. Maybe it's just part of C#. I'm not all that familiar with C#. I focus a lot of my time in C++, so there are some syntax issues that I'm not sure about yet...

I think im going to read up on this a little more before i start changing a whole lot...


----------



## Licht

Quote:



Originally Posted by *JoBlo69*


I think the code it self is fine, more or less guessing atm. Mainly because i see some strange calls being made from some functions that look odd. Maybe it's just part of C#. I'm not all that familiar with C#. I focus a lot of my time in C++, so there are some syntax issues that I'm not sure about yet...

I think im going to read up on this a little more before i start changing a whole lot...


Like i said i'm a noob, have mercy.


----------



## michinmuri

Quote:


Originally Posted by *Kamakazi* 
1st of all this is cool.

Second of all, where do I get the rad megaman background?

I second your second, and also think that dskina needs to inform us where he got his.


----------



## killnine

Quote:



Originally Posted by *Licht*


It is impossible on Windows to measure a length of time more precise then this


What? I dont think so. I use a multimedia timer that is much, much MUCH more accurate than this.

http://www.codeproject.com/KB/miscct...ediatimer.aspx

This is accurate down to single milliseconds.


----------



## Licht

Quote:



Originally Posted by *killnine*


What? I dont think so. I use a multimedia timer that is much, much MUCH more accurate than this.

http://www.codeproject.com/KB/miscct...ediatimer.aspx

This is accurate down to single milliseconds.


The current time returned by DateTime.Now.Millisecond is accurate only to 10ms. I don't know if they are using a different methode of obtaining the start and end times or not but i know that that is only so accurate.


----------



## killnine

It is a custom library that uses a faster timer than DateTime. I would highly recommend it.

I work for a company that needs single-millisecond resolution and this works fine.

For your purposes, it is much better than DateTime calls.

I am going to take a look at your code and see what I can do. I have only been doing C# for about a year but since I pretty much do it 8 hours a day, I am getting much better.


----------



## Licht

Quote:



Originally Posted by *killnine*


It is a custom library that uses a faster timer than DateTime. I would highly recommend it.

I work for a company that needs single-millisecond resolution and this works fine.

For your purposes, it is much better than DateTime calls.

I am going to take a look at your code and see what I can do. I have only been doing C# for about a year but since I pretty much do it 8 hours a day, I am getting much better.


Only a year?









I've only been going... 2 months? I think.


----------



## Licht

If anyone is still interested in the project, i've started from scratch. I'm gonna have the multi-threading problem fixed totally and completely as well as completely changing the shape of the application. I think anyone who is interested will be exstatic at next release. I'm quite confident in getting support once its ready.


----------



## shinya

I dunno what algorithms you're using to check primality (i didn't see the code), but a lot of research has been done on such stuff.

Since your objective is stressing the system for benchmarking purposes, maybe you've no actual interest in efficiency - which eventually *add* complexity. But maybe you might wanna consider some cleaver stuff for future releases.

The "standard" algorithm to find prime numbers from 2 up to N is called Sieve of Eratosthenes. http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
It's easy to implement with a single core, but i have no idea how to adapt it for multiple cores! It sounds hard!









Other than that, you might be aware of the mersenne prime search http://www.mersenne.org (which found only mersenne primes, which is a prime in the form 2^p - 1, where p is a prime number), and the math behind it http://www.mersenne.org/math.htm

Hope it helps! Happy coding!


----------



## rabidgnome229

Quote:



Originally Posted by *Licht*


If anyone is still interested in the project, i've started from scratch. I'm gonna have the multi-threading problem fixed totally and completely as well as completely changing the shape of the application. I think anyone who is interested will be exstatic at next release. I'm quite confident in getting support once its ready.


What kind of help do you need? I'm in a class now that's entirely about the line between hardware and software, and I would be very interested in applying what I'm learning


----------



## Licht

Quote:



Originally Posted by *shinya*


I dunno what algorithms you're using to check primality (i didn't see the code), but a lot of research has been done on such stuff.

Since your objective is stressing the system for benchmarking purposes, maybe you've no actual interest in efficiency - which eventually *add* complexity. But maybe you might wanna consider some cleaver stuff for future releases.

The "standard" algorithm to find prime numbers from 2 up to N is called Sieve of Eratosthenes. http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
It's easy to implement with a single core, but i have no idea how to adapt it for multiple cores! It sounds hard!









Other than that, you might be aware of the mersenne prime search http://www.mersenne.org (which found only mersenne primes, which is a prime in the form 2^p - 1, where p is a prime number), and the math behind it http://www.mersenne.org/math.htm

Hope it helps! Happy coding!










I detect a prime number in a single line of code. I divide it by a number and if it comes out without any decimals places it is not a prime number. If it does not come out even then i proceed to increase the number again and again until it either detects it as not a prime number or the divisor reaches half the value of the number in question in which case we go to the next number 2 numbers up. Well in single threaded thats how it works. In multithreading it increases the number by 2 times the number of threads so that all threads continually check different numbers and in the end add their results together. I'm quite proud of how efficient the code is.

Code:


Code:


while (Continue == true) // ///////////////////////Benching loop
            {
                if (CurrentDivisor > (CurrentNumber / 2)) // ///////Skip if larger then half
                {
                    CurrentNumber += RelInc;
                    CurrentDivisor = 2;
                    ThisPrimes += 1;
                }
                if (CurrentNumber > (TestLength - 1))
                {
                    if (ThreadCount == 1)
                    {
                        FoundPrimes += ThisPrimes;
                        Time2 = (Convert.ToDecimal(DateTime.Now.Millisecond)
                            + (Convert.ToDecimal(DateTime.Now.Second) * 1000)
                            + (Convert.ToDecimal(DateTime.Now.Minute) * 60000)
                            + (Convert.ToDecimal(DateTime.Now.Hour) * 3600000)) - Time;
                        MessageBox.Show("Time to complete : "
                            + Convert.ToString(Time2)
                            + "ms - Prime Numbers found : "
                            + Convert.ToString(FoundPrimes));
                        Rad1.Enabled = true;
                        Rad2.Enabled = true;
                        Rad3.Enabled = true;
                        Rad4.Enabled = true;
                        Rad5.Enabled = true;
                        Rad6.Enabled = true;
                        Rad7.Enabled = true;
                        Rad8.Enabled = true;
                        Rad9.Enabled = true;
                        Rad10.Enabled = true;
                        Rad11.Enabled = true;
                        Rad12.Enabled = true;
                        Rad13.Enabled = true;
                        Rad14.Enabled = true;
                        Rad15.Enabled = true;
                        Btn2.Enabled = true;
                        Btn1.Text = "Benchmark";
                        Btn1.Enabled = true;
                        FoundPrimes = 1;
                        progressBar1.Value = 0;
                        ThreadsFinished = 0;
                        Continue = false;
                        Thread.CurrentThread.Abort();
                    }
                    else
                    {
                        if (ThreadsFinished == (ThreadCount - 1))
                        {
                            FoundPrimes += ThisPrimes;
                            Time2 = (Convert.ToDecimal(DateTime.Now.Millisecond)
                                + (Convert.ToDecimal(DateTime.Now.Second) * 1000)
                                + (Convert.ToDecimal(DateTime.Now.Minute) * 60000)
                                + (Convert.ToDecimal(DateTime.Now.Hour) * 3600000)) - Time;
                            MessageBox.Show("Time to complete : " 
                                + Convert.ToString(Time2) 
                                + "ms - Prime Numbers found : " 
                                + Convert.ToString(FoundPrimes));
                            Rad1.Enabled = true;
                            Rad2.Enabled = true;
                            Rad3.Enabled = true;
                            Rad4.Enabled = true;
                            Rad5.Enabled = true;
                            Rad6.Enabled = true;
                            Rad7.Enabled = true;
                            Rad8.Enabled = true;
                            Rad9.Enabled = true;
                            Rad10.Enabled = true;
                            Rad11.Enabled = true;
                            Rad12.Enabled = true;
                            Rad13.Enabled = true;
                            Rad14.Enabled = true;
                            Rad15.Enabled = true;
                            Btn2.Enabled = true;
                            Btn1.Text = "Benchmark";
                            Btn1.Enabled = true;
                            FoundPrimes = 1;
                            progressBar1.Value = 0;
                            ThreadsFinished = 0;
                            Continue = false;
                            Thread.CurrentThread.Abort();
                        }
                        else
                        {
                            FoundPrimes += ThisPrimes;
                            ThreadsFinished += 1;
                            Continue = false;
                            Thread.CurrentThread.Abort();
                        }
                    }
                }
                if (Decimal.Round(CurrentNumber / CurrentDivisor, 0) == (CurrentNumber / CurrentDivisor)
                    | Decimal.Round(CurrentNumber / CurrentDivisor, 0) - 1 == (CurrentNumber / CurrentDivisor))
                {
                    CurrentDivisor = 2;
                    CurrentNumber += RelInc;
                    if (Convert.ToDecimal(ThreadNumber) == 1)
                    {
                        progressBar1.Value = Convert.ToInt32((CurrentNumber / TestLength) * 100); //
                    }
                }
                else
                {
                    CurrentDivisor += 1;
                }
            }

That code is actually bad anymore looking at it. The new code i am working on should be monstrously more efficient. Theres really too many checks involved there... the big issue is multi threading which adds quite a bit of code.

Quote:



What kind of help do you need? I'm in a class now that's entirely about the line between hardware and software, and I would be very interested in applying what I'm learning


If you want to get involved my messengers are.

YIM/MSN : [email protected]
Xfire : dekustars

We can talk more there. Or over PM (not preferred) if you don't have any messengers. I do need help working on an algorithm at the moment... quite complex...


----------



## rabidgnome229

That really only tests the floating point divide performance, which is an extremely slow and relatively uncommon instruction. I hate to say it so bluntly, but that's a pretty bad benchmark. Is that the entire thing?


----------



## Licht

Quote:


Originally Posted by *rabidgnome229* 
That really only tests the floating point divide performance, which is an extremely slow and relatively uncommon instruction. I hate to say it so bluntly, but that's a pretty bad benchmark. Is that the entire thing?

I'm adding more tests next build. For the most part of the code that is it. You can of course change the division to multiplication. Quite easily actually. I was not aware that division was a complicated instruction for the CPU to carry out. That and the fact its a floating point instruction gives AMD a massive advantage if i remember correctly... Hm. Anyways might as well spill it i'm working on multi-threaded pi calculation among other things.


----------



## rabidgnome229

Quote:


Originally Posted by *Licht* 
I'm adding more tests next build. For the most part of the code that is it. You can of course change the division to multiplication. Quite easily actually. I was not aware that division was a complicated instruction for the CPU to carry out. That and the fact its a floating point instruction gives AMD a massive advantage if i remember correctly... Hm. Anyways might as well spill it i'm working on multi-threaded pi calculation among other things.

Floating point is slower than integer, and divide is as slow as it gets. As an example, a PIII can perform an integer add in 1 clock cycle, integer multiply in 4, and integer divide in 36. Floating point numbers are 3, 5, and 38.


----------



## Licht

Quote:


Originally Posted by *rabidgnome229* 
Floating point is slower than integer, and divide is as slow as it gets. As an example, a PIII can perform an integer add in 1 clock cycle, integer multiply in 4, and integer divide in 36. Floating point numbers are 3, 5, and 38.

Very interesting information. So turn division into multiplication (simple enough) and avoid numbers 3, 5, and 38 and you should notice decent-great performance gains?


----------



## The Bartender Paradox

Just a few nitpicks on the algorithm, you only need to check up to the square root of the number in question, not half the number. Also, If you wanted to keep the calculations in integers you can use the remainder function to see if a number evenly divides (remainder = 0)


----------



## Licht

Quote:


Originally Posted by *The Bartender Paradox* 
Just a few nitpicks on the algorithm, you only need to check up to the square root of the number in question, not half the number. Also, If you wanted to keep the calculations in integers you can use the remainder function to see if a number evenly divides (remainder = 0)

Ah, very handy. Decimals are slower then Integers aren't they? (Meaning i think so but i am not sure.)


----------



## rabidgnome229

Quote:


Originally Posted by *Licht* 
Very interesting information. So turn division into multiplication (simple enough) and avoid numbers 3, 5, and 38 and you should notice decent-great performance gains?

The numbers 3 5 and 38 are the clock cycles per floating point add, multiply and divide respectively.

The focus isn't be getting it to run as fast as possible. A good benchmark should try to test common instructions, weighted by how common they are. The instructions you test would depend on what kind of benchmark you want. Real-world apps tend to use different instructions than multimedia apps or scientific apps, for example

Quote:


Originally Posted by *Licht* 
Ah, very handy. Decimals are slower then Integers aren't they? (Meaning i think so but i am not sure.)

Anything with a decimal is stored as a floating point number. Floating point instructions are generally a good bit slower than integer


----------



## Licht

Quote:

The numbers 3 5 and 38 are the clock cycles per floating point add, multiply and divide respectively.

The focus isn't be getting it to run as fast as possible. A good benchmark should try to test common instructions, weighted by how common they are. The instructions you test would depend on what kind of benchmark you want. Real-world apps tend to use different instructions than multimedia apps or scientific apps, for example
Ok ok i see what you are talking about.

Quote:

Anything with a decimal is stored as a floating point number. Floating point instructions are generally a good bit slower than integer
Ok so ditch everything decimal and move to integers and multiplication in every possible situation. Ok will be simple enough to work with the new engine. (I haven't started on pi, i am working on Prime Numerization now and it won't take long, should be done with that much today. Then i will start researching on pi and probably conquer some other things while im at it.)


----------



## rabidgnome229

Quote:


Originally Posted by *Licht* 
Ok ok i see what you are talking about.

Ok so ditch everything decimal and move to integers and multiplication in every possible situation. Ok will be simple enough to work with the new engine. (I haven't started on pi, i am working on Prime Numerization now and it won't take long, should be done with that much today. Then i will start researching on pi and probably conquer some other things while im at it.)

You should still test floating point and still test division, because both are important. You just shouldn't *only* test fp division


----------



## Licht

Quote:



Originally Posted by *rabidgnome229*


You should still test floating point and still test division, because both are important. You just shouldn't *only* test fp division


I'll come up with some more tests for the CPU. Right now i'm gonna use multiplication with integers with division in prime numerization. I'm still not sure how i am going to calculate pi. I've been looking over resources and it looks quite hard to come up with an algorithm for it.

Hey how do you make variable names variable. For example.

Code:


Code:


                for(int i = 1; i < CPUCount; i++)
                {
                    Thread [here]  = new Thread(PrimeNumerization);
                }

Where [here] is i need to know how to make it so the variable is named "Thread" (without "s) and then a number decided by the value i used in the loop. So the first iteration would be Thread1 and the second would be Thread2.


----------



## The Bartender Paradox

Quote:


Originally Posted by *Licht* 
I'll come up with some more tests for the CPU. Right now i'm gonna use multiplication with integers with division in prime numerization. I'm still not sure how i am going to calculate pi. I've been looking over resources and it looks quite hard to come up with an algorithm for it.

There are a bunch of ways to calculate pi or fractions of it. Perhaps searching for series that limit to pi or a fraction of pi would aid you. For example

2*4*4*6*6*8*...
3*3*5*5*7*7*...

if continued on goes to pi/4. The series below also goes to pi/4

1 - 1/3 + 1/5 - 1/7 + ...

There are many other series that approximate to pi.


----------



## Licht

Quote:


Originally Posted by *The Bartender Paradox* 
There are a bunch of ways to calculate pi or fractions of it. Perhaps searching for series that limit to pi or a fraction of pi would aid you. For example

2*4*4*6*6*8*...
3*3*5*5*7*7*...

if continued on goes to pi/4. The series below also goes to pi/4

1 - 1/3 + 1/5 - 1/7 + ...

There are many other series that approximate to pi.

True, not sure how i am going to approach it but i will tackle it after prime numerization. If that fraction you gave me is very accurate i can actually see multi-threading the calculation of pi as extremely efficient...


----------



## rabidgnome229

Quote:


Originally Posted by *Licht* 
I'll come up with some more tests for the CPU. Right now i'm gonna use multiplication with integers with division in prime numerization. I'm still not sure how i am going to calculate pi. I've been looking over resources and it looks quite hard to come up with an algorithm for it.

Hey how do you make variable names variable. For example.

Code:



Code:


                for(int i = 1; i < CPUCount; i++)
                {
                    Thread [here]  = new Thread(PrimeNumerization);
                }

Where [here] is i need to know how to make it so the variable is named "Thread" (without "s) and then a number decided by the value i used in the loop. So the first iteration would be Thread1 and the second would be Thread2.


That would be an array








I don't actually know C# fyi. I know C and C++, but have never looked at C# at all. How different is it?


----------



## Licht

Quote:


Originally Posted by *rabidgnome229* 
That would be an array








I don't actually know C# fyi. I know C and C++, but have never looked at C# at all. How different is it?

I've talked to people who have done C++ and C# and half say C++ is C# with more functions and has manual memory management. I've not done enough work with C++ to know for myself though. Basically the easiest way to explain C# is by its influences which are C++ and Java.

As for the array thats what i was thinking but i didn't want to do that... Actually i think you might be thinking of doing it a different way, care to post an example? (My way would be using an array of Thread0, Thread1, etc. but it doesn't seam like the best way to do it...)


----------



## rabidgnome229

Quote:


Originally Posted by *Licht* 
I've talked to people who have done C++ and C# and half say C++ is C# with more functions and has manual memory management. I've not done enough work with C++ to know for myself though. Basically the easiest way to explain C# is by its influences which are C++ and Java.

As for the array thats what i was thinking but i didn't want to do that... Actually i think you might be thinking of doing it a different way, care to post an example? (My way would be using an array of Thread0, Thread1, etc. but it doesn't seam like the best way to do it...)

In C++ (probably works for C#)

Code:



Code:


                Thread threads[CPUCount];

                for(int [B]i = 0[/B]; i < CPUCount; i++)
                {
                    threads[i]  = new Thread(PrimeNumerization);
                }


----------



## Licht

Quote:


Originally Posted by *rabidgnome229* 
In C++ (probably works for C#)

Code:



Code:


                Thread threads[CPUCount];

                for(int [B]i = 0[/B]; i < CPUCount; i++)
                {
                    threads[i]  = new Thread(PrimeNumerization);
                }


Had to make some slight changes but for the most part were good (i stopped using the CPUCount variable since it was memory usage that wasn't needed since i realized i would only need this a few times.)

Code:



Code:


Thread[] threads = new Thread[Environment.ProcessorCount];
for(int i = 1; i < Environment.ProcessorCount; i++)
{
threads[i]  = new Thread(PrimeNumerization);
}


----------



## rabidgnome229

Quote:


Originally Posted by *Licht* 
Had to make some slight changes but for the most part were good (i stopped using the CPUCount variable since it was memory usage that wasn't needed since i realized i would only need this a few times.)

Code:



Code:


Thread[] threads = new Thread[Environment.ProcessorCount];
for(int i = 1; i < Environment.ProcessorCount; i++)
{
threads[i]  = new Thread(PrimeNumerization);
}


heh - the four bytes it takes to store CPUCount is less than negligible. Things like that are usually worth using an extra variable just for readability. A good compiler would probably optimize the var away anyway.

And if you're using an array, i needs to start at 0


----------



## Licht

Quote:


Originally Posted by *rabidgnome229* 
heh - the four bytes it takes to store CPUCount is less than negligible. Things like that are usually worth using an extra variable just for readability. A good compiler would probably optimize the var away anyway.

And if you're using an array, i needs to start at 0

I'm obsessive compulsive. Which might be a good thing in programming since i sit and read things over and over to make sure everything is optimized as possible. At the same time it causes demoralization though from the time it takes me to get things done.

Thanks for the help. I'll post in if i run into any more snags. I don't however think i will continue tonight, it is very late and i haven't felt well.


----------



## SgtSpike

Looks like a great project!

One question though... if you're creating a number of threads = CPU cores, then wouldn't that put a quad-core on the same playing field as a single-core? I didn't read all six pages, just the first and the last, so I might be missing something here, but it seems as though you're just creating more work if a person's computer has more cores...

Man, I need to get some motivation to finish up my benchmark too... just can't get it to fully utilize a dual core no matter how many threads I create, lol.


----------



## Licht

Quote:


Originally Posted by *SgtSpike* 
Looks like a great project!

One question though... if you're creating a number of threads = CPU cores, then wouldn't that put a quad-core on the same playing field as a single-core? I didn't read all six pages, just the first and the last, so I might be missing something here, but it seems as though you're just creating more work if a person's computer has more cores...

Man, I need to get some motivation to finish up my benchmark too... just can't get it to fully utilize a dual core no matter how many threads I create, lol.

Theres more to it then creating threads. I will tell you how i literally got double performance out of 2 threads over 1.

First i initialized the threads and ran the benchmarking script with the argument ThreadNumber specifying which thread it was. (I also set thread affinity with kernel32.DLL.) Next i set the starting number. The first thread starts at 3 (i also add 1 prime number at the end for 2) because it is the first uneven number after 1. The next thread is the first thread plus 2 times the number of threads. So 2*1 = 2 so 3+2 = 5. Thread0 = 3; Thread1 = 5. Next they do their checks then when it is time to raise the number it gos 2*ThreadCount=4 so both threads go up by 4. So this bring it to Thread0 = 7; Thread1 = 9, notice that as long as you continue increasing by twice the number of total threads you get a different number. This also allows you to easily scale the code to any number of cores when done properly.

It was quite simply actually. If you need help with your multi-threading i would be happy to help you.

Hey look our rigs are the exact opposite, lol. E6300/8800GT - 5200+/3870.


----------



## SgtSpike

Quote:



Originally Posted by *Licht*


Theres more to it then creating threads. I will tell you how i literally got double performance out of 2 threads over 1.

First i initialized the threads and ran the benchmarking script with the argument ThreadNumber specifying which thread it was. (I also set thread affinity with kernel32.DLL.) Next i set the starting number. The first thread starts at 3 (i also add 1 prime number at the end for 2) because it is the first uneven number after 1. The next thread is the first thread plus 2 times the number of threads. So 2*1 = 2 so 3+2 = 5. Thread0 = 3; Thread1 = 5. Next they do their checks then when it is time to raise the number it gos 2*ThreadCount=4 so both threads go up by 4. So this bring it to Thread0 = 7; Thread1 = 9, notice that as long as you continue increasing by twice the number of total threads you get a different number. This also allows you to easily scale the code to any number of cores when done properly.

It was quite simply actually. If you need help with your multi-threading i would be happy to help you.

Hey look our rigs are the exact opposite, lol. E6300/8800GT - 5200+/3870.


Props to you for figuring out how to do that..! My benchmark does completely different calculations though, and it's not towards a goal, other than doing so many loops through a specific portion of code. Each thread (I have 16 atm) does it's own calculations independant of every other thread. When all of them are done, the benchmark comes up with a score based on time to completion. But for some reason I still don't get 100% processor usage on a dual or quad core. I get 100% only on a single core.

Oh, and I'm programming this in VB.NET, and to be honest I only have half an idea of what I'm doing in it...


----------



## Licht

Quote:



Originally Posted by *SgtSpike*


Props to you for figuring out how to do that..! My benchmark does completely different calculations though, and it's not towards a goal, other than doing so many loops through a specific portion of code. Each thread (I have 16 atm) does it's own calculations independant of every other thread. When all of them are done, the benchmark comes up with a score based on time to completion. But for some reason I still don't get 100% processor usage on a dual or quad core. I get 100% only on a single core.

Oh, and I'm programming this in VB.NET, and to be honest I only have half an idea of what I'm doing in it...










I'm not familiar with Visual Basic, i did it for about an hour before i realized i despise it. I picked up C# naturally though it was great. But i can help you with said issue. You need to set thread affinity. This can be done with Kernel32.DLL. I'll give you the code for it but your on your own for porting it to VB.

Code:


Code:


[DllImport("kernel32.dll", SetLastError = true)]
static extern int GetCurrentThreadId();

Then put this at the start of your threads code to be executed.

Code:


Code:


foreach (ProcessThread pt in Process.GetCurrentProcess().Threads)
{
      int utid = GetCurrentThreadId();
      if (utid == pt.Id)
      {
             pt.ProcessorAffinity = (IntPtr)(Convert.ToInt32(ThreadNumber));
      }
}


----------



## SgtSpike

Quote:



Originally Posted by *Licht*


I'm not familiar with Visual Basic, i did it for about an hour before i realized i despise it. I picked up C# naturally though it was great. But i can help you with said issue. You need to set thread affinity. This can be done with Kernel32.DLL. I'll give you the code for it but your on your own for porting it to VB.

Code:


Code:


[DllImport("kernel32.dll", SetLastError = true)]
static extern int GetCurrentThreadId();

Then put this at the start of your threads code to be executed.

Code:


Code:


foreach (ProcessThread pt in Process.GetCurrentProcess().Threads)
{
      int utid = GetCurrentThreadId();
      if (utid == pt.Id)
      {
             pt.ProcessorAffinity = (IntPtr)(Convert.ToInt32(ThreadNumber));
      }
}


VB, you either love it or you hate it.







I enjoy programming in it because I do not have a lot of patience for programming big projects.... it allows me to quickly program what I need with a GUI and everything quite easily, which I enjoy. I couldn't stand the text-based interface of C++ and java, and how complicated it was to make a button, lol.

Anyway, affinity should be automatic for each thread created, right? It'll just dump each new thread onto a core that's not being utilized as much as the other cores? So why do I need to set affinity when it automatically assigns each thread to a different core? I'll go ahead and give it a try, it just doesn't make sense to me why it wouldn't be automatically assigning the best affinity it can.

BTW, I'm not getting only 50% usage on a dual core, which would be evidence of the threads only running on one of the cores. It's more like 80% usage on each of the cores for a dually, and around 70% usage on each of the cores for a quad, which is another reason why it doesn't seem like an affinity problem.


----------



## Licht

Quote:



Originally Posted by *SgtSpike*


VB, you either love it or you hate it.







I enjoy programming in it because I do not have a lot of patience for programming big projects.... it allows me to quickly program what I need with a GUI and everything quite easily, which I enjoy. I couldn't stand the text-based interface of C++ and java, and how complicated it was to make a button, lol.

Anyway, affinity should be automatic for each thread created, right? It'll just dump each new thread onto a core that's not being utilized as much as the other cores? So why do I need to set affinity when it automatically assigns each thread to a different core? I'll go ahead and give it a try, it just doesn't make sense to me why it wouldn't be automatically assigning the best affinity it can.

BTW, I'm not getting only 50% usage on a dual core, which would be evidence of the threads only running on one of the cores. It's more like 80% usage on each of the cores for a dually, and around 70% usage on each of the cores for a quad, which is another reason why it doesn't seem like an affinity problem.


I set affinity so i didn't get 50% on dual core CPU usage in single threaded test or 50% usage on dual threaded test in quad cores. But as for your issue i have no idea VB may not even support affinity or something but Windows *should* be setting those threads to different cores as it is.

I just found an amazing algorithm for finding prime numbers. Its called Sieve of Eratosth. Quite interesting it utilizes a matrix to do multiplication for it. I've been looking at it and it looks like it will be incredibly easy to multi-thread. So easy in fact i'm worrying the test size will need to be increased atrociously.


----------



## SgtSpike

Just did some quick research... looks like all I have to do to set affinity in VB is this:

Code:



Code:


myProc.ProcessorAffinity = 1

I'll probably give that a try here shortly. Obviously I'll have to have a system variable in play to figure out how many cores are actually available, like you suggested licht, but looks like it'll be pretty easy to implement.


----------



## Licht

Quote:



Originally Posted by *SgtSpike*


Just did some quick research... looks like all I have to do to set affinity in VB is this:

Code:


Code:


myProc.ProcessorAffinity = 1

I'll probably give that a try here shortly. Obviously I'll have to have a system variable in play to figure out how many cores are actually available, like you suggested licht, but looks like it'll be pretty easy to implement.



Code:


Code:


myProc.ProcessorAffinity = 1

Proc stands for process, and sets the affinity for the entire process not just the thread. I think anyways.


----------



## SgtSpike

Quote:



Originally Posted by *Licht*


Code:


Code:


myProc.ProcessorAffinity = 1

Proc stands for process, and sets the affinity for the entire process not just the thread. I think anyways.


Ah, you're right. I missed that that was just for a process, not a thread.


----------



## Licht

Quote:



Originally Posted by *SgtSpike*


Ah, you're right. I missed that that was just for a process, not a thread.










In my research i have found you have to use Kernel32.DLL, no other option for manually settings thread affinity.


----------



## Licht

Code:


Code:


for (int a = 0; a < 10; a++)
{
        for (int b = 0; b < (TestLength * 0.1); b++)
        {
             PrimeMatrix[FNumber, SNumber] = false;
             SNumber += 1;
        }
        FNumber += 1;
}

Anyone think that will work to make the entire matrix false? I'm a ways away from being able to test it. I'm using a totally new algorithm based on he Sieve of Eratosth.


----------



## rabidgnome229

Why are you using b and a as the loop variables?

Code:



Code:


for (FNumber = 0; FNumber < 10; FNumber++)
        for (SNumber = 0; SNumber < whatever its max value is; SNumber++)
             PrimeMatrix[FNumber, SNumber] = false;


----------



## Licht

Quote:



Originally Posted by *rabidgnome229*


Why are you using b and a as the loop variables?

Code:


Code:


for (FNumber = 0; FNumber < 10; FNumber++)
        for (SNumber = 0; SNumber < whatever its max value is; SNumber++)
             PrimeMatrix[FNumber, SNumber] = false;


Because i'm inexpirienced.







... oh wait


----------



## rabidgnome229

Quote:



Originally Posted by *Licht*


Because i'm inexpirienced.







... oh wait










lol - happens to the best of us


----------



## SgtSpike

Should work fine... but why only max of 10 on the Fnumber? Maybe I need to read up on that seive... I remember studying it in one of my CIS classes a while back, back when we were trying to crack primes for the RAS challenge, but can't remember any of it now.


----------



## rabidgnome229

Quote:



Originally Posted by *SgtSpike*


Should work fine... but why only max of 10 on the Fnumber? Maybe I need to read up on that seive... I remember studying it in one of my CIS classes a while back, back when we were trying to crack primes for the RAS challenge, but can't remember any of it now.










I put the max of ten in there because he had it. I assume there is a reason for that loop to go to ten


----------



## Licht

Quote:



Originally Posted by *SgtSpike*


Should work fine... but why only max of 10 on the Fnumber? Maybe I need to read up on that seive... I remember studying it in one of my CIS classes a while back, back when we were trying to crack primes for the RAS challenge, but can't remember any of it now.











Quote:



I put the max of ten in there because he had it. I assume there is a reason for that loop to go to ten


The Sieve does division without actually dividing by using columns of 1-10 across and down as far as you want to go. If i didn't stop the horizontal lines at 10 the Sieve would loose its order and i wouldn't be able to geographically plot the positions of divisible numbers. In other words, its like Metric, everything relies on 10s.


----------



## SgtSpike

Quote:



Originally Posted by *Licht*


The Sieve does division without actually dividing by using columns of 1-10 across and down as far as you want to go. If i didn't stop the horizontal lines at 10 the Sieve would loose its order and i wouldn't be able to geographically plot the positions of divisible numbers. In other words, its like Metric, everything relies on 10s.


Gotcha, thanks for the answer! Looks like I'll have to do some research on the seive then...









Man I wish the RAS was still doing their encryption-hacking challenges. I wrote a java program that would brute-force 100 million big-int divisions in about 8 seconds on my 1.6ghz Pentium M.... imagine what the sieve algorithm + distributed computing would do for that! I'd have offered to split the prize 50/50 with whoever's computer found the winning primes!


----------



## rabidgnome229

Quote:



Originally Posted by *SgtSpike*


Gotcha, thanks for the answer! Looks like I'll have to do some research on the seive then...









Man I wish the RAS was still doing their encryption-hacking challenges. I wrote a java program that would brute-force 100 million big-int divisions in about 8 seconds on my 1.6ghz Pentium M.... imagine what the sieve algorithm + distributed computing would do for that! I'd have offered to split the prize 50/50 with whoever's computer found the winning primes!










lol - i think java would automatically make you lose. Java isn't exactly the most performance oriented language


----------



## Licht

Quote:



In mathematics, the Sieve of Eratosthenes is a simple, ancient algorithm for finding all prime numbers up to a specified integer. It is the predecessor to the modern Sieve of Atkin, which is faster but more complex. It was created by Eratosthenes, an ancient Greek mathematician. Wheel factorization is often applied on the list of integers to be checked for primality, before the Sieve of Eratosthenes is used, to increase the speed.


http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

I didn't understand Atkins well enough. I think i might look it over again tonight.

Are there any perfect squares beyond 49?


----------



## rabidgnome229

Quote:



Originally Posted by *Licht*











http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

I didn't understand Atkins well enough. I think i might look it over again tonight.

Are there any perfect squares beyond 49?


umm...
64 81 100 121...

there are infinite perfects squares because there are infinite integers that you can square


----------



## Licht

Quote:



Originally Posted by *rabidgnome229*


umm...
64 81 100 121...

there are infinite perfects squares because there are infinite integers that you can square


Just making sure since theres a slight possibility eventually this sieve will hit an incorrect answer because the number may have a perfect square and cannot be divided by number 1-7. This Sieve seams to take the assumption if it cannot be divided by 7 or lower then it has to be prime. Or is this a correct assumption?


----------



## SgtSpike

Quote:



Originally Posted by *rabidgnome229*


lol - i think java would automatically make you lose. Java isn't exactly the most performance oriented language


True enough.







Still, you get the idea. A properly coded distributed app would have been amazing for that RAS challenge! I think their 364-bit encryption key held a $40,000 prize...







The 256-bit and 312-bit (or somewhere around those lines) had already been cracked the last I checked.

Quote:



Originally Posted by *Licht*











http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

I didn't understand Atkins well enough. I think i might look it over again tonight.

Are there any perfect squares beyond 49?


Um, 64? 81? 100? Maybe I don't know the proper definition of a perfect square...?

BTW, I just did a google search and was about to post the same animation, lol.

I'll have to dig up that old project of mine for finding primes... I did a graphing experiment regarding prime numbers and I came up with some interesting findings...


----------



## rabidgnome229

Quote:



Originally Posted by *Licht*


Just making sure since theres a slight possibility eventually this sieve will hit an incorrect answer because the number may have a perfect square and cannot be divided by number 1-7. This Sieve seams to take the assumption if it cannot be divided by 7 or lower then it has to be prime. Or is this a correct assumption?


The sieve does not assume that and it is not a correct assumption. Prime means that the only divisors are one and itself. Period

I don't know how you're implementing the sieve, but it doesn't have anything to do with powers of 10. It is most simply implemented with a 1 dimensional array of arbitrary size. The sieve will find all prime numbers within whatever range you give it.

I don't really understand your question tbh


----------



## SgtSpike

Quote:



Originally Posted by *Licht*


Just making sure since theres a slight possibility eventually this sieve will hit an incorrect answer because the number may have a perfect square and cannot be divided by number 1-7. This Sieve seams to take the assumption if it cannot be divided by 7 or lower then it has to be prime. Or is this a correct assumption?


Certainly doesn't sound right to me...
Take 121. Is it divisible by anything other than 11?
Take two prime numbers and multiply them together, say 11x13=143. Is that divisible by anything other than those two prime numbers? I think not.

So I guess I answered your question. Either the sieve only works for numbers up to 120, or there's some other way to do it with larger numbers.

EDIT: I think Mr. rabid above me figured it out a little better than I did, lol.


----------



## rabidgnome229

Quote:



Originally Posted by *SgtSpike*


Certainly doesn't sound right to me...
Take 121. Is it divisible by anything other than 11?
Take two prime numbers and multiply them together, say 11x13=143. Is that divisible by anything other than those two prime numbers? I think not.

So I guess I answered your question. Either the sieve only works for numbers up to 120, or there's some other way to do it with larger numbers.

EDIT: I think Mr. rabid above me figured it out a little better than I did, lol.


143 is not prime, because it has factors of 1, 11, 13, and 143. Since it has more factors than one and itself, it is not prime

I'm coding up an implementation of the sieve. I'll post back soon


----------



## Licht

Quote:



Originally Posted by *rabidgnome229*


143 is not prime, because it has factors of 1, 11, 13, and 143. Since it has more factors than one and itself, it is not prime

I'm coding up an implementation of the sieve. I'll post back soon


Lol i should stop slacking off before you come up with a code that makes me look bad.


----------



## rabidgnome229

It still has a bug - it detects the max number as prime no matter what. Otherwise the code is solid

The code is in c

Code:


Code:


#include <stdio.h>
#include <stdlib.h>

/* Node to form a linked list containing primes */
typedef struct Node{
  int num;
  struct Node *next;
} Node;

void insertAtEnd(Node **head, int num);

int main(int argc, char *argv[]){

  int max, i, j;
  Node *head = NULL, *ptr;
  char *array;

  if(argc < 2){
    printf("Usage: sieve max_numn");
    exit(1);
  }

  /* get max boundary from command line args */
  max = atoi(argv[1]);

  if(max <= 0){
    printf("max_num must be positiven");
    exit(1);
  }

  /* create array of chars containing all 0's */
  array = calloc(max, sizeof(char));

  if(!array){
    printf("initial malloc failed (max_num too big?).  Exitingn");
    exit(1);
  }

  /* loop through every number to see if it is prime */
  /* array indices are shifted by one since index 0 is not needed */
  for(i=2; i <= max; i++){
    if(!array[i-1]){ /* if it is prime */
      insertAtEnd(&head, i); /* insert into list */
      for(j=i; j <= max; j+= i) 
array[j-1] = 1; /* mark all multiples of i (including i) as factorable */
    }
  }

  ptr = head;

  printf("Printing prime numbers between 2 and %dn", max);
  while(ptr){
    printf("%d | ", ptr->num);
    ptr = ptr->next;
  }
  printf("n");

  exit(0);
}

void insertAtEnd(Node **head, int num){
  Node **ptr = head, *temp;

  while(*ptr)
    ptr = &((*ptr)->next);

  temp = calloc(1, sizeof(Node));

  if(!temp){
    printf("Malloc failed.  Exitingn");
    exit(1);
  }

  temp->num = num;
  temp->next = NULL;
  *ptr = temp;
}


----------



## Licht

Quote:


Originally Posted by *rabidgnome229* 
It still has a bug - it detects the max number as prime no matter what. Otherwise the code is solid

The code is in c

Code:



Code:


#include <stdio.h>
#include <stdlib.h>

typedef struct Node{
  int num;
  struct Node *next;
} Node;

void insertAtEnd(Node **head, int num);

int main(int argc, char *argv[]){

  int max, i, j;
  Node *head = NULL, *ptr;
  char *array;

  if(argc < 2){
    printf("Usage: sieve max_numn");
    exit(1);
  }

  max = atoi(argv[1]);

  if(max <= 0){
    printf("max_num must be positiven");
    exit(1);
  }

  array = calloc(max, sizeof(char));

  if(!array){
    printf("initial malloc failed (max_num too big?).  Exitingn");
    exit(1);
  }

  for(i=2; i <= max; i++){
    if(!array[i-2]){
      insertAtEnd(&head, i);
      for(j=i; j <= max; j+= i)
array[j-2] = 1;
    }
  }

  ptr = head;

  printf("Printing prime numbers between 2 and %dn", max);
  while(ptr){
    printf("%d | ", ptr->num);
    ptr = ptr->next;
  }
  printf("n");

  exit(0);
}

void insertAtEnd(Node **head, int num){
  Node **ptr = head, *temp;

  while(*ptr)
    ptr = &((*ptr)->next);

  temp = calloc(1, sizeof(Node));

  if(!temp){
    printf("Malloc failed.  Exitingn");
    exit(1);
  }

  temp->num = num;
  temp->next = NULL;
  *ptr = temp;
}


I need to familiarize myself with the C/C++ calls and such.


----------



## rabidgnome229

Quote:


Originally Posted by *Licht* 
I need to familiarize myself with the C/C++ calls and such.

What are you having trouble with? The code is kinda obtuse - I'll go back and comment


----------



## Licht

Quote:


Originally Posted by *rabidgnome229* 
What are you having trouble with? The code is kinda obtuse - I'll go back and comment

The most i have done in C/C++ is look over code I've never actually done anything on my own with any managed memory language. Mostly when it comes to C/C++ its when my friends are working on something and ask me what i think about it.


----------



## SgtSpike

Quote:



Originally Posted by *rabidgnome229*


143 is not prime, because it has factors of 1, 11, 13, and 143. Since it has more factors than one and itself, it is not prime

I'm coding up an implementation of the sieve. I'll post back soon


I never said it was prime. I said it was only divisible by those primes.









My whole point from that post is moot by what you said anyway.


----------



## Burn

Here you go







Using the E6600 @ 3 Ghz.

Ed- Can't wait to see redundancy checking- This will be my new stability testing tool.


----------



## Licht

Quote:



Originally Posted by *Burn*


Here you go







Using the E6600 @ 3 Ghz.

Ed- Can't wait to see redundancy checking- This will be my new stability testing tool.


Redundant checking will be removed, instead i'm adding an individual stress test that will test a broad range of operations.


----------



## Burn

Quote:


Originally Posted by *Licht* 
Redundant checking will be removed, instead i'm adding an individual stress test that will test a broad range of operations.

Sweet deal- Any idea on the stress test's ETA? I would love to test it out for you.


----------



## Licht

Quote:


Originally Posted by *Burn* 
Sweet deal- Any idea on the stress test's ETA? I would love to test it out for you.

I'm going to gradually add operations to the test. I'm going to finish Prime Numerization tonight and work on the basics of the stress as well. I have both full-threaded (meaning all cores) and single threaded code done for the Prime Numerization up to everything but how to work around floating point operations. I may wind up having to use a floating point operating whether i like it or not...

In short, probably tonight.

Scratch that ran into something (non-coding related.) I'll get back to you tomorrow with an edit.


----------



## Licht

How many CPU cycles does converting the following take?

Integer32bit to Double

Double to Integer32bit

More specifically, would it be faster to convert a Double to a 32bit Integer and back again then to use Decimals with Decimal.Round? (Also remembering using this i can multiply instead of divide when not dealing with 3, 6, or 9.)


----------



## rabidgnome229

No idea. Take a look at the assembly. I can tell you the latency and timing of a few individual instructions, but that is a function

**EDIT**
Take a look here for an excellent reference
Instruction Latency and Throughput for AMD and Intel x86 Processors (PDF)


----------



## SgtSpike

Quote:



Originally Posted by *Licht*


How many CPU cycles does converting the following take?

Integer32bit to Double

Double to Integer32bit

More specifically, would it be faster to convert a Double to a 32bit Integer and back again then to use Decimals with Decimal.Round? (Also remembering using this i can multiply instead of divide when not dealing with 3, 6, or 9.)


I would think that decimal.round would be quicker than two variable type conversions. Conversions have to have error checking built-in, rounding built-in, etc. A decimal.round command would only need to do two things: chop off the numbers up to the point specified, then change the last digit left up or down depending on the digit after it.

Really though, unless you want to do a TON of research on the matter, just create a 1,000,000x loop with each command, and time how long to completion each takes.


----------



## Licht

Quote:


Originally Posted by *rabidgnome229* 
No idea. Take a look at the assembly. I can tell you the latency and timing of a few individual instructions, but that is a function

**EDIT**
Take a look here for an excellent reference
Instruction Latency and Throughput for AMD and Intel x86 Processors (PDF)

Now i need double latencies for comparison.


----------



## Licht

Code:


Code:


            if (button3.Text == "Stress Components")
            {
                Thread[] threads = new Thread[Environment.ProcessorCount];
                for (int i = 0; i < Environment.ProcessorCount; i++)
                {
                    threads[i] = new Thread(StressTestCPU);
                    threads[i].Start();
                }
                button3.Text = "Cancel";
            }
            else
            {
                for (int i = 0; i < Environment.ProcessorCount; i++)
                {
                    threads[i].Abort(); // Error here
                }
                button3.Text = "Stress Components";
            }

Is there anyways to get around the error "threads does not exist in the current context." error? I know when the program is actually executing it WILL exist however the compiler keeps throwing the error anyways. Quite annoying.

Also someone please explain how to generate a random number.


----------



## pauldovi

Quote:


Originally Posted by *Licht* 

Code:



Code:


            if (button3.Text == "Stress Components")
            {
                Thread[] threads = new Thread[Environment.ProcessorCount];
                for (int i = 0; i < Environment.ProcessorCount; i++)
                {
                    threads[i] = new Thread(StressTestCPU);
                    threads[i].Start();
                }
                button3.Text = "Cancel";
            }
            else
            {
                for (int i = 0; i < Environment.ProcessorCount; i++)
                {
                    threads[i].Abort(); // Error here
                }
                button3.Text = "Stress Components";
            }

Is there anyways to get around the error "threads does not exist in the current context." error? I know when the program is actually executing it WILL exist however the compiler keeps throwing the error anyways. Quite annoying.

Also someone please explain how to generate a random number.

If that is C, then you need to include math.h in your libraries, set the random seed with the following code:

Code:



Code:


#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main(void)
{
     srand((unsigned int) time(0)); // sets the seed

     // random integer 0 -> n

     x = rand()% (n+1);

     // random double between a and b

     y = ((double)rand()/RAND_MAX)*(b-a) +a; 
}


----------



## Licht

Quote:


Originally Posted by *pauldovi* 
If that is C, then you need to include math.h in your libraries, set the random seed with the following code:

Code:



Code:


#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main(void)
{
     srand((unsigned int) time(0)); // sets the seed

     // random integer 0 -> n

     x = rand()% (n+1);

     // random double between a and b

     y = ((double)rand()/RAND_MAX)*(b-a) +a; 
}


This is C#, the child of C++ and Java basically. I'll include that just in case. Any idea on the first issue? I solved my random number issue with this.

Code:



Code:


        private int RandomNumber(int min, int max)
        {
            Random random = new Random();
            return random.Next(min, max);
        }


----------



## killnine

Could you export as VS2005? Not all of us can purchase () the newest versions of software. =)


----------



## Licht

Quote:


Originally Posted by *killnine* 
Could you export as VS2005? Not all of us can purchase () the newest versions of software. =)

Visual Studio 2008 Express Edition is totally and completely free to download. Also build 2 is so wildly different from build 3 you may or may not want to bother with it. I'm finishing up build 3 (few things i want to take care of before release.)

http://msdn2.microsoft.com/en-us/exp.../bb421473.aspx


----------



## SgtSpike

Quote:


Originally Posted by *killnine* 
Could you export as VS2005? Not all of us can purchase () the newest versions of software. =)

Haha, yeah I'm still running 2003...


----------



## Licht

Quote:


Originally Posted by *SgtSpike* 
Haha, yeah I'm still running 2003... 

I think it would be wise you click the link i provided.









Also at the moment im repairing my PC. Finally found my issues were within the BIOS settings which were optimized defaults from a overclock failure. I had never imagined that it would have set them to a way that would damage my system. (Floppy drive was enabled and trying to boot from as well as SATA settings being incorrect, system couldn't properly access the RAID0 array correctly somehow.)

----

Little over 100 posts, little under 2000 views.

Also i want to tell people im very sick at the moment, forgive my slowness.


----------



## killnine

Quote:


Originally Posted by *Licht* 
Visual Studio 2008 Express Edition is totally and completely free to download. Also build 2 is so wildly different from build 3 you may or may not want to bother with it. I'm finishing up build 3 (few things i want to take care of before release.)

http://msdn2.microsoft.com/en-us/exp.../bb421473.aspx

Dont be upset when I say this, but there isn't a chance in hell that I would download VS 2008 express and use it over Visual Studio Pro 2005 just to develop some features for your benchmark. lol.

I was thinking about maybe working on a gpu component to this application using the XNA package MS released a little while ago.


----------



## Licht

Quote:


Originally Posted by *killnine* 
Dont be upset when I say this, but there isn't a chance in hell that I would download VS 2008 express and use it over Visual Studio Pro 2005 just to develop some features for your benchmark. lol.

I was thinking about maybe working on a gpu component to this application using the XNA package MS released a little while ago.

I never asked you to, the source is just there for people who are interested in looking over the code. I myself will only make official releases containing code i developed (although sometimes with help) and not extensions others made.

Way ahead of you.
<<< Has experience in 3D graphics design and implementation.


----------



## JoBlo69

I'd like to see the code you have up till now...

Kinda curious on how far along you with build3.


----------



## Licht

Quote:


Originally Posted by *JoBlo69* 
I'd like to see the code you have up till now...

Kinda curious on how far along you with build3.

As i had mentioned earlier (i think) i became *very* ill recently. I spent almost this entire week sleeping. I will edit in some snippets shortly of what bit i did get done before that though, but first Visual Studio will need to finish downloading. (PC crashed while i was sick, just got it running again yesterday.)

------

Got an old code from thepope, much much work lost sadly. I'll see if theres anything worth posting.

------

Completely outdated work, nothing worth posting. I lost the stress test which was done, i lost my highly revised algorithm for prime numerization. I lost almost everything, even GUI work for the stress test. Sorry to disappoint you.


----------



## killnine

I didn't think about this, but you can just open the .csproj file, regardless of version.

Looks pretty cool so far. I would like to see v3 before making any comments, from what it sounds like, you changed a lot.

+ThreadWatch


----------



## Licht

Quote:



Originally Posted by *killnine*


I didn't think about this, but you can just open the .csproj file, regardless of version.

Looks pretty cool so far. I would like to see v3 before making any comments, from what it sounds like, you changed a lot.

+ThreadWatch


It may be a while sadly... Starting over completely on stress and prime numerization. Sad day indeed.







At least i have the concepts down will definitely help.


----------



## SgtSpike

Ah, that sucks. I was working on a board game for a while... had it maybe halfway done when my laptop drive crashed. And of course, I hadn't made a backup of it. That was also a very sad day....


----------



## Licht

Quote:


Originally Posted by *SgtSpike* 
Ah, that sucks. I was working on a board game for a while... had it maybe halfway done when my laptop drive crashed. And of course, I hadn't made a backup of it. That was also a very sad day....









When will people ever learn to back up your hardrives!!

...


----------



## Licht

Quote:


Originally Posted by *JoBlo69* 
I'd like to see the code you have up till now...

Kinda curious on how far along you with build3.


Code:



Code:


            if (PBCB0.Checked == true)//Single
            {
                FNumber = 11;
                PNumber = 4;
                SNumber = 3;
                for (int i = 0; i < TNumber; i++)
                {
                    for (int u = 0; u < (FNumber * 0.25); u++) // 1
                    {
                        if (FNumber % SNumber == 0)
                        {
                            SNumber += 2;
                        }
                        else
                        {
                            PNumber += 1;
                            break;
                        }
                    }
                    SNumber = 3;
                    FNumber += 2;
                    for (int u = 0; u < (FNumber * 0.25); u++) // 3
                    {
                        if (FNumber % SNumber == 0)
                        {
                            SNumber += 2;
                        }
                        else
                        {
                            PNumber += 1;
                            break;
                        }
                    }
                    SNumber = 3;
                    FNumber += 4;
                    for (int u = 0; u < (FNumber * 0.25); u++) // 7
                    {
                        if (FNumber % SNumber == 0)
                        {
                            SNumber += 2;
                        }
                        else
                        {
                            PNumber += 1;
                            break;
                        }
                    }
                    SNumber = 3;
                    FNumber += 2;
                    for (int u = 0; u < (FNumber * 0.25); u++) // 9
                    {
                        if (FNumber % SNumber == 0)
                        {
                            SNumber += 2;
                        }
                        else
                        {
                            PNumber += 1;
                            break;
                        }
                    }
                    SNumber = 3;
                    FNumber += 2;
                    CPUPB0.Value += 0;
                }
                MessageBox.Show("Test Complete; Prime Numbers Found : " + Convert.ToString(PNumber));
            }

Theres you some information on how its coming. (Note : Theres an exception in the progress bar line, i'm trying to figure it out but the rest of the code should work.) I wound up using my own algorithm (the above is the single core version, if it works when i figure out the annoying progress bar i will begin working with a multi-core version which shouldn't take terribly long) its optimized to the extremes i honestly don't think theres much more optimization i can do to it. I'm gonna work on figuring up more numbers i can rule out as possible dividers and incorporate them without using ifs using loops like i did with the FNumber value. For now though it only skips checking 1 and even numbers on the divisor. On the Dividend its skipping all even numbers and 5. I'm trying to think of a way to optimize 6s and 9s but i'm unsure. If you haven't noticed everything inside the loop checks (in concept) only 1, 3, 6, 7, and 9. It then adds 10 to it at the end and starts over. This is what i was talking about before when we were discussing the sieve of Eratosthenes.

http://forums.microsoft.com/MSDN/Sho...iteID=1&mode=1

Issue is there.


----------



## JoBlo69

That looks pretty good. Not knowing much about .NET my next question is, are statements like ' PBCB0.Checked ' objects?

And you don't have to declare the ' i ' temp variable anywhere for the loops??


----------



## Licht

Quote:



Originally Posted by *JoBlo69*


That looks pretty good. Not knowing much about .NET my next question is, are statements like ' PBCB0.Checked ' objects?

And you don't have to declare the ' i ' temp variable anywhere for the loops??


Yeah it is a windows forms object.

I declared i at :

for(*int i = 0*; i < example; i++)

(Can't bold inside a code block.)

Ok revised the code, fixed an issue now prime number counting is perfected.

Code:


Code:


if (PBCB0.Checked == true)//Single
            {
                FNumber = 11;
                PNumber = 4;
                SNumber = 3;
                for (int i = 0; i < TNumber; i++)
                {
                    for (int u = 0; u < (FNumber * 0.25); u++) // 1
                    {
                        if (FNumber % SNumber == 0)
                        {
                            PNumber -= 1;
                            break;
                        }
                        else
                        {
                            SNumber += 2;
                        }
                    }
                    PNumber += 1;
                    SNumber = 3;
                    FNumber += 2;
                    for (int u = 0; u < (FNumber * 0.25); u++) // 3
                    {
                        if (FNumber % SNumber == 0)
                        {
                            PNumber -= 1;
                            break;
                        }
                        else
                        {
                            SNumber += 2;
                        }
                    }
                    PNumber += 1;
                    SNumber = 3;
                    FNumber += 4;
                    for (int u = 0; u < (FNumber * 0.25); u++) // 7
                    {
                        if (FNumber % SNumber == 0)
                        {
                            PNumber -= 1;
                            break;
                        }
                        else
                        {
                            SNumber += 2;
                        }
                    }
                    PNumber += 1;
                    SNumber = 3;
                    FNumber += 2;
                    for (int u = 0; u < (FNumber * 0.25); u++) // 9
                    {
                        if (FNumber % SNumber == 0)
                        {
                            PNumber -= 1;
                            break;
                        }
                        else
                        {
                            SNumber += 2;
                        }
                    }
                    PNumber += 1;
                    SNumber = 3;
                    FNumber += 2;
                    CPUPB0.Value += 0;
                }
                MessageBox.Show("Test Complete; Prime Numbers Found : " + Convert.ToString(PNumber));
            }


----------



## JoBlo69

not sure what the syntax standards are for .NET but for C++ a lot of people like to declare variables outside of the int main...

Now that you pointed out what you have going on, it makes sense now...

I have spent most of my programming days in database stuff, so i don't know much about GUI stuff, so when you get that all put back together, I'd like to see what GUI code looks like. I have done a lot of web design stuff, so I'm guessing its kinda like that?? Not sure...


----------



## Licht

Quote:


Originally Posted by *JoBlo69* 
not sure what the syntax standards are for .NET but for C++ a lot of people like to declare variables outside of the int main...

Now that you pointed out what you have going on, it makes sense now...

I have spent most of my programming days in database stuff, so i don't know much about GUI stuff, so when you get that all put back together, I'd like to see what GUI code looks like. I have done a lot of web design stuff, so I'm guessing its kinda like that?? Not sure...

That code is automatically generated by Visual Studio and i design through a GUI design system.

Code:



Code:


namespace WindowsFormsApplication1
{
    partial class Form1
    {
        /// 
        /// Required designer variable.
        /// 
        private System.ComponentModel.IContainer components = null;

        /// 
        /// Clean up any resources being used.
        /// 
        /// true if managed resources should be disposed; otherwise, false.
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// 
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// 
        private void InitializeComponent()
        {
            this.tabPage4 = new System.Windows.Forms.TabPage();
            this.button1 = new System.Windows.Forms.Button();
            this.textBox2 = new System.Windows.Forms.TextBox();
            this.progressBar3 = new System.Windows.Forms.ProgressBar();
            this.groupBox4 = new System.Windows.Forms.GroupBox();
            this.tabPage3 = new System.Windows.Forms.TabPage();
            this.progressBar2 = new System.Windows.Forms.ProgressBar();
            this.tabPage2 = new System.Windows.Forms.TabPage();
            this.button2 = new System.Windows.Forms.Button();
            this.groupBox5 = new System.Windows.Forms.GroupBox();
            this.PBRB02 = new System.Windows.Forms.RadioButton();
            this.PBRB01 = new System.Windows.Forms.RadioButton();
            this.groupBox2 = new System.Windows.Forms.GroupBox();
            this.PBCB0 = new System.Windows.Forms.CheckBox();
            this.PBCB2 = new System.Windows.Forms.CheckBox();
            this.PBCB1 = new System.Windows.Forms.CheckBox();
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.label5 = new System.Windows.Forms.Label();
            this.PBRB5 = new System.Windows.Forms.RadioButton();
            this.PBRB4 = new System.Windows.Forms.RadioButton();
            this.PBRB0 = new System.Windows.Forms.RadioButton();
            this.PBRB1 = new System.Windows.Forms.RadioButton();
            this.PBRB3 = new System.Windows.Forms.RadioButton();
            this.PBRB2 = new System.Windows.Forms.RadioButton();
            this.CPUB0 = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.CPUPB0 = new System.Windows.Forms.ProgressBar();
            this.tabPage1 = new System.Windows.Forms.TabPage();
            this.tabControl1 = new System.Windows.Forms.TabControl();
            this.tabPage6 = new System.Windows.Forms.TabPage();
            this.label7 = new System.Windows.Forms.Label();
            this.label8 = new System.Windows.Forms.Label();
            this.label9 = new System.Windows.Forms.Label();
            this.tabPage5 = new System.Windows.Forms.TabPage();
            this.label10 = new System.Windows.Forms.Label();
            this.linkLabel2 = new System.Windows.Forms.LinkLabel();
            this.label4 = new System.Windows.Forms.Label();
            this.label3 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.label6 = new System.Windows.Forms.Label();
            this.linkLabel1 = new System.Windows.Forms.LinkLabel();
            this.label1 = new System.Windows.Forms.Label();
            this.linkLabel3 = new System.Windows.Forms.LinkLabel();
            this.label11 = new System.Windows.Forms.Label();
            this.label12 = new System.Windows.Forms.Label();
            this.label13 = new System.Windows.Forms.Label();
            this.label14 = new System.Windows.Forms.Label();
            this.label15 = new System.Windows.Forms.Label();
            this.textBox3 = new System.Windows.Forms.TextBox();
            this.tabPage4.SuspendLayout();
            this.groupBox4.SuspendLayout();
            this.tabPage3.SuspendLayout();
            this.tabPage2.SuspendLayout();
            this.groupBox5.SuspendLayout();
            this.groupBox2.SuspendLayout();
            this.groupBox1.SuspendLayout();
            this.tabPage1.SuspendLayout();
            this.tabControl1.SuspendLayout();
            this.tabPage5.SuspendLayout();
            this.SuspendLayout();
            // 
            // tabPage4
            // 
            this.tabPage4.Controls.Add(this.button1);
            this.tabPage4.Controls.Add(this.textBox2);
            this.tabPage4.Controls.Add(this.progressBar3);
            this.tabPage4.Controls.Add(this.groupBox4);
            this.tabPage4.Location = new System.Drawing.Point(4, 22);
            this.tabPage4.Name = "tabPage4";
            this.tabPage4.Size = new System.Drawing.Size(444, 362);
            this.tabPage4.TabIndex = 3;
            this.tabPage4.Text = "Hard Disc Drive";
            this.tabPage4.UseVisualStyleBackColor = true;
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(11, 299);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(203, 23);
            this.button1.TabIndex = 8;
            this.button1.Text = "Benchmark";
            this.button1.UseVisualStyleBackColor = true;
            // 
            // textBox2
            // 
            this.textBox2.Location = new System.Drawing.Point(220, 3);
            this.textBox2.Multiline = true;
            this.textBox2.Name = "textBox2";
            this.textBox2.ReadOnly = true;
            this.textBox2.Size = new System.Drawing.Size(213, 319);
            this.textBox2.TabIndex = 7;
            // 
            // progressBar3
            // 
            this.progressBar3.Location = new System.Drawing.Point(11, 328);
            this.progressBar3.Name = "progressBar3";
            this.progressBar3.Size = new System.Drawing.Size(422, 23);
            this.progressBar3.TabIndex = 6;
            // 
            // groupBox4
            // 
            this.groupBox4.Controls.Add(this.label9);
            this.groupBox4.Location = new System.Drawing.Point(11, 3);
            this.groupBox4.Name = "groupBox4";
            this.groupBox4.Size = new System.Drawing.Size(203, 290);
            this.groupBox4.TabIndex = 4;
            this.groupBox4.TabStop = false;
            this.groupBox4.Text = "HDD Read && Write";
            // 
            // tabPage3
            // 
            this.tabPage3.Controls.Add(this.label8);
            this.tabPage3.Controls.Add(this.progressBar2);
            this.tabPage3.Location = new System.Drawing.Point(4, 22);
            this.tabPage3.Name = "tabPage3";
            this.tabPage3.Size = new System.Drawing.Size(444, 362);
            this.tabPage3.TabIndex = 2;
            this.tabPage3.Text = "Memory";
            this.tabPage3.UseVisualStyleBackColor = true;
            // 
            // progressBar2
            // 
            this.progressBar2.Location = new System.Drawing.Point(11, 328);
            this.progressBar2.Name = "progressBar2";
            this.progressBar2.Size = new System.Drawing.Size(422, 23);
            this.progressBar2.TabIndex = 4;
            // 
            // tabPage2
            // 
            this.tabPage2.Controls.Add(this.button2);
            this.tabPage2.Controls.Add(this.groupBox5);
            this.tabPage2.Controls.Add(this.groupBox2);
            this.tabPage2.Controls.Add(this.groupBox1);
            this.tabPage2.Controls.Add(this.CPUB0);
            this.tabPage2.Controls.Add(this.textBox1);
            this.tabPage2.Controls.Add(this.CPUPB0);
            this.tabPage2.Location = new System.Drawing.Point(4, 22);
            this.tabPage2.Name = "tabPage2";
            this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
            this.tabPage2.Size = new System.Drawing.Size(444, 362);
            this.tabPage2.TabIndex = 1;
            this.tabPage2.Text = "Processor";
            this.tabPage2.UseVisualStyleBackColor = true;
            // 
            // button2
            // 
            this.button2.Enabled = false;
            this.button2.Location = new System.Drawing.Point(11, 302);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(215, 26);
            this.button2.TabIndex = 14;
            this.button2.Text = "Open Text File";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // groupBox5
            // 
            this.groupBox5.Controls.Add(this.PBRB02);
            this.groupBox5.Controls.Add(this.PBRB01);
            this.groupBox5.Location = new System.Drawing.Point(11, 192);
            this.groupBox5.Name = "groupBox5";
            this.groupBox5.Size = new System.Drawing.Size(215, 69);
            this.groupBox5.TabIndex = 13;
            this.groupBox5.TabStop = false;
            this.groupBox5.Text = "Tests";
            // 
            // PBRB02
            // 
            this.PBRB02.AutoSize = true;
            this.PBRB02.Location = new System.Drawing.Point(6, 42);
            this.PBRB02.Name = "PBRB02";
            this.PBRB02.Size = new System.Drawing.Size(173, 17);
            this.PBRB02.TabIndex = 8;
            this.PBRB02.TabStop = true;
            this.PBRB02.Text = "Pi Calculation to Decimal Count";
            this.PBRB02.UseVisualStyleBackColor = true;
            // 
            // PBRB01
            // 
            this.PBRB01.AutoSize = true;
            this.PBRB01.Checked = true;
            this.PBRB01.Location = new System.Drawing.Point(6, 19);
            this.PBRB01.Name = "PBRB01";
            this.PBRB01.Size = new System.Drawing.Size(176, 17);
            this.PBRB01.TabIndex = 9;
            this.PBRB01.TabStop = true;
            this.PBRB01.Text = "Prime Numerization to a Number";
            this.PBRB01.UseVisualStyleBackColor = true;
            // 
            // groupBox2
            // 
            this.groupBox2.Controls.Add(this.PBCB0);
            this.groupBox2.Controls.Add(this.PBCB2);
            this.groupBox2.Controls.Add(this.PBCB1);
            this.groupBox2.Location = new System.Drawing.Point(12, 98);
            this.groupBox2.Name = "groupBox2";
            this.groupBox2.Size = new System.Drawing.Size(215, 88);
            this.groupBox2.TabIndex = 12;
            this.groupBox2.TabStop = false;
            this.groupBox2.Text = "Settings";
            // 
            // PBCB0
            // 
            this.PBCB0.AutoSize = true;
            this.PBCB0.Checked = true;
            this.PBCB0.CheckState = System.Windows.Forms.CheckState.Checked;
            this.PBCB0.Location = new System.Drawing.Point(6, 65);
            this.PBCB0.Name = "PBCB0";
            this.PBCB0.Size = new System.Drawing.Size(159, 17);
            this.PBCB0.TabIndex = 4;
            this.PBCB0.Text = "Force Single Core Operation";
            this.PBCB0.UseVisualStyleBackColor = true;
            // 
            // PBCB2
            // 
            this.PBCB2.AutoSize = true;
            this.PBCB2.Checked = true;
            this.PBCB2.CheckState = System.Windows.Forms.CheckState.Checked;
            this.PBCB2.Enabled = false;
            this.PBCB2.Location = new System.Drawing.Point(6, 42);
            this.PBCB2.Name = "PBCB2";
            this.PBCB2.Size = new System.Drawing.Size(172, 17);
            this.PBCB2.TabIndex = 10;
            this.PBCB2.Text = "Display Work in the Text Panel";
            this.PBCB2.UseVisualStyleBackColor = true;
            // 
            // PBCB1
            // 
            this.PBCB1.AutoSize = true;
            this.PBCB1.Enabled = false;
            this.PBCB1.Location = new System.Drawing.Point(6, 19);
            this.PBCB1.Name = "PBCB1";
            this.PBCB1.Size = new System.Drawing.Size(191, 17);
            this.PBCB1.TabIndex = 11;
            this.PBCB1.Text = "Write Sum to Text File When Done";
            this.PBCB1.UseVisualStyleBackColor = true;
            // 
            // groupBox1
            // 
            this.groupBox1.Controls.Add(this.label5);
            this.groupBox1.Controls.Add(this.PBRB5);
            this.groupBox1.Controls.Add(this.PBRB4);
            this.groupBox1.Controls.Add(this.textBox3);
            this.groupBox1.Controls.Add(this.PBRB0);
            this.groupBox1.Controls.Add(this.PBRB1);
            this.groupBox1.Controls.Add(this.PBRB3);
            this.groupBox1.Controls.Add(this.PBRB2);
            this.groupBox1.Location = new System.Drawing.Point(12, 3);
            this.groupBox1.Name = "groupBox1";
            this.groupBox1.Size = new System.Drawing.Size(214, 89);
            this.groupBox1.TabIndex = 7;
            this.groupBox1.TabStop = false;
            this.groupBox1.Text = "Length";
            // 
            // label5
            // 
            this.label5.AutoSize = true;
            this.label5.Location = new System.Drawing.Point(181, 66);
            this.label5.Name = "label5";
            this.label5.Size = new System.Drawing.Size(28, 13);
            this.label5.TabIndex = 6;
            this.label5.Text = ",000";
            // 
            // PBRB5
            // 
            this.PBRB5.AutoSize = true;
            this.PBRB5.Enabled = false;
            this.PBRB5.Location = new System.Drawing.Point(120, 66);
            this.PBRB5.Name = "PBRB5";
            this.PBRB5.Size = new System.Drawing.Size(14, 13);
            this.PBRB5.TabIndex = 5;
            this.PBRB5.UseVisualStyleBackColor = true;
            this.PBRB5.CheckedChanged += new System.EventHandler(this.PBRB5_CheckedChanged);
            // 
            // PBRB4
            // 
            this.PBRB4.AutoSize = true;
            this.PBRB4.Location = new System.Drawing.Point(6, 65);
            this.PBRB4.Name = "PBRB4";
            this.PBRB4.Size = new System.Drawing.Size(93, 17);
            this.PBRB4.TabIndex = 4;
            this.PBRB4.TabStop = true;
            this.PBRB4.Text = "250,000 Digits";
            this.PBRB4.UseVisualStyleBackColor = true;
            this.PBRB4.CheckedChanged += new System.EventHandler(this.PBRB4_CheckedChanged);
            // 
            // PBRB0
            // 
            this.PBRB0.AutoSize = true;
            this.PBRB0.Checked = true;
            this.PBRB0.Location = new System.Drawing.Point(6, 19);
            this.PBRB0.Name = "PBRB0";
            this.PBRB0.Size = new System.Drawing.Size(93, 17);
            this.PBRB0.TabIndex = 0;
            this.PBRB0.TabStop = true;
            this.PBRB0.Text = "5,000     Digits";
            this.PBRB0.UseVisualStyleBackColor = true;
            this.PBRB0.CheckedChanged += new System.EventHandler(this.PBRB0_CheckedChanged);
            // 
            // PBRB1
            // 
            this.PBRB1.AutoSize = true;
            this.PBRB1.Location = new System.Drawing.Point(120, 19);
            this.PBRB1.Name = "PBRB1";
            this.PBRB1.Size = new System.Drawing.Size(93, 17);
            this.PBRB1.TabIndex = 1;
            this.PBRB1.TabStop = true;
            this.PBRB1.Text = "10,000   Digits";
            this.PBRB1.UseVisualStyleBackColor = true;
            this.PBRB1.CheckedChanged += new System.EventHandler(this.PBRB1_CheckedChanged);
            // 
            // PBRB3
            // 
            this.PBRB3.AutoSize = true;
            this.PBRB3.Location = new System.Drawing.Point(120, 42);
            this.PBRB3.Name = "PBRB3";
            this.PBRB3.Size = new System.Drawing.Size(93, 17);
            this.PBRB3.TabIndex = 3;
            this.PBRB3.TabStop = true;
            this.PBRB3.Text = "100,000 Digits";
            this.PBRB3.UseVisualStyleBackColor = true;
            this.PBRB3.CheckedChanged += new System.EventHandler(this.PBRB3_CheckedChanged);
            // 
            // PBRB2
            // 
            this.PBRB2.AutoSize = true;
            this.PBRB2.Location = new System.Drawing.Point(6, 42);
            this.PBRB2.Name = "PBRB2";
            this.PBRB2.Size = new System.Drawing.Size(93, 17);
            this.PBRB2.TabIndex = 2;
            this.PBRB2.TabStop = true;
            this.PBRB2.Text = "25,000   Digits";
            this.PBRB2.UseVisualStyleBackColor = true;
            this.PBRB2.CheckedChanged += new System.EventHandler(this.PBRB2_CheckedChanged);
            // 
            // CPUB0
            // 
            this.CPUB0.Location = new System.Drawing.Point(11, 267);
            this.CPUB0.Name = "CPUB0";
            this.CPUB0.Size = new System.Drawing.Size(214, 29);
            this.CPUB0.TabIndex = 6;
            this.CPUB0.Text = "Benchmark";
            this.CPUB0.UseVisualStyleBackColor = true;
            this.CPUB0.Click += new System.EventHandler(this.CPUB0_Click);
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(232, 6);
            this.textBox1.Multiline = true;
            this.textBox1.Name = "textBox1";
            this.textBox1.ReadOnly = true;
            this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
            this.textBox1.Size = new System.Drawing.Size(201, 322);
            this.textBox1.TabIndex = 5;
            // 
            // CPUPB0
            // 
            this.CPUPB0.Location = new System.Drawing.Point(11, 334);
            this.CPUPB0.Name = "CPUPB0";
            this.CPUPB0.Size = new System.Drawing.Size(422, 23);
            this.CPUPB0.TabIndex = 4;
            // 
            // tabPage1
            // 
            this.tabPage1.Controls.Add(this.label7);
            this.tabPage1.Location = new System.Drawing.Point(4, 22);
            this.tabPage1.Name = "tabPage1";
            this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
            this.tabPage1.Size = new System.Drawing.Size(444, 362);
            this.tabPage1.TabIndex = 0;
            this.tabPage1.Text = "Complete Test";
            this.tabPage1.UseVisualStyleBackColor = true;
            // 
            // tabControl1
            // 
            this.tabControl1.Controls.Add(this.tabPage1);
            this.tabControl1.Controls.Add(this.tabPage2);
            this.tabControl1.Controls.Add(this.tabPage3);
            this.tabControl1.Controls.Add(this.tabPage4);
            this.tabControl1.Controls.Add(this.tabPage6);
            this.tabControl1.Controls.Add(this.tabPage5);
            this.tabControl1.Location = new System.Drawing.Point(-3, 0);
            this.tabControl1.Name = "tabControl1";
            this.tabControl1.SelectedIndex = 0;
            this.tabControl1.Size = new System.Drawing.Size(452, 388);
            this.tabControl1.TabIndex = 7;
            // 
            // tabPage6
            // 
            this.tabPage6.Location = new System.Drawing.Point(4, 22);
            this.tabPage6.Name = "tabPage6";
            this.tabPage6.Size = new System.Drawing.Size(444, 362);
            this.tabPage6.TabIndex = 5;
            this.tabPage6.Text = "Stress";
            this.tabPage6.UseVisualStyleBackColor = true;
            // 
            // label7
            // 
            this.label7.AutoSize = true;
            this.label7.Location = new System.Drawing.Point(178, 175);
            this.label7.Name = "label7";
            this.label7.Size = new System.Drawing.Size(89, 13);
            this.label7.TabIndex = 0;
            this.label7.Text = "Work In Progress";
            // 
            // label8
            // 
            this.label8.AutoSize = true;
            this.label8.Location = new System.Drawing.Point(178, 175);
            this.label8.Name = "label8";
            this.label8.Size = new System.Drawing.Size(89, 13);
            this.label8.TabIndex = 5;
            this.label8.Text = "Work In Progress";
            // 
            // label9
            // 
            this.label9.AutoSize = true;
            this.label9.Location = new System.Drawing.Point(54, 139);
            this.label9.Name = "label9";
            this.label9.Size = new System.Drawing.Size(89, 13);
            this.label9.TabIndex = 0;
            this.label9.Text = "Work In Progress";
            // 
            // tabPage5
            // 
            this.tabPage5.BackgroundImage = global::WindowsFormsApplication1.Properties.Resources.Logo2;
            this.tabPage5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
            this.tabPage5.Controls.Add(this.label15);
            this.tabPage5.Controls.Add(this.label14);
            this.tabPage5.Controls.Add(this.label13);
            this.tabPage5.Controls.Add(this.label12);
            this.tabPage5.Controls.Add(this.label11);
            this.tabPage5.Controls.Add(this.linkLabel3);
            this.tabPage5.Controls.Add(this.label10);
            this.tabPage5.Controls.Add(this.linkLabel2);
            this.tabPage5.Controls.Add(this.label4);
            this.tabPage5.Controls.Add(this.label3);
            this.tabPage5.Controls.Add(this.label2);
            this.tabPage5.Controls.Add(this.label6);
            this.tabPage5.Controls.Add(this.linkLabel1);
            this.tabPage5.Controls.Add(this.label1);
            this.tabPage5.Location = new System.Drawing.Point(4, 22);
            this.tabPage5.Name = "tabPage5";
            this.tabPage5.Size = new System.Drawing.Size(444, 362);
            this.tabPage5.TabIndex = 4;
            this.tabPage5.Text = "About";
            this.tabPage5.UseVisualStyleBackColor = true;
            // 
            // label10
            // 
            this.label10.AutoSize = true;
            this.label10.Location = new System.Drawing.Point(142, 288);
            this.label10.Name = "label10";
            this.label10.Size = new System.Drawing.Size(161, 13);
            this.label10.TabIndex = 10;
            this.label10.Text = "Contact : [email protected]";
            // 
            // linkLabel2
            // 
            this.linkLabel2.AutoSize = true;
            this.linkLabel2.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;
            this.linkLabel2.Location = new System.Drawing.Point(11, 47);
            this.linkLabel2.Name = "linkLabel2";
            this.linkLabel2.Size = new System.Drawing.Size(127, 13);
            this.linkLabel2.TabIndex = 9;
            this.linkLabel2.TabStop = true;
            this.linkLabel2.Text = "FacePunchStudios Topic";
            this.linkLabel2.VisitedLinkColor = System.Drawing.Color.Navy;
            this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel2_LinkClicked);
            // 
            // label4
            // 
            this.label4.AutoSize = true;
            this.label4.Location = new System.Drawing.Point(44, 341);
            this.label4.Name = "label4";
            this.label4.Size = new System.Drawing.Size(48, 13);
            this.label4.TabIndex = 8;
            this.label4.Text = "Saromus";
            // 
            // label3
            // 
            this.label3.AutoSize = true;
            this.label3.Location = new System.Drawing.Point(26, 326);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(85, 13);
            this.label3.TabIndex = 7;
            this.label3.Text = "Rabidgnome229";
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(45, 311);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(41, 13);
            this.label2.TabIndex = 6;
            this.label2.Text = "Afzsom";
            // 
            // label6
            // 
            this.label6.AutoSize = true;
            this.label6.Location = new System.Drawing.Point(11, 288);
            this.label6.Name = "label6";
            this.label6.Size = new System.Drawing.Size(115, 13);
            this.label6.TabIndex = 5;
            this.label6.Text = "With Assistance From :";
            // 
            // linkLabel1
            // 
            this.linkLabel1.AutoSize = true;
            this.linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;
            this.linkLabel1.Location = new System.Drawing.Point(294, 47);
            this.linkLabel1.Name = "linkLabel1";
            this.linkLabel1.Size = new System.Drawing.Size(139, 13);
            this.linkLabel1.TabIndex = 4;
            this.linkLabel1.TabStop = true;
            this.linkLabel1.Text = "OverClock.Net Topic (Root)";
            this.linkLabel1.VisitedLinkColor = System.Drawing.Color.Navy;
            this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(148, 18);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(145, 13);
            this.label1.TabIndex = 0;
            this.label1.Text = "DoubleMark Created by Licht";
            // 
            // linkLabel3
            // 
            this.linkLabel3.AutoSize = true;
            this.linkLabel3.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;
            this.linkLabel3.Location = new System.Drawing.Point(175, 47);
            this.linkLabel3.Name = "linkLabel3";
            this.linkLabel3.Size = new System.Drawing.Size(94, 13);
            this.linkLabel3.TabIndex = 11;
            this.linkLabel3.TabStop = true;
            this.linkLabel3.Text = "PoorManPC Topic";
            this.linkLabel3.VisitedLinkColor = System.Drawing.Color.Navy;
            this.linkLabel3.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel3_LinkClicked);
            // 
            // label11
            // 
            this.label11.AutoSize = true;
            this.label11.Location = new System.Drawing.Point(327, 288);
            this.label11.Name = "label11";
            this.label11.Size = new System.Drawing.Size(106, 13);
            this.label11.TabIndex = 12;
            this.label11.Text = "Speacil Thanks To : ";
            // 
            // label12
            // 
            this.label12.AutoSize = true;
            this.label12.Location = new System.Drawing.Point(75, 78);
            this.label12.Name = "label12";
            this.label12.Size = new System.Drawing.Size(294, 13);
            this.label12.TabIndex = 13;
            this.label12.Text = "And the name of the slave of man, or his partner, technology.";
            // 
            // label13
            // 
            this.label13.AutoSize = true;
            this.label13.Location = new System.Drawing.Point(342, 311);
            this.label13.Name = "label13";
            this.label13.Size = new System.Drawing.Size(77, 13);
            this.label13.TabIndex = 14;
            this.label13.Text = "OverClock.Net";
            // 
            // label14
            // 
            this.label14.AutoSize = true;
            this.label14.Location = new System.Drawing.Point(357, 326);
            this.label14.Name = "label14";
            this.label14.Size = new System.Drawing.Size(47, 13);
            this.label14.TabIndex = 15;
            this.label14.Text = "IAmPoor";
            // 
            // label15
            // 
            this.label15.AutoSize = true;
            this.label15.Location = new System.Drawing.Point(203, 326);
            this.label15.Name = "label15";
            this.label15.Size = new System.Drawing.Size(39, 13);
            this.label15.TabIndex = 16;
            this.label15.Text = "Build 3";
            // 
            // textBox3
            // 
            this.textBox3.Enabled = false;
            this.textBox3.Location = new System.Drawing.Point(140, 63);
            this.textBox3.MaxLength = 9;
            this.textBox3.Name = "textBox3";
            this.textBox3.Size = new System.Drawing.Size(39, 20);
            this.textBox3.TabIndex = 5;
            this.textBox3.TextChanged += new System.EventHandler(this.textBox3_TextChanged);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(446, 385);
            this.Controls.Add(this.tabControl1);
            this.MaximizeBox = false;
            this.Name = "Form1";
            this.Text = "DoubleMark";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.tabPage4.ResumeLayout(false);
            this.tabPage4.PerformLayout();
            this.groupBox4.ResumeLayout(false);
            this.groupBox4.PerformLayout();
            this.tabPage3.ResumeLayout(false);
            this.tabPage3.PerformLayout();
            this.tabPage2.ResumeLayout(false);
            this.tabPage2.PerformLayout();
            this.groupBox5.ResumeLayout(false);
            this.groupBox5.PerformLayout();
            this.groupBox2.ResumeLayout(false);
            this.groupBox2.PerformLayout();
            this.groupBox1.ResumeLayout(false);
            this.groupBox1.PerformLayout();
            this.tabPage1.ResumeLayout(false);
            this.tabPage1.PerformLayout();
            this.tabControl1.ResumeLayout(false);
            this.tabPage5.ResumeLayout(false);
            this.tabPage5.PerformLayout();
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.TabPage tabPage4;
        private System.Windows.Forms.TabPage tabPage3;
        private System.Windows.Forms.TabPage tabPage2;
        private System.Windows.Forms.TabPage tabPage1;
        private System.Windows.Forms.TabControl tabControl1;
        private System.Windows.Forms.ProgressBar CPUPB0;
        private System.Windows.Forms.ProgressBar progressBar3;
        private System.Windows.Forms.GroupBox groupBox4;
        private System.Windows.Forms.ProgressBar progressBar2;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.TabPage tabPage5;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.TextBox textBox2;
        private System.Windows.Forms.CheckBox PBCB0;
        private System.Windows.Forms.RadioButton PBRB3;
        private System.Windows.Forms.RadioButton PBRB2;
        private System.Windows.Forms.RadioButton PBRB1;
        private System.Windows.Forms.RadioButton PBRB0;
        private System.Windows.Forms.Button CPUB0;
        private System.Windows.Forms.TabPage tabPage6;
        private System.Windows.Forms.GroupBox groupBox1;
        private System.Windows.Forms.RadioButton PBRB4;
        private System.Windows.Forms.CheckBox PBCB1;
        private System.Windows.Forms.CheckBox PBCB2;
        private System.Windows.Forms.RadioButton PBRB01;
        private System.Windows.Forms.RadioButton PBRB02;
        private System.Windows.Forms.Label label5;
        private System.Windows.Forms.RadioButton PBRB5;
        private System.Windows.Forms.GroupBox groupBox2;
        private System.Windows.Forms.Button button2;
        private System.Windows.Forms.GroupBox groupBox5;
        private System.Windows.Forms.LinkLabel linkLabel1;
        private System.Windows.Forms.Label label6;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.Label label4;
        private System.Windows.Forms.LinkLabel linkLabel2;
        private System.Windows.Forms.Label label9;
        private System.Windows.Forms.Label label8;
        private System.Windows.Forms.Label label7;
        private System.Windows.Forms.Label label10;
        private System.Windows.Forms.Label label11;
        private System.Windows.Forms.LinkLabel linkLabel3;
        private System.Windows.Forms.Label label14;
        private System.Windows.Forms.Label label13;
        private System.Windows.Forms.Label label12;
        private System.Windows.Forms.Label label15;
        private System.Windows.Forms.TextBox textBox3;

    }
}


----------



## Licht

Anyone wanna explain Thread.Join() to me? Also you guys think i should start a new topic for B3 to clear the clutter or not?


----------



## SgtSpike

Quote:



Originally Posted by *Licht*


Anyone wanna explain Thread.Join() to me? Also you guys think i should start a new topic for B3 to clear the clutter or not?


Na, keep the same one. I'm enjoying coming backing to see the progress updates.


----------



## Licht

Quote:



Originally Posted by *SgtSpike*


Na, keep the same one. I'm enjoying coming backing to see the progress updates.










Speaking of such how is yours coming along?


----------



## Licht

I desperately need help with the mutli-threading i've been unable to figure it out.

Code:


Code:


private void button1_Click(object sender, EventArgs e) //Benchmark Button
        {
            if (checkBox1.Checked == true)
            {
                Thread Thread1 = new Thread(PrimeNumbers);
                Thread1.Start(1);
            }
            else
            {
                for (int i = 0; i < Environment.ProcessorCount; i++)
                {
                    threads[i] = new Thread(PrimeNumbers);
                    PNumbers[i] = 0;
                }
                Thread endrun = new Thread(threadwait);
                endrun.Start();
            }
            button1.Enabled = false;
        }
        private void threadwait()
        {
            while (true)
            {
                if (threads[0].IsAlive == true)
                {
                    break;
                }
            }
            while (true)
            {
                if (threads[0].IsAlive == false && threads[1].IsAlive == false)
                {
                    break;
                }
            }
            int TotalPNumber = 0;
            for (int i = 0; i < Environment.ProcessorCount; i++)
            {
                TotalPNumber += PNumbers[i];
            }
            MessageBox.Show("Test Complete; Prime Numbers Found : " + Convert.ToString(TotalPNumber + 4) + "; Time Taken : ");
        }
        private void PrimeNumbers(object threadnumber)
        {
            #region
            if (checkBox1.Checked == true)//Single
            {
                #region
                foreach (ProcessThread pt in Process.GetCurrentProcess().Threads)
                {
                    int utid = GetCurrentThreadId();
                    if (utid == pt.Id)
                    {
                        pt.ProcessorAffinity = (IntPtr)(Convert.ToInt32(threadnumber));
                    }
                }
                #endregion
                int FNumber = 11;
                int PNumber = 4;
                int SNumber = 3;
                int TNumber = Convert.ToInt32(TestLength * 0.1 - 10);
                for (int i = 0; i < TNumber; i++)
                {
                    for (int u = 0; u < (FNumber * 0.25); u++) // 1
                    {
                        if (FNumber % SNumber == 0)
                        {
                            PNumber -= 1;
                            break;
                        }
                        else
                        {
                            SNumber += 2;
                        }
                    }
                    PNumber += 1;
                    SNumber = 3;
                    FNumber += 2;
                    for (int u = 0; u < (FNumber * 0.25); u++) // 3
                    {
                        if (FNumber % SNumber == 0)
                        {
                            PNumber -= 1;
                            break;
                        }
                        else
                        {
                            SNumber += 2;
                        }
                    }
                    PNumber += 1;
                    SNumber = 3;
                    FNumber += 4;
                    for (int u = 0; u < (FNumber * 0.25); u++) // 7
                    {
                        if (FNumber % SNumber == 0)
                        {
                            PNumber -= 1;
                            break;
                        }
                        else
                        {
                            SNumber += 2;
                        }
                    }
                    PNumber += 1;
                    SNumber = 3;
                    FNumber += 2;
                    for (int u = 0; u < (FNumber * 0.25); u++) // 9
                    {
                        if (FNumber % SNumber == 0)
                        {
                            PNumber -= 1;
                            break;
                        }
                        else
                        {
                            SNumber += 2;
                        }
                    }
                    PNumber += 1;
                    SNumber = 3;
                    FNumber += 2;
                    progressBar1.Value = (FNumber / TestLength * 100);
                }
                progressBar1.Value = 100;
                MessageBox.Show("Test Complete; Prime Numbers Found : " + Convert.ToString(PNumber));
                progressBar1.Value = 0;
                button1.Enabled = true;
            }
            #endregion
            #region
            else
            {
                int FNumber = Convert.ToInt32(threadnumber) + 1 * 10 + 1;
                int PNumber = 0;
                int SNumber = 3;
                int TNumber = Convert.ToInt32(TestLength * 0.1 / Environment.ProcessorCount);
                for (int i = 0; i < TNumber; i++)
                {
                    for (int u = 0; u < (FNumber * 0.25); u++) // 1
                    {
                        if (FNumber % SNumber == 0)
                        {
                            PNumber -= 1;
                            break;
                        }
                        else
                        {
                            SNumber += 2;
                        }
                    }
                    PNumber += 1;
                    SNumber = 3;
                    FNumber += 2;
                    for (int u = 0; u < (FNumber * 0.25); u++) // 3
                    {
                        if (FNumber % SNumber == 0)
                        {
                            PNumber -= 1;
                            break;
                        }
                        else
                        {
                            SNumber += 2;
                        }
                    }
                    PNumber += 1;
                    SNumber = 3;
                    FNumber += 4;
                    for (int u = 0; u < (FNumber * 0.25); u++) // 7
                    {
                        if (FNumber % SNumber == 0)
                        {
                            PNumber -= 1;
                            break;
                        }
                        else
                        {
                            SNumber += 2;
                        }
                    }
                    PNumber += 1;
                    SNumber = 3;
                    FNumber += 2;
                    for (int u = 0; u < (FNumber * 0.25); u++) // 9
                    {
                        if (FNumber % SNumber == 0)
                        {
                            PNumber -= 1;
                            break;
                        }
                        else
                        {
                            SNumber += 2;
                        }
                    }
                    PNumber += 1;
                    SNumber = 3;
                    FNumber += Environment.ProcessorCount * 10 + 2;
                    progressBar1.Value = (FNumber / TestLength * 100);
                }
                PNumbers[Convert.ToInt32(threadnumber)] = PNumber;
            }
            #endregion


----------



## SgtSpike

Quote:



Originally Posted by *Licht*


Speaking of such how is yours coming along?


Meh, haven't worked on it in a while... I've been discouraged ever since I couldn't get 100% CPU usage on a dually with multiple threads... only could get up to 80% or so.


----------



## Licht

Quote:



Originally Posted by *SgtSpike*


Meh, haven't worked on it in a while... I've been discouraged ever since I couldn't get 100% CPU usage on a dually with multiple threads... only could get up to 80% or so.


Raise thread priority, if that doesn't work you are probably hitting the limitations of Visual Basic.


----------



## rabidgnome229

Quote:



Originally Posted by *Licht*











I desperately need help with the mutli-threading i've been unable to figure it out.


What problem are you having?

Code:


Code:


  private void threadwait()
        {
            while (true)
            {
                if (threads[0].IsAlive == true)
                {
                    break;
                }
            }
            while (true)
            {
                if (threads[0].IsAlive == false && threads[1].IsAlive == false)
                {
                    break;
                }
            }
            int TotalPNumber = 0;
            for (int i = 0; i < Environment.ProcessorCount; i++)
            {
                TotalPNumber += PNumbers[i];
            }
            MessageBox.Show("Test Complete; Prime Numbers Found : " + Convert.ToString(TotalPNumber + 4) + "; Time Taken : ");
        }

This code is extremely inefficient. If you do this then whatever thread calls the method will continually check whether the threads are alive as fast as they can for the entire time that it needs to wait. This adds a huge load that is in no way related to what the benchmark is testing. As ever, I don't know C#, but you should look into exceptional control flow


----------



## Licht

Quote:


Originally Posted by *rabidgnome229* 
What problem are you having?

Code:



Code:


  private void threadwait()
        {
            while (true)
            {
                if (threads[0].IsAlive == true)
                {
                    break;
                }
            }
            while (true)
            {
                if (threads[0].IsAlive == false && threads[1].IsAlive == false)
                {
                    break;
                }
            }
            int TotalPNumber = 0;
            for (int i = 0; i < Environment.ProcessorCount; i++)
            {
                TotalPNumber += PNumbers[i];
            }
            MessageBox.Show("Test Complete; Prime Numbers Found : " + Convert.ToString(TotalPNumber + 4) + "; Time Taken : ");
        }

This code is extremely inefficient. If you do this then whatever thread calls the method will continually check whether the threads are alive as fast as they can for the entire time that it needs to wait. This adds a huge load that is in no way related to what the benchmark is testing. As ever, I don't know C#, but you should look into exceptional control flow

It was just a placeholder until i made sure the prime number checking for multi-threading worked in the first place. Long term plans where to try and find a way to trigger an event upon all threads finishing. The code never ends and 1 core sits 80% and the other 30%, i'm baffled.


----------



## rabidgnome229

Quote:


Originally Posted by *Licht* 
It was just a placeholder until i made sure the prime number checking for multi-threading worked in the first place. Long term plans where to try and find a way to trigger an event upon all threads finishing. The code never ends and 1 core sits 80% and the other 30%, i'm baffled.

A quick trip to google says that you want to use Thread.Join() in the parent function, although there is probably a way to wait for a specific thread to end.

As for the infinite loop you fall into - that's what debuggers are for


----------



## NrGx

Good bad?


----------



## Licht

Quote:


Originally Posted by *rabidgnome229* 
A quick trip to google says that you want to use Thread.Join() in the parent function, although there is probably a way to wait for a specific thread to end.

As for the infinite loop you fall into - that's what debuggers are for









I forget why i didn't use that but its worth a try.

Is there a similar function to Thread.Join() except it unpauses the thread when the thread starts?

Quote:

Good bad?
I think that is about what i get with my stock 5200+. Please subscribe to the thread if you're interested in the project the next build which is *much* improved releases whenever i get the multi-threading nailed down.

5,666th post.


----------



## NrGx

Quote:


Originally Posted by *Licht* 
I forget why i didn't use that but its worth a try.

I think that is about what i get with my stock 5200+. Please subscribe to the thread if you're interested in the project the next build which is *much* improved releases whenever i get the multi-threading nailed down.

5,666th post.

Stock 5200+! This makes me a sad panda


----------



## Licht

Quote:


Originally Posted by *NrGx* 
Stock 5200+! This makes me a sad panda









AMD CPU aren't as far behind as they make them out to be, they just can't overclock... at all. Lol.


----------



## NrGx

Would have thought a C2D at 3.24 Ghz would have smoked a 5200+


----------



## Licht

Quote:


Originally Posted by *NrGx* 
Would have thought a C2D at 3.24 Ghz would have smoked a 5200+

Wait a minute, 3.2ghz. That can't be right.


----------



## NrGx

Quote:


Originally Posted by *Licht* 
Wait a minute, 3.2ghz. That can't be right.

It is! I has proof in my sig


----------



## Licht

Quote:


Originally Posted by *NrGx* 
It is! I has proof in my sig









Ok ran the test with those settings got 25155ms. It was a long time sine i ran that don't blame me blame the unreliability of the human mind.









Can't get the multi-core test right still. Just to keep the project alive heres a forced single-core only version for you to play with. Oh wait forgot to include timers...







Screw with it if you want but it looks like i need to figure it all out and stop rushing.

Code:



Code:


private void threadwait()
        {
            while (true)
            {
                if (threads[0].IsAlive == true)
                {
                    break;
                }
            }
            for (int i = 0; i < Environment.ProcessorCount; i++)
            {
                if (threads[i].IsAlive == true)
                {
                    threads[i].Join();
                }
            }
            int TotalPNumber = 0;
            for (int i = 0; i < Environment.ProcessorCount; i++)
            {
                TotalPNumber += PNumbers[i];
            }
            MessageBox.Show("Test Complete; Prime Numbers Found : " + Convert.ToString(TotalPNumber + 4) + "; Time Taken : ");
        }

Thats what i used, since the infinite loop will exit soon as the thread begins theres no real power consumption. I think that code is fine but the threads themselves fluctuate wildly in CPU usage and overall are still puzzling.

Turns out the problem was in the button_click event in which i forgot to *start* the threads. Build 3 tomorrow i might even put it on my laptop and take it to school and release during lunch. I would finish it now but i have to go to bed, i need to get up in around 5 hours so.... yeah.


----------



## Licht

http://www.overclock.net/blogs/licht/doublemark/

Theres a blog, more information there. Will keep it very up to date and will make posts here to dictate major updates. The blog will contain the rest (small things like graphics, smaller progress updates, delays, etc.) This allows me to add for every detail and keep people's subscriptions active without spamming my own thread to death or till a moderator shows up to clean house.


----------



## Licht

http://www.overclock.net/coding-prog...ml#post3251322

Build 3 released.


----------



## Burn

Are you releasing it for download?


----------



## Licht

Quote:



Originally Posted by *Burn*


Are you releasing it for download?


Thepope noticed a small issue, should be up within a few minutes. *Very* sorry if i had noticed it i would have held off the post.


----------



## Licht

Uploaded, sorry for the delay.


----------



## arekieh

im a lazy piece of @#[email protected] i will install this asap and run it,
This should be something majorly advertised on OCN, thats a great accomplishment


----------



## Licht

Quote:



Originally Posted by *arekieh*


im a lazy piece of @#[email protected] i will install this asap and run it,
This should be something majorly advertised on OCN, thats a great accomplishment


DoubleMark has no installer, it is download and run straight up no wait. In the future i may offer an installer so people can have it in their start menu, that was something someone requested of me.

As for majorly advertised i've asked 2 other members to add a link to DoubleMark to their signature. Including myself thats going to help i think. Anyone else wanting to assist in getting the program some steam going i encourage to do the same. Any other way of course you want to help out i would greatly appreciate.


----------



## ThePope

Thanks for including my name in the about! Great little program. Can't wait to see more releases of your work







. (let me know if you need anymore graphic work).

Quote:



Originally Posted by *arekieh*


im a lazy piece of @#[email protected] i will install this asap and run it,
This should be something majorly advertised on OCN, thats a great accomplishment


I agree. This program should be advertised, and tis a amazing accomplishment!


----------



## d3daiM

Yeah! This update sounds promising Licht. And I like the leet logo heheheh.

I'll post a pic up soon.


----------



## d3daiM

mmmm..seems to have worked out right!

However, it runs REALLY quick! And pressing the benchmark button multiple times can yield some very different results.

And it also seems to score better on the first benchmark as soon as you open the program, with all the later ones taking a few hundredths of a second longer.

And yeah, I notice I am running all stock right now lol.

EDIT - and changing the "length" doesn't seem to affect my results AT ALL.

EDIT - And running in single core mode is faster? LOL


----------



## Licht

Quote:


Originally Posted by *d3daiM* 


mmmm..seems to have worked out right!

However, it runs REALLY quick! And pressing the benchmark button multiple times can yield some very different results.

And it also seems to score better on the first benchmark as soon as you open the program, with all the later ones taking a few hundredths of a second longer.

And yeah, I notice I am running all stock right now lol.

EDIT - and changing the "length" doesn't seem to affect my results AT ALL.

EDIT - And running in single core mode is faster? LOL

I'm completely unsure why this is happening for you, i ran it myself to make sure and what your reporting isn't happening for me. As for the tests being very fast 10,000 is a joke really i should have removed it. I recommend 25,000 a good number.


----------



## ThePope

I am getting the same issue. Every time I test it, It seems to take longer. And ya, why is the single core faster?


----------



## Mootsfox

Trying the 100,000,000 test


----------



## Licht

Quote:


Originally Posted by *ThePope* 
I am getting the same issue. Every time I test it, It seems to take longer. And ya, why is the single core faster?

Starting and running threads in itself consumes CPU power, on smaller tests the benefits may not outweigh the gains, and thus a single core test will be faster.

I am seeing a pattern here, people with issues seam to have quad cores....

DoubleMark is now the 7th most viewed and number 1 most posted in topic for coding and programming.







This is approaching 150 posts and 3000 views.


----------



## Mootsfox

Why is it called Doublemark?


----------



## Licht

Quote:



Originally Posted by *Mootsfox*


Why is it called Doublemark?


Originally the project was called Prime Benchmark, after build 2 i took notice of the demand for a multi-threaded pi calculation benchmark. After reviewing the information at hand i decided eventually (build 4 or 5 is guaranteed to have at least single threaded pi calculation) add pi calculation to the scope of Prime Benchmark. After going through allot of coding the name DoubleMark came to mind. Double is derived from the 2 tests i had envisioned and Mark taken from the shortening of Benchmark used often.


----------



## arekieh

where do we post our scores?
is there a comparison database?


----------



## Licht

Quote:



Originally Posted by *arekieh*


where do we post our scores?
is there a comparison database?


For now this thread, when thepope gets his server up i'm gonna set up validation and scoreboards. (Among other things.)


----------



## arekieh

Quote:



Originally Posted by *Licht*


For now this thread, when thepope gets his server up i'm gonna set up validation and scoreboards. (Among other things.)


sweet








heres my results









is that a decent time?
also why is "calculate pi" blacked out, and it wont let me select it? future addition to the program?


----------



## Licht

Quote:



Originally Posted by *arekieh*


sweet








heres my results









is that a decent time?
also why is "calculate pi" blacked out, and it wont let me select it? future addition to the program?










Run the 25k test (25000) thats where you can actually get accurate readings of CPU power. The 10,000 length was a mistake i made i really should have removed it. In build 4 it is removed however, i already removed it from the source code.


----------



## arekieh

here ya go


----------



## Licht

Quote:



Originally Posted by *arekieh*


here ya go










There Intel scores just keep putting my CPU in a pit of shame.


----------



## arekieh

Quote:



Originally Posted by *Licht*


There Intel scores just keep putting my CPU in a pit of shame.

































WIN WIN WIN


----------



## d3daiM

I put it on 100,000,000 and my score doesn't change a bit lol.


----------



## OmegaNemesis28

if you need to - you can use my [several] servers.


----------



## Licht

Quote:



Originally Posted by *d3daiM*


I put it on 100,000,000 and my score doesn't change a bit lol.


Make sure your version of the .net framework is up to date and redownload the application. To be sure i downloaded what i uploaded and ran it, works fine.

Quote:



if you need to - you can use my [several] servers.


Do you have a messenger client such as Xfire, MSN, or YIM?


----------



## version2

There are some interesting PI algorithms... I'm not sure about multi-threading though. The CPU benchmarking program in my sig has a fast pi calculator (it runs slow because it's php...)

Nice work so far.


----------



## Licht

Quote:



Originally Posted by *version2*


There are some interesting PI algorithms... I'm not sure about multi-threading though. The CPU benchmarking program in my sig has a fast pi calculator (it runs slow because it's php...)

Nice work so far.


What are the source codes for? (For example my source code is for Visual Studio 2008.)


----------



## AKAeric

whoooo, looking good. This thread is definitely on my watch list.


----------



## txtmstrjoe

Am taking this baby out on a test drive.

Looking good so far! GJ!


----------



## thenailedone

Just a question... is there a thread where ppl are posting scores for this benchmark? Just to see how they stack up etc.


----------



## Licht

Quote:



Originally Posted by *thenailedone*


Just a question... is there a thread where ppl are posting scores for this benchmark? Just to see how they stack up etc.


No some people have posted it here but you are welcome to create a second thread for such if you like.







Build 4 will most likely have an online database and validation tool (however it will be closed source unless someone wants it badly enough for me to strip out everything related to the validation method.) Maybe a website for just generally everything related to the benchmark as well.


----------



## Licht

Ok guys, opinion time. Are scores better or is providing the raw data (in this case time to complete is the raw information the benchmark has been showing) better?


----------



## afzsom

Well, it would be nice to have both. However if you give both and the score is based off of the time (usually), then people can correlate the two and interpolate values and reverse engineer it and come up with fake high scores that will look legitimate. I'd say scores only, as people like higher numbers rather than lower times







Just look, 3DMarks is more popular to run and boast higher numbers rather than "LOL MY SUPERPI TIME IS LOWER THAN YOURS."


----------



## arekieh

Quote:



Originally Posted by *afzsom*


Well, it would be nice to have both. However if you give both and the score is based off of the time (usually), then people can correlate the two and interpolate values and reverse engineer it and come up with fake high scores that will look legitimate. I'd say scores only, as people like higher numbers rather than lower times







Just look, 3DMarks is more popular to run and boast higher numbers rather than "LOL MY SUPERPI TIME IS LOWER THAN YOURS."










agreed


----------



## Licht

From the excellent points raised, looking like scores will be the system of choice in the future, gonna do some asking around before i write it in stone though.

Massive bit of support for raw data from Xfire, ill take it as wise to wait and see how things go.


----------



## Licht

http://www.overclock.net/downloads/3...ml#post3674602

DoubleMark has been added to the overclock.net download section, the program is now OCN exclusive. Hope this brings more attention to the project, thanks everyone for your help. Lets hope DoubleMark will continue expanding further!


----------



## gonX

Quote:



Originally Posted by *Licht*


I don't care. Go as offtopic as you like.


In that case:

I like fluorescent lights.


----------



## thenailedone

Quote:



Originally Posted by *gonX*


In that case:

I like fluorescent lights.


Hamid: What's that?
Rambo: It's blue light.
Hamid: What does it do?
Rambo: It turns blue.


----------



## Licht

I just realized to edit the first post and not even mention i did defeats the purpose.

Quote:



Build 4 is coming, should have numerous fixes and allot of work on enabling some of the things seen in the GUI. In addition if all gos well build 4 will have validation. The situation on that is afzsom is actually tackling that area of the code current experimenting with getting it working, then will add encryption. Pending on when we both get done with our respective areas of the benchmark will decide when it gets released. Remember that once hes done i will have to add the code to the source and get it working within the new environment of the program itself. Hard stuff to do, especially cryptology.


----------



## Licht

I think its worth the trouble of posting to give an update.

Having some issues on the networking side, may just release build4 is a glitch fix build with some added smaller features. Issue lies in updating tables, i'm not entirely sure whats wrong with it thats afszom's department. As for me i'm working with some threading trying to fix the program continuing to run if exiting it during a test glitch and add a cancel button. (Among other things of course.) Troublesome arrays. Anyways thats all i can think of to put in here, if you have a question don't hesitate to ask.


----------



## arekieh

Quote:



Originally Posted by *Licht*


I think its worth the trouble of posting to give an update.

Having some issues on the networking side, may just release build4 is a glitch fix build with some added smaller features. Issue lies in updating tables, i'm not entirely sure whats wrong with it thats afszom's department. As for me i'm working with some threading trying to fix the program continuing to run if exiting it during a test glitch and add a cancel button. (Among other things of course.) Troublesome arrays. Anyways thats all i can think of to put in here, if you have a question don't hesitate to ask.


Good stuff
keep up the good work


----------



## Licht

I want to add, would you guys rather wait for everything to be added that i originally planned for build 4 or should the databasing hold off until build 5?


----------



## afzsom

Personally I'd say hold off on adding the database in Build 4...as I have a lot more things on my plate at the moment...more important stuff like graduating college that come before this benchmarking program. I should be able to devote more time to this in a few weeks' time though.


----------



## Licht

Quote:



Originally Posted by *afzsom*


Personally I'd say hold off on adding the database in Build 4...as I have a lot more things on my plate at the moment...more important stuff like graduating college that come before this benchmarking program. I should be able to devote more time to this in a few weeks' time though.


And with that it is decided.


----------



## Licht

http://www.overclock.net/art-graphic...en-always.html

Assistance needed.


----------



## Firestorm252

Here's mine


----------



## Licht

Website might be up soon, any suggestions for a domain name PM to me please.


----------



## {core2duo}werd

very nice job, i think instead of numbers like 1000000 when you say length, you should have 1m and 250k instead of 250000, it just makes it a little easier.


----------



## Licht

Quote:


Originally Posted by *{core2duo}werd* 
very nice job, i think instead of numbers like 1000000 when you say length, you should have 1m and 250k instead of 250000, it just makes it a little easier.

I'll make sure to get that in eventually.


----------



## Licht

Rough times, build 4 will be out when i can get a few questions in with some guys. Additionally my offline life got kinda rough for a bit, and i'm exhausted from constant go a million places a day for the last week or two. So be patient with me, this program isn't terribly easy to make in the first place. Quick overview on what i want to do.

Build 4 : Glitch fixes, minor optimizations, secondary feature implementations, test length fix, better score output, more information on tests and results, and much more.

Suggestions, comments, etc. on the road map or current build feel free to throw out there.


----------



## Licht

DoubleMark is going to go through some drastic changes. I'm shifting focus, the program is made for overclocking now. I initially wanted to make a benchmarking application, as things grew i always saw potential in the program for overclocking. The ability to test as many cores as Windows is capable of, and benchmarking the same. The whole concept was cut out for overclocking.

As of now that is the primary focus of the program. As a result i'm going to be shifting things allot, to try and focus more on that. Build 4 is going to be the shifting point, i plan to add a CPU identification (used for clock verification) tab. It will display all the various info helpful to overclockers. HT link speed, FSB speed (pending AMD or Intel), CPU speed, etc. Additionally pi calculation is cut from the program as an unnecessary bit that would simply consume too much time to justify it.

More movement towards becoming a standardizational application will be taken. I will release build 4 in a variety of flavors, so to say. It will be released for .net 2.0 and .net 3.0. There will be a download available with the .net redistributable included and one without. Included will be a batch file to create shortcuts and place the file in its own little folder if you want to do so.

As for the end of DoubleMark, from what i can tell, build 5 or 6 will most likely be version 1.0. If you have a suggestion be sure to get it in before 5 if at all possible. Its leaning towards 6 being final. As for servers and sites and whatnot, DoubleMark will hopefully have a website up within summer's end. This should greatly help popularization of the application. However downloads will remain on OCN, keeping it a very OCN based program.


----------



## Licht

I would like to ask you all, what do you like in a stress tester? As i see DoubleMark put to use the stress testing qualities of the application really are great so far. I want to know what more i need to work on. Currently i'm working on a timer system, a time tracking system, and a few other things for the stress such as instability checking. But if you want to see anything else in the application, no matter how unlikely it may be i use it, i want to know about it.


----------



## OmegaNemesis28

here


----------



## Licht

Quote:



Originally Posted by *OmegaNemesis28*


here


?...


----------



## OmegaNemesis28

Quote:



Originally Posted by *Licht*


?...


I uploaded my bench result


----------



## AKAeric

So I'm sitting at work when I get an email from a co-worker asking me about safe temps on a processor while stress testing. I ask what he's using to stress test. He says DoubleMark. Apparently someone saw the .zip in my shared folder and now a bunch of techs use it.

Un-officially approved by Microsoft IT, =P


----------



## dskina

Reran it.


----------



## Licht

Quote:



Originally Posted by *AKAeric*


So I'm sitting at work when I get an email from a co-worker asking me about safe temps on a processor while stress testing. I ask what he's using to stress test. He says DoubleMark. Apparently someone saw the .zip in my shared folder and now a bunch of techs use it.

Un-officially approved by Microsoft IT, =P


Didn't see that one coming.







I'll try to push out B4 quickly. I've made a lot of improvements since i haven't had any pressure to release i just kept working. To name a few : Priority controls, Timed stressing, CPU overclocker information, etc.

Also any of them have questions/comments/suggestions it's [email protected].


----------



## Licht

Quick update. I finally, actually, let me rephrase that : I *finally* figured out a fix for the glitch where DM keeps running after the program is closed. I'm going to actually rewrite the whole program for my new code (as it has become messy where i am inexperienced.) It won't take long since the actual code writing for a program that is made the way DM is isn't difficult, it is all the theory behind it (which i could draw out on paper and be 100% accurate.)

Also, next version will be v1.0.


----------



## wierdo124

Can't wait for B4









It glitches for me. Sometimes works and sometimes doesn't. It stops working, no error, just windows says it stopped working and closes it.


----------



## Licht

Quote:



Originally Posted by *wierdo124*


Can't wait for B4









It glitches for me. Sometimes works and sometimes doesn't. It stops working, no error, just windows says it stopped working and closes it.


Odd, never heard that one before. Make sure your .net framework is up to date. I reinstalled Windows and don't have my compiler installed yet, also been working on some other projects a lot more. I'll get back to work soon enough. Next version is 1.0 and i'm promising big things. All controls will be unlocked and functional with no glitches.



















Above is subject to changes, should be minor if there are.


----------



## wierdo124

Awesome...any idea when it'll be out?


----------



## Licht

Quote:


Originally Posted by *wierdo124* 
Awesome...any idea when it'll be out?

I learned my lesson about setting dates i can't keep. I'll be posting here occasionally to keep everyone up to date, so subscribe here and keep up to date that way. Right now i'm almost finished with the stress testing algorithm and such so that will definitely be good to have done.


----------



## wierdo124

I'm not looking for a date, just an idea..do you have any clue of a timeframe? A week? A month? A year? a decade?

Just trying to get an idea. I think others would like to know too.


----------



## Licht

Quote:



Originally Posted by *wierdo124*


I'm not looking for a date, just an idea..do you have any clue of a timeframe? A week? A month? A year? a decade?

Just trying to get an idea. I think others would like to know too.


September-October if i work my fingers to the bone. Since i have the experience necessary to get everything done now (something i lacked earlier, i would get stuck on something and have to look for the answer on what i was doing wrong for days) i should be able to keep that. I've already sent out copies of what i have done for testing on the stress testing system.


----------



## Licht

http://www.blackapps.net/download/FindPrime.zip

Little program created to help me check for errors within DM. Very handy, maybe you guys can find some use for it too.

As for the progress on DoubleMark, id say 70% done.


----------



## wierdo124

Any updates? We're gettting into november here..


----------



## Licht

Quote:


Originally Posted by *wierdo124* 
Any updates? We're gettting into november here..

I was surprised people remembered... My personal life tends to work against Doublemark. I'll get you guys an *internal* beta i released to test a new engine system. I have a version later then that that has all the issues except for 1 hammered out 100%. Attached is your goodies to hold you over while i play around with the final code.




























Again, attached are *internal* beta, absolutely not fit for distribution. But desperate times to desperate deliveries.

9,100th post.


----------



## wierdo124

Good work...nothing comes up in the Identity or About tabs. Just an empty tab. Also you compressed it weirdly...it's a zipped file, inside a rar file...?


----------



## Licht

Quote:



Originally Posted by *wierdo124*


Good work...nothing comes up in the Identity or About tabs. Just an empty tab. Also you compressed it weirdly...it's a zipped file, inside a rar file...?


That is why i said *"internal* beta." I just threw 2 files (that were zipped so i could transfer over MSN) i had on file for programs that _ran_ and rared them together.


----------



## wierdo124

ah i see.


----------



## Licht

Major issue here... I might have lost a certain folder to a certain HDD at a certain time without a certain backup. And i might have to go back a little. However i have the diagrams of how everything was done in my notebook. 2 hours of work to restore tops. Plus every time i rewrite the code gets that much better since i am still at the point my knowledge increases in leaps and bounds.


----------



## wierdo124

good stuff!


----------



## Licht

Quote:



Originally Posted by *wierdo124*









good stuff!


Good stuff?


----------



## wierdo124

Any update?


----------



## Licht

Quote:


Originally Posted by *wierdo124* 
Any update?

I haven't done anything in a while. I need to get a hold of another copy of Visual Studio Pro. Also need to start over. I'm thinking a different name and design all over because the application isn't a benchmark any more. Recently i've started to get picked up to really start back on it. Personal life is in great shape and i have a *lot* of time to kill. I think this might be the chance i need to get going. If i do get something out the door i'll be hitting you guys up with a new topic.

Sorry for ditching the project like i did. But when i lost all my work by accident i was so close to finishing 1.0... i just lost all determination until now.


----------



## Licht

Anyone have screen shots of it before i reformatted it away? I know i handed some out to someone...


----------



## Licht

Project officially ended. The last executable generated is attached. I don't even know if it works. But it was all i could retrieve from the shambles of my reformat.

I have begun a new, much more well done, project. That beta is available upon request to those who can contact me through messenger regularly. Otherwise no beta will currently be made public, it isn't very effective for such a small program through a forum system. I will say that the next beta will contain more then an executable and will be aimed at everything the overclocker needs. Look forward to something truly useful as i found myself much better at coding this go, project advancing extremely fast.


----------



## wierdo124

Can't wait to see what you come up with


----------



## DennE_II

My Result on 250k... Overclocked today for the first time and its holding as far as i can see...


----------



## Licht

Welcome to OCN. I would like to point out this project is currently closed. However it is a great stress tester that loads nearly instantaneously in it's last build. Good to see that it is being used.

Your attachment link is invalid.


----------

