Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by hicks · Jun 17, 2015 at 05:23 PM · shaderprofilergpucompute shaderprofiling

Is it possible to profile compute shaders?

As the title says, I'm wondering if it is possible to profile compute shaders. I want to know the time each compute kernel took in one frame. The Unity Profiler does not show this as it only tracks CPU calls. Compute kernels however run in parallel so the Dispatch calls take 0 ms. Any ideas?

Comment
Add comment · Show 3
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Dani Phye · Jun 09, 2016 at 06:33 PM 0
Share

This question is slightly relevant here.

avatar image hicks Dani Phye · Jun 09, 2016 at 10:40 PM 0
Share

Thanks but that only applies for VR SD$$anonymous$$s as far as I understand. I ended up disabling VSync so that it would just run as fast as possible. However, this is not very accurate when it runs very fast and the delta time is not very helpful when you want the time of different compute shader dispatches. When I needed accurate values (for a scientific thesis) I dispatched a kernel and copied a tiny buffer back from GPU memory to main memory immediately after the dispatch call. This forced the GPU to compute the results first. So I could take the time on the CPU and keep some time in $$anonymous$$d, what it costs to copy the data back.

avatar image Dani Phye hicks · Jun 10, 2016 at 12:43 AM 0
Share

Ah that's really cool! Yea I don't think that that function exists outside VR SD$$anonymous$$s, and it also incorporates the time on the GPU that the VR functions and rendering functions and other things spend. Yours is a great way to profile a compute shader though

2 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by Arycama · Jun 16, 2019 at 07:57 AM

Are you talking about profiling in Editor or on device?

If GPU profiling works in Editor on your machine, you can wrap the Dispatch calls in Profier.BeingSample("Some meaningful string here"), and Profiler.EndSample().

This will show the GPU time under the GPU profiler for each dispatch. I'd assume the same works for builds too, if the device supports GPU profiling.

Keep in mind, if you're reading data back from the GPU, this won't necessarily help, as doing ComputeBuffer.GetData will stall the CPU until the GPU is finished. You'll just have to yield return new WaitForSeconds() with an approximate guess of how long the compute shader will take, which will vary across devices.

AsyncGPUReadbacks introduced in 2019 help with this, however the GPU will still stutter if you're attempting to do large Compute Shaders at once, as it still interrupts the regular rendering draw calls. Async Compute helps with this but it requires using command buffers, and is apparently only supported on PS4 and XboxOne. I haven't tried it out yet in editor however.

Anyway, just some general ComputeShader optimisation tips from me. There's also a lot of good info online about aligning your data structures to be aligned to 4 bytes, etc.

Good luck, compute shaders are very fun.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image
0

Answer by Waffle1434 · Nov 24, 2019 at 10:16 PM

I would suggest compiling and build and profiling it with a graphics debugger like RenderDoc, Nsight, or the latest PIX, which should collect statistics on Compute kernels in a frame. I believe Nsight and PIX show GPU occupancy.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

What is this shader? 1 Answer

Graphics and GPU Profiling 0 Answers

[Compute Shader] Porting an Image Effect Shader - Kuwahara Filter 2 Answers

Custom colliders on the GPU 0 Answers

GFX.WaitForPresent for no reason 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges