To collect performance data about your application, the Visual
Profiler must be able to execute your application repeatedly in a
deterministic manner. Due to software and hardware limitations, it
is not possible to collect all the necessary profile data in a
single execution of your application. Each time your application
is run, it must operate on the same data and perform the same
kernel and memory copy invocations in the same order. Specifically,
- For a device, the order of context creation must be the
same each time the application executes. For a multi-threaded
application where each thread creates its own context(s), care
must be taken to ensure that the order of those context
creations is consistent across multiple runs. For example, it
may be necessary to create the contexts on a single thread and
then pass the contexts to the other threads.
- For a context, the order of stream creation must be the
same each time the application executes.
- Within a stream, the order of kernel and memcpy
invocations must be the same each time the application
executes.
If your application behaves differently on different executions,
then the analyses performed by the Visual Profiler will likely be
inaccurate, and the data shown in the
Details
View and
Detail Graphs View
will be difficult to compare and interpret. The Visual Profiler
can detect some instances where your application behaves
differently on different executions, and it will warn you in these
instances.