Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Dual-core CPUs and Multi-threading [modified]

Dual-core CPUs and Multi-threading [modified]

Scheduled Pinned Locked Moved The Lounge
asp-nethardwareperformancequestion
30 Posts 19 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R realJSOP

    When you have a dual core CPU, does a multi-threaded app "just know" that it can use the 2nd core, or can/must you set cpu affinity on a thread-by-thread basis in order to take advantage of the 2nd core? Now that I have a dual-core CPU, I was thinking about writing an app to compare the speed of using just one core versus using both cores to run a calculation-intensive thread. (It's fun to play with ne hardware.) -- modified at 8:33 Friday 4th August, 2006 (for spelling errors)

    "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
    -----
    "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

    A Offline
    A Offline
    AbhishekBK
    wrote on last edited by
    #3

    John Simmons / outlaw programmer wrote:

    It's fun to play with ne hardware.

    It always is.

    Abhishek

    1 Reply Last reply
    0
    • R realJSOP

      When you have a dual core CPU, does a multi-threaded app "just know" that it can use the 2nd core, or can/must you set cpu affinity on a thread-by-thread basis in order to take advantage of the 2nd core? Now that I have a dual-core CPU, I was thinking about writing an app to compare the speed of using just one core versus using both cores to run a calculation-intensive thread. (It's fun to play with ne hardware.) -- modified at 8:33 Friday 4th August, 2006 (for spelling errors)

      "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
      -----
      "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

      M Offline
      M Offline
      malockin
      wrote on last edited by
      #4

      I think that the OS kernel is supposed to take care of distributing the threads among available CPUs. -- I don't suffer from insanity.. I enjoy every minute of it.

      1 Reply Last reply
      0
      • R realJSOP

        When you have a dual core CPU, does a multi-threaded app "just know" that it can use the 2nd core, or can/must you set cpu affinity on a thread-by-thread basis in order to take advantage of the 2nd core? Now that I have a dual-core CPU, I was thinking about writing an app to compare the speed of using just one core versus using both cores to run a calculation-intensive thread. (It's fun to play with ne hardware.) -- modified at 8:33 Friday 4th August, 2006 (for spelling errors)

        "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
        -----
        "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

        G Offline
        G Offline
        Gary R Wheeler
        wrote on last edited by
        #5

        John Simmons / outlaw programmer wrote:

        It's fun to play with new hardware

        <voice_of_envy> And to brag about it :-D. </voice_of_envy>


        Software Zen: delete this;

        Fold With Us![^]

        R 1 Reply Last reply
        0
        • R realJSOP

          When you have a dual core CPU, does a multi-threaded app "just know" that it can use the 2nd core, or can/must you set cpu affinity on a thread-by-thread basis in order to take advantage of the 2nd core? Now that I have a dual-core CPU, I was thinking about writing an app to compare the speed of using just one core versus using both cores to run a calculation-intensive thread. (It's fun to play with ne hardware.) -- modified at 8:33 Friday 4th August, 2006 (for spelling errors)

          "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
          -----
          "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

          M Offline
          M Offline
          Mike Dimmick
          wrote on last edited by
          #6

          The OS allocates threads to logical processors, if they're runnable (not blocked or suspended), in order of priority. A thread will run for up to its quantum on any CPU on which it's allowed to run (you can set affinity to restrict a thread to specific logical processors) unless it's pre-empted by a higher priority thread. Windows boosts foreground apps by giving their threads a longer quantum than background apps. To take advantage of cache locality, Windows remembers which logical processor (logical HT core, physical core, physical processor) a thread last ran on, and a preferred logical processor for that thread. Each new thread in a process gets a different preferred processor from the previous one, rotating across the logical processors. If possible, it runs the thread on the last processor, or if that is not available, on the preferred processor. If neither are available it tries a nearby processor - another logical HT processor on the same core, another core in the same package, then other cores in the same memory domain (for Non-Uniform Memory Access [NUMA] systems), then finally any available core. The full details are in 'Windows Internals, 4th Edition' by Mark Russinovich and David Solomon. I'm hoping that Mark's SysInternals' acquisition by Microsoft doesn't get in the way of him updating this book!

          Stability. What an interesting concept. -- Chris Maunder

          J G L S 4 Replies Last reply
          0
          • M Mike Dimmick

            The OS allocates threads to logical processors, if they're runnable (not blocked or suspended), in order of priority. A thread will run for up to its quantum on any CPU on which it's allowed to run (you can set affinity to restrict a thread to specific logical processors) unless it's pre-empted by a higher priority thread. Windows boosts foreground apps by giving their threads a longer quantum than background apps. To take advantage of cache locality, Windows remembers which logical processor (logical HT core, physical core, physical processor) a thread last ran on, and a preferred logical processor for that thread. Each new thread in a process gets a different preferred processor from the previous one, rotating across the logical processors. If possible, it runs the thread on the last processor, or if that is not available, on the preferred processor. If neither are available it tries a nearby processor - another logical HT processor on the same core, another core in the same package, then other cores in the same memory domain (for Non-Uniform Memory Access [NUMA] systems), then finally any available core. The full details are in 'Windows Internals, 4th Edition' by Mark Russinovich and David Solomon. I'm hoping that Mark's SysInternals' acquisition by Microsoft doesn't get in the way of him updating this book!

            Stability. What an interesting concept. -- Chris Maunder

            J Offline
            J Offline
            Jonathan Darka
            wrote on last edited by
            #7

            Mike Dimmick wrote:

            I'm hoping that Mark's SysInternals' acquisition by Microsoft doesn't get in the way of him updating this book

            It is a great book, just over halfway through it.


            Darka [Xanya] "When you're taught to love everyone, to love your enemies, then what value does that place on love?"

            1 Reply Last reply
            0
            • G Gary R Wheeler

              John Simmons / outlaw programmer wrote:

              It's fun to play with new hardware

              <voice_of_envy> And to brag about it :-D. </voice_of_envy>


              Software Zen: delete this;

              Fold With Us![^]

              R Offline
              R Offline
              realJSOP
              wrote on last edited by
              #8

              Don't get too envious yet. Apparently there are "issues" with multiple cores under Windows with several apps (mostly games, but I don't own any of the ones I've seen mentioned), and this is such a problem that AMD has issued a new driver, and MS has issued a patch to address it. I'm running Win2K on the system in question, and I haven't noticed any problems (yet), but if I do, I haven't found anything about whether or not the driver/patch combo will work on Win2K. I'm not sure what I need to do about it yet, either. -- modified at 8:31 Friday 4th August, 2006

              "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
              -----
              "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

              J G D D S 5 Replies Last reply
              0
              • R realJSOP

                Don't get too envious yet. Apparently there are "issues" with multiple cores under Windows with several apps (mostly games, but I don't own any of the ones I've seen mentioned), and this is such a problem that AMD has issued a new driver, and MS has issued a patch to address it. I'm running Win2K on the system in question, and I haven't noticed any problems (yet), but if I do, I haven't found anything about whether or not the driver/patch combo will work on Win2K. I'm not sure what I need to do about it yet, either. -- modified at 8:31 Friday 4th August, 2006

                "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
                -----
                "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

                J Offline
                J Offline
                Jonathan Darka
                wrote on last edited by
                #9

                John Simmons / outlaw programmer wrote:

                Apparently there are "issues" with multiple cores under Windows with several apps

                oh yes there are, it took ages to get Command & Conquer Generals working, but it did in the end. Not come across anything that didn't work straight away though, been multi-core for a couple of months now, wouldn't move back (2 Gb ram helps too!).


                Darka [Xanya] "When you're taught to love everyone, to love your enemies, then what value does that place on love?"

                1 Reply Last reply
                0
                • R realJSOP

                  When you have a dual core CPU, does a multi-threaded app "just know" that it can use the 2nd core, or can/must you set cpu affinity on a thread-by-thread basis in order to take advantage of the 2nd core? Now that I have a dual-core CPU, I was thinking about writing an app to compare the speed of using just one core versus using both cores to run a calculation-intensive thread. (It's fun to play with ne hardware.) -- modified at 8:33 Friday 4th August, 2006 (for spelling errors)

                  "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
                  -----
                  "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

                  R Offline
                  R Offline
                  Ryan Binns
                  wrote on last edited by
                  #10

                  As Darka and Mike have said, you don't have to do anything; Windows will do it for you. You can, however, limit which processors your threads will run on using the CPU affinity is you wish. If you have two threads sharing the same data that can be cached, then it makes sense to run them on the same processor, or different HT cores of the same CPU, so that they can use the same cache.

                  Ryan

                  "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"

                  1 Reply Last reply
                  0
                  • M Mike Dimmick

                    The OS allocates threads to logical processors, if they're runnable (not blocked or suspended), in order of priority. A thread will run for up to its quantum on any CPU on which it's allowed to run (you can set affinity to restrict a thread to specific logical processors) unless it's pre-empted by a higher priority thread. Windows boosts foreground apps by giving their threads a longer quantum than background apps. To take advantage of cache locality, Windows remembers which logical processor (logical HT core, physical core, physical processor) a thread last ran on, and a preferred logical processor for that thread. Each new thread in a process gets a different preferred processor from the previous one, rotating across the logical processors. If possible, it runs the thread on the last processor, or if that is not available, on the preferred processor. If neither are available it tries a nearby processor - another logical HT processor on the same core, another core in the same package, then other cores in the same memory domain (for Non-Uniform Memory Access [NUMA] systems), then finally any available core. The full details are in 'Windows Internals, 4th Edition' by Mark Russinovich and David Solomon. I'm hoping that Mark's SysInternals' acquisition by Microsoft doesn't get in the way of him updating this book!

                    Stability. What an interesting concept. -- Chris Maunder

                    G Offline
                    G Offline
                    Graham Shanks
                    wrote on last edited by
                    #11

                    A colleague told me the other day that he had tried to run one of our applications on a specified core (after your explanation I reckon that he set the affinity to a specified core) and that it actually slowed the application down. Is this because the thread restricted to a specific logical processor might be blocked by other threads, whilst if it wasn't restricted then it would be free to take up time on another logical processor? Graham My signature is not black, just a very, very dark blue

                    1 Reply Last reply
                    0
                    • R realJSOP

                      Don't get too envious yet. Apparently there are "issues" with multiple cores under Windows with several apps (mostly games, but I don't own any of the ones I've seen mentioned), and this is such a problem that AMD has issued a new driver, and MS has issued a patch to address it. I'm running Win2K on the system in question, and I haven't noticed any problems (yet), but if I do, I haven't found anything about whether or not the driver/patch combo will work on Win2K. I'm not sure what I need to do about it yet, either. -- modified at 8:31 Friday 4th August, 2006

                      "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
                      -----
                      "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

                      G Offline
                      G Offline
                      Gary R Wheeler
                      wrote on last edited by
                      #12

                      Based on comments from the device driver guy in my group, I wouldn't be surprised to see a lot of driver updates. Apparently it's pretty easy for a driver to assume a single processor environment and fail to take into account multiprocessor issues. This causes everything from performance problems to random BSOD's.

                      John Simmons / outlaw programmer wrote:

                      I'm running Win2K on the system in question

                      I didn't think Win2K supported multiple processors out of the box. Or are you running a server version?


                      Software Zen: delete this;

                      Fold With Us![^]

                      R D 2 Replies Last reply
                      0
                      • M Mike Dimmick

                        The OS allocates threads to logical processors, if they're runnable (not blocked or suspended), in order of priority. A thread will run for up to its quantum on any CPU on which it's allowed to run (you can set affinity to restrict a thread to specific logical processors) unless it's pre-empted by a higher priority thread. Windows boosts foreground apps by giving their threads a longer quantum than background apps. To take advantage of cache locality, Windows remembers which logical processor (logical HT core, physical core, physical processor) a thread last ran on, and a preferred logical processor for that thread. Each new thread in a process gets a different preferred processor from the previous one, rotating across the logical processors. If possible, it runs the thread on the last processor, or if that is not available, on the preferred processor. If neither are available it tries a nearby processor - another logical HT processor on the same core, another core in the same package, then other cores in the same memory domain (for Non-Uniform Memory Access [NUMA] systems), then finally any available core. The full details are in 'Windows Internals, 4th Edition' by Mark Russinovich and David Solomon. I'm hoping that Mark's SysInternals' acquisition by Microsoft doesn't get in the way of him updating this book!

                        Stability. What an interesting concept. -- Chris Maunder

                        L Offline
                        L Offline
                        Lost User
                        wrote on last edited by
                        #13

                        Mark is the man alright. I've got a lot of respect for him since the first time I used DebugView. Man, it was a real god send. And we use it really heavily now. I just hope he gets a Vista version going soon.

                        Truth is the subjection of reality to an individuals perception

                        D 1 Reply Last reply
                        0
                        • R realJSOP

                          When you have a dual core CPU, does a multi-threaded app "just know" that it can use the 2nd core, or can/must you set cpu affinity on a thread-by-thread basis in order to take advantage of the 2nd core? Now that I have a dual-core CPU, I was thinking about writing an app to compare the speed of using just one core versus using both cores to run a calculation-intensive thread. (It's fun to play with ne hardware.) -- modified at 8:33 Friday 4th August, 2006 (for spelling errors)

                          "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
                          -----
                          "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

                          J Offline
                          J Offline
                          John M Drescher
                          wrote on last edited by
                          #14

                          John Simmons / outlaw programmer wrote:

                          Now that I have a dual-core CPU, I was thinking about writing an app to compare the speed of using just one core versus using both cores to run a calculation-intensive thread. (It's fun to play with ne hardware.)

                          If your calculation is not mutlithreaded the result is the dual core will probably be slower considering that it is probably clocked slower than the processor it replaces.

                          John

                          R 1 Reply Last reply
                          0
                          • R realJSOP

                            Don't get too envious yet. Apparently there are "issues" with multiple cores under Windows with several apps (mostly games, but I don't own any of the ones I've seen mentioned), and this is such a problem that AMD has issued a new driver, and MS has issued a patch to address it. I'm running Win2K on the system in question, and I haven't noticed any problems (yet), but if I do, I haven't found anything about whether or not the driver/patch combo will work on Win2K. I'm not sure what I need to do about it yet, either. -- modified at 8:31 Friday 4th August, 2006

                            "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
                            -----
                            "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

                            D Offline
                            D Offline
                            daniilzol
                            wrote on last edited by
                            #15

                            Never had any problems with dual P3 config I had, but that was years ago. In any case, you can manually force affinity to one of the cores through task manager, shouldn't that fix the problem?

                            R 1 Reply Last reply
                            0
                            • R realJSOP

                              Don't get too envious yet. Apparently there are "issues" with multiple cores under Windows with several apps (mostly games, but I don't own any of the ones I've seen mentioned), and this is such a problem that AMD has issued a new driver, and MS has issued a patch to address it. I'm running Win2K on the system in question, and I haven't noticed any problems (yet), but if I do, I haven't found anything about whether or not the driver/patch combo will work on Win2K. I'm not sure what I need to do about it yet, either. -- modified at 8:31 Friday 4th August, 2006

                              "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
                              -----
                              "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

                              D Offline
                              D Offline
                              dandy72
                              wrote on last edited by
                              #16

                              > Apparently there are "issues" with multiple cores under Windows with several apps (mostly games The only problem I've seen with a game when I swapped my Athlon64 3200 with a 4800 was GTA San Andreas. The timing was *way* off, eg, the in-game clock and traffic moved as fast as the machine could make it (which was interesting in its own right) :-D My quick solution was to reinstall the game on top of itself (fortunately the installer was smart enough to realize it didn't actually have to transfer any files back from the media on the hard drive), so that took less than 30 seconds. I haven't encountered any other problem whatsoever, and I simply dropped the new CPU in without reinstalling anything. At some later point I stumbled upon AMD's newer driver and installed it, but I can't even comment whether that made any difference or not...

                              D S 2 Replies Last reply
                              0
                              • L Lost User

                                Mark is the man alright. I've got a lot of respect for him since the first time I used DebugView. Man, it was a real god send. And we use it really heavily now. I just hope he gets a Vista version going soon.

                                Truth is the subjection of reality to an individuals perception

                                D Offline
                                D Offline
                                dandy72
                                wrote on last edited by
                                #17

                                > I just hope he gets a Vista version going soon. After going through an acquisition, if MS wants him to write any code at all, you can bet one of his first tasks would be to ensure his existing utilities work on Vista...

                                1 Reply Last reply
                                0
                                • D dandy72

                                  > Apparently there are "issues" with multiple cores under Windows with several apps (mostly games The only problem I've seen with a game when I swapped my Athlon64 3200 with a 4800 was GTA San Andreas. The timing was *way* off, eg, the in-game clock and traffic moved as fast as the machine could make it (which was interesting in its own right) :-D My quick solution was to reinstall the game on top of itself (fortunately the installer was smart enough to realize it didn't actually have to transfer any files back from the media on the hard drive), so that took less than 30 seconds. I haven't encountered any other problem whatsoever, and I simply dropped the new CPU in without reinstalling anything. At some later point I stumbled upon AMD's newer driver and installed it, but I can't even comment whether that made any difference or not...

                                  D Offline
                                  D Offline
                                  Dan Neely
                                  wrote on last edited by
                                  #18

                                  AIUI the updated driver's primary fix was to a power/noise conservation feature that could underclock the two cores independently causing timers to fall out of syncronization.

                                  R 1 Reply Last reply
                                  0
                                  • G Gary R Wheeler

                                    Based on comments from the device driver guy in my group, I wouldn't be surprised to see a lot of driver updates. Apparently it's pretty easy for a driver to assume a single processor environment and fail to take into account multiprocessor issues. This causes everything from performance problems to random BSOD's.

                                    John Simmons / outlaw programmer wrote:

                                    I'm running Win2K on the system in question

                                    I didn't think Win2K supported multiple processors out of the box. Or are you running a server version?


                                    Software Zen: delete this;

                                    Fold With Us![^]

                                    R Offline
                                    R Offline
                                    realJSOP
                                    wrote on last edited by
                                    #19

                                    Gary R. Wheeler wrote:

                                    I didn't think Win2K supported multiple processors out of the box. Or are you running a server version?

                                    I'm using Win2k Pro. If you go into device manager, expand the tree item "Computer", double-click the sub item, and click the 2nd tab, you'll see two items listed - Single CPU, and Mulitple CPU. All I had to do was click the multiple CPU option, and reboot.

                                    "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
                                    -----
                                    "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

                                    1 Reply Last reply
                                    0
                                    • D daniilzol

                                      Never had any problems with dual P3 config I had, but that was years ago. In any case, you can manually force affinity to one of the cores through task manager, shouldn't that fix the problem?

                                      R Offline
                                      R Offline
                                      realJSOP
                                      wrote on last edited by
                                      #20

                                      Yeah, but that's a pain. :)

                                      "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
                                      -----
                                      "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

                                      1 Reply Last reply
                                      0
                                      • D Dan Neely

                                        AIUI the updated driver's primary fix was to a power/noise conservation feature that could underclock the two cores independently causing timers to fall out of syncronization.

                                        R Offline
                                        R Offline
                                        realJSOP
                                        wrote on last edited by
                                        #21

                                        Yeah, that's what I've seen when I googled it. I'm turned off "Cool-n-Quiet", so maybe I won't have issues.

                                        "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
                                        -----
                                        "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

                                        D 1 Reply Last reply
                                        0
                                        • J John M Drescher

                                          John Simmons / outlaw programmer wrote:

                                          Now that I have a dual-core CPU, I was thinking about writing an app to compare the speed of using just one core versus using both cores to run a calculation-intensive thread. (It's fun to play with ne hardware.)

                                          If your calculation is not mutlithreaded the result is the dual core will probably be slower considering that it is probably clocked slower than the processor it replaces.

                                          John

                                          R Offline
                                          R Offline
                                          realJSOP
                                          wrote on last edited by
                                          #22

                                          Well, the new CPU is the same clock speed as the one it replaced (both are rated at 2.2ghz). What I wanted to do was create a calc thread, run that thread simultaneously on both cores, and then run two instances of the thread on the first core, and then on the 2nd core. I'm just curious to see what the results would be. I expect that dual core will be faster, followed by 2nd core, and then by first core.

                                          "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
                                          -----
                                          "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups