Results 1 to 8 of 8

Thread: Scheduler Code Merged For AMD R600 LLVM Back-End

  1. #1
    Join Date
    Jan 2007
    Posts
    14,615

    Default Scheduler Code Merged For AMD R600 LLVM Back-End

    Phoronix: Scheduler Code Merged For AMD R600 LLVM Back-End

    The initial scheduler code has been merged into AMD's R600 GPU LLVM back-end...

    http://www.phoronix.com/vr.php?view=MTMxOTE

  2. #2
    Join Date
    Mar 2011
    Posts
    27

    Default

    This commit only concerns r600 gpu, not radeonsi. I'm still working on scheduling though and this commit isn't likely to give the best from the gpu at the moment, however it makes performance more consistent (by gathering fetch instructions and thus using built-in hardware fetch latency hiding). In fact it fixes some situation where llvm generated code performance was worse than the ones of classic generated code.

  3. #3
    Join Date
    Aug 2009
    Location
    Russe, Bulgaria
    Posts
    506

    Default

    Quote Originally Posted by vljn View Post
    This commit only concerns r600 gpu, not radeonsi. I'm still working on scheduling though and this commit isn't likely to give the best from the gpu at the moment, however it makes performance more consistent (by gathering fetch instructions and thus using built-in hardware fetch latency hiding). In fact it fixes some situation where llvm generated code performance was worse than the ones of classic generated code.
    Is Vadim's work on shader optimization is in good use for you?

  4. #4
    Join Date
    Nov 2008
    Location
    Madison, WI, USA
    Posts
    865

    Default

    Quote Originally Posted by Drago View Post
    Is Vadim's work on shader optimization is in good use for you?
    If I understood the mailing list conversations correctly, Vadim's shader optimization work is currently only useful for the TGSI back-end, not the LLVM back-end... Although there's chances to take the lessons learned to guide future LLVM back-end developments.

  5. #5
    Join Date
    Aug 2009
    Location
    Russe, Bulgaria
    Posts
    506

    Default

    Quote Originally Posted by Veerappan View Post
    If I understood the mailing list conversations correctly, Vadim's shader optimization work is currently only useful for the TGSI back-end, not the LLVM back-end... Although there's chances to take the lessons learned to guide future LLVM back-end developments.
    Yes, that is exactly what I meant. To use ideas from it, not code porting.

  6. #6
    Join Date
    Mar 2011
    Posts
    27

    Default

    Quote Originally Posted by Veerappan View Post
    If I understood the mailing list conversations correctly, Vadim's shader optimization work is currently only useful for the TGSI back-end, not the LLVM back-end... Although there's chances to take the lessons learned to guide future LLVM back-end developments.
    sb600 actually postprocess the bytecode emitted by either tgsi or llvm so it can be used with both backend. However sb600 applies optimisations also applied internally by llvm so it makes more sense to use it with tgsi.

    Quote Originally Posted by Drago View Post
    Yes, that is exactly what I meant. To use ideas from it, not code porting.
    Indeed I compared code emitted by sb600 to find where llvm is not optimal when it comes to scheduling, but most of the design idea came with discussions on irc with vadimg. For instance future patches will bring bottom-up scheduling instead of top-bottom scheduling because work on sb600 showed it to be better in most situation. Vadimg has also better knowledge of the hw than I do and I figured out some constraints llvm puts on instructions that were not mandatory (on dot4 instructions mainly) ; his experience is really helpful.

  7. #7
    Join Date
    Aug 2009
    Location
    Russe, Bulgaria
    Posts
    506

    Default

    Is there any hope that LLVM back-end will emit that optimal code as r600-sb?
    In the mailing list Vadim, expressed his disappointment with LLVM back-end. Any comment ot that?

    It is great that you two guys collaborate. The numbers from r600-sb are too good to settle with less.

  8. #8
    Join Date
    Mar 2011
    Posts
    27

    Default

    Quote Originally Posted by Drago View Post
    Is there any hope that LLVM back-end will emit that optimal code as r600-sb?
    Hopefully. There is really nothing that prevent LLVM to reach the quality of r600-sb wrt code quality, there is no real limitation on LLVM internal representation of instructions or control flow graph. And if there were, we can improve llvm core if necessary.
    Currently LLVM has performance right between pure tgsi and sb600 in Unigine : LLVM backend is 20-30% faster than tgsi, and sb600 backend is 20-30% faster than LLVM. I suspect this is because LLVM doesn't convert if clause as much as sb600 does,
    there is a LLVM pass that we could use but it would require some work to adapt it to R600 need.

    On the other hand LLVM is tailored to cpu needs which means there are a lot of feature we don't use, like debug symbol (afaik gpu step-by-step debugging a la gdb is not possible, I don't think anyone can keep track of hundreds of threads at once...) or linking (glsl programs are self contained). This does not affect generated code but rather the compiler performance : if you ever tried llvm, you probably noticed some "freeze" when a shader is loaded, either when a new character/weapon is loaded in nexuiz, or at some place in Unigine Heaven benchmark. This is because shader compilation, which is almost immediate with pure tgsi code and sb600. It may be possible to slightly improve this but I don't think we can beat sb600 on this.
    However in the long time the llvm backend is probably the only way to support opencl ; tgsi still lacks well tested representation of indirect addressing, functions, and pointers (for shared memory). Sb600 can be executed on llvm generated code, but I think it will be better if llvm backend was able to do all optimisations on its own.

    Anyway IMHO there is no right or wrong answer to the utility of sb600 or LLVM backend ; having an already fast backend like sb600 allows vadimg to spot some non obvious bottleneck like the stack reservation (that benefits every backend) and provides a better option for people that want performances instead of opencl support. Having a LLVM backend for r600 allows me to rely on well tested algorithm used by clang and work on things that could be reused by radeonsi later.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •