Announcement

Collapse
No announcement yet.

Chrome Gets A GPU Service Scheduler

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Chrome Gets A GPU Service Scheduler

    Phoronix: Chrome Gets A GPU Service Scheduler

    The Chrome/Chromium web-browser now has a GPU service scheduler...

    http://www.phoronix.com/scan.php?pag...-GPU-Scheduler

  • #2
    This is actually pretty interesting. For a moment I was like "I wonder why OSes or driver control panels have this sort of thing" but then I realized that in most cases, a GPU is really only working on one task at a time, but that isn't the case for Chrome.

    I could see this as being very beneficial to non-active tabs.

    Comment


    • #3
      What about a system-wide GPU scheduler? This is something every user who does GPU computing on his desktop needs so badly...
      ## VGA ##
      AMD: X1950XTX, HD3870, HD5870
      Intel: GMA45, HD3000 (Core i5 2500K)

      Comment


      • #4
        Originally posted by darkbasic View Post
        What about a system-wide GPU scheduler? This is something every user who does GPU computing on his desktop needs so badly...
        As someone who has done GPU computing, I haven't had the need for this. For example, you can designate one GPU for desktop rendering, one GPU for something like BOINC, and another GPU for video encoding. Unless you're doing SLI or are using an application that doesn't allow hardware selection, you get a lot of flexibility. If you've only got one GPU, you shouldn't really be multitasking with GPGPU tasks in the first place (and even then, many applications allow you to cap the GPU utilization for whatever you're processing). Otherwise, the application itself should be responsible for scheduling.

        I'm not saying a system-wide scheduler is a bad idea, but, I don't think anyone should need one.
        Last edited by schmidtbag; 12 May 2017, 11:40 AM.

        Comment


        • #5
          Originally posted by schmidtbag View Post
          As someone who has done GPU computing, I haven't had the need for this. For example, you can designate one GPU for desktop rendering, one GPU for something like BOINC, and another GPU for video encoding. Unless you're doing SLI or are using an application that doesn't allow hardware selection, you get a lot of flexibility. If you've only got one GPU, you shouldn't really be multitasking with GPGPU tasks in the first place (and even then, many applications allow you to cap the GPU utilization for whatever you're processing). Otherwise, the application itself should be responsible for scheduling.

          I'm not saying a system-wide scheduler is a bad idea, but, I don't think anyone should need one.
          What if you have only one GPU or if you want to use EVERY GPU spare cycle without wasting them not allocating the "desktop" GPU?
          ## VGA ##
          AMD: X1950XTX, HD3870, HD5870
          Intel: GMA45, HD3000 (Core i5 2500K)

          Comment


          • #6
            Originally posted by darkbasic View Post
            What if you have only one GPU or if you want to use EVERY GPU spare cycle without wasting them not allocating the "desktop" GPU?
            As stated before, if you've only got one GPU, you shouldn't be multitasking intensive processes. Obviously that doesn't mean you can't, but it's kind of like trying to watch an HD video while you're downloading updates and complaining about the buffering.

            If you want to use every space cycle available and not have any go toward desktop rendering, just let the process finish on it's own without touching the mouse/keyboard or else you're going to have a bad time, even if you're using something as basic as Openbox (I would know - I've done it).

            Comment


            • #7
              Originally posted by schmidtbag View Post
              As stated before, if you've only got one GPU, you shouldn't be multitasking intensive processes. Obviously that doesn't mean you can't, but it's kind of like trying to watch an HD video while you're downloading updates and complaining about the buffering.
              Nope, "downloading updates and complaining about the buffering" is a *non*-scheduled scenario. It's more like "downloading updates while seamlessly watching HD videos thanks to QoS". Damn it's perfectly possible for the CPU and everybody uses it, why wouldn't you want something similar for the GPU?
              ## VGA ##
              AMD: X1950XTX, HD3870, HD5870
              Intel: GMA45, HD3000 (Core i5 2500K)

              Comment


              • #8
                Originally posted by darkbasic View Post
                Nope, "downloading updates and complaining about the buffering" is a *non*-scheduled scenario. It's more like "downloading updates while seamlessly watching HD videos thanks to QoS".
                But the fact of the matter is it doesn't work that way - the computer doesn't know what your priorities are unless you explicitly tell it otherwise. If you have something like 25Mbps internet and you're trying to watch a 2K video while downloading a few gigs of updates, the OS is only going to evenly divide the bandwidth (unless the application specifies otherwise), and it won't be enough for a seamless watching experience. It won't know that your preference is to prioritize the video so it just barely keeps up with the buffer. The contrary could also be said.
                My point is, when you've got a single resource but multiple tasks, that resource is going to do a poor job at handling them and a scheduler isn't going to know what your priorities are, so it's entirely up to the user.

                Damn it's perfectly possible for the CPU and everybody uses it, why wouldn't you want something similar for the GPU?
                A CPU is a very different beast. Try using a single-core and test out how various schedulers are at handling your tasks, because I'm sure you're going to find very little difference between them.
                Unlike a CPU, all of a GPU's cores are designed to work together for the same common goal; GPUs aren't designed to process multiple unrelated tasks. Meanwhile, CPUs get additional cores because it allows them to multitask better. Having multi-threaded CPU tasks is a relatively recent concept, and one that still is severely under-developed - it is rare to find applications that will take advantage of more than 4 threads. Depending on your workload, there are more efficient ways to distribute tasks than others. This is why there are so many different types of CPU schedulers.

                In the case of Chrome, a scheduler makes complete sense, because as a single application, Chrome can dynamically and logically figure out which tab needs more GPU power. But when it comes to the OS, how would a scheduler help? Remember, GPUs aren't designed to handle multiple independent processes - synchronicity alone would make that very complicated.

                Keep in mind too that the GPU depends on the CPU. In other words, whatever the CPU scheduler is would override the GPU scheduler. In another perspective, the CPU scheduler is the system-wide GPU scheduler.
                Last edited by schmidtbag; 15 May 2017, 04:39 PM.

                Comment


                • #9
                  Originally posted by schmidtbag View Post
                  But the fact of the matter is it doesn't work that way - the computer doesn't know what your priorities are unless you explicitly tell it otherwise. If you have something like 25Mbps internet and you're trying to watch a 2K video while downloading a few gigs of updates, the OS is only going to evenly divide the bandwidth (unless the application specifies otherwise), and it won't be enough for a seamless watching experience. It won't know that your preference is to prioritize the video so it just barely keeps up with the buffer. The contrary could also be said.
                  My point is, when you've got a single resource but multiple tasks, that resource is going to do a poor job at handling them and a scheduler isn't going to know what your priorities are, so it's entirely up to the user.
                  That's exactly what priorities were invented for. In the QoS example you will also have to set your connection bandwidth and the priorities for each kind of traffic (discovered thanks to layer 7 filtering/etc..).


                  Originally posted by schmidtbag View Post
                  A CPU is a very different beast. Try using a single-core and test out how various schedulers are at handling your tasks, because I'm sure you're going to find very little difference between them.
                  Unlike a CPU, all of a GPU's cores are designed to work together for the same common goal; GPUs aren't designed to process multiple unrelated tasks. Meanwhile, CPUs get additional cores because it allows them to multitask better. Having multi-threaded CPU tasks is a relatively recent concept, and one that still is severely under-developed - it is rare to find applications that will take advantage of more than 4 threads. Depending on your workload, there are more efficient ways to distribute tasks than others. This is why there are so many different types of CPU schedulers.

                  In the case of Chrome, a scheduler makes complete sense, because as a single application, Chrome can dynamically and logically figure out which tab needs more GPU power. But when it comes to the OS, how would a scheduler help? Remember, GPUs aren't designed to handle multiple independent processes - synchronicity alone would make that very complicated.

                  Keep in mind too that the GPU depends on the CPU. In other words, whatever the CPU scheduler is would override the GPU scheduler. In another perspective, the CPU scheduler is the system-wide GPU scheduler.

                  I know it would a very hard task implement an efficient GPU scheduler, but you didn't seem to recognize it could be useful for some peoples, which brings the discussion a couple of steps before the actual implementation problems: I was simply trying to argue that a GPU scheduler could be useful, feasibility apart.
                  ## VGA ##
                  AMD: X1950XTX, HD3870, HD5870
                  Intel: GMA45, HD3000 (Core i5 2500K)

                  Comment


                  • #10
                    Originally posted by darkbasic View Post
                    That's exactly what priorities were invented for. In the QoS example you will also have to set your connection bandwidth and the priorities for each kind of traffic (discovered thanks to layer 7 filtering/etc..).
                    Whoops I misinterpreted what you were saying and made a mistake in my explaination. I was referring specifically to TCP/IP transfers. My bad - I wasn't being specific enough, and I was being a bit misleading when I said "streaming" (which usually uses UDP and in turn, QoS). Perhaps that should help clear up my points earlier too.

                    I know it would a very hard task implement an efficient GPU scheduler, but you didn't seem to recognize it could be useful for some peoples, which brings the discussion a couple of steps before the actual implementation problems: I was simply trying to argue that a GPU scheduler could be useful, feasibility apart.
                    Well what I don't really get is what the scheduler would actually accomplish, without losing efficiency. Again, consider how a single-core CPU works - you won't benefit much from changing the scheduler. In multi-GPU setups, it's up to the application to determine how each GPU is utilized.

                    I'm not specifically saying you're wrong, I just don't see how a GPU scheduler will help. Remember, GPUs tend to have limited memory and asynchronous communication to the host processes is inefficient.
                    Last edited by schmidtbag; 15 May 2017, 07:26 PM.

                    Comment

                    Working...
                    X