Profiling for C++ backend#45
Open
RichardWarfield wants to merge 1 commit into
Open
Conversation
|
You merged a bunch of foreign commits into your PR. You should be able to fix this by: (assuming you've got joschu/cgt added as a remote named "upstream") |
96b36ed to
6f64633
Compare
…end SequentialInterpreter. Native profiling involves several components: - C++ NativeProfiler class in execution.cpp, which plays the role of compilation._Profiler - Calls to update the profiler from SequentialInterpreter.run - Python wrapper for NativeProfiler in cycgt.pyx (NativeProfilerWrapper) - A reference to the wrapper is stored as a variable in the cycgt module (native_profiler) - In order for us to be consistent in displaying the profiling output on a per-Op (rather than per-instruction) basis, we need a way to map each C++ Instruction instance back to the Python Instr instance from which it derives. In order to make this possible I added a call in CppInterpreterWrapper__init__ that tells the NativeProfilerWrapper to store the mappings. - A C++ Instruction cannot (easily/safely) refer back to the Python op, but we need the op description to properly display the profile results; therefore I have passed the op description as a string op_repr which is stored in the Instruction class and passed back to Python for display when From a user perspective the profiling interface should remain unchanged, i.e. cgt.profile.start, cgt.profile.print_stats... etc, should work as before but the results will now include native operations. But note that cgt.profiler.instr2stats will NOT include native calls. TODO: - Make this work for ParallelInterpreter. - Since the Instruction->Instr mapping may be useful outside of profiling I feel it may be better to refactor and store this information somewhere else.
6f64633 to
65707fe
Compare
Author
|
Thanks... it should be fixed now. |
Owner
|
Nice work -- I'll review it in the next day or two. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I implemented this functionality in order to be able to profile a function running on the C++ backend. Some notes on the implementation are in the commit message and usage should be the same as for the Python profiler, i.e. call cgt.profile.stop(), cgt.profile.start(), cgt.profile.print_stats().
Currently I have only implemented this on the sequential interpreter though it should be straightforward to make the parallel interpreter work as well.
To test this I made a few minor changes to the MNIST demo so the backend can be switched from the command line.
Examples:
Python backend (original functionality):
C++ CPU backend:
C++ GPU backend: