/** 
* @file:   README
* CVS:     $Id$
* @author: Asim YarKhan yarkhan@icl.utk.edu
* @author: Heike McCraw mccraw@icl.utk.edu
* @defgroup papi_components Components
* @brief Component Specific Readme file: CUDA
*/

/** @page component_readme Component Readme 

@section Component Specific Information

cuda/ 

CUDA component update: Support for CUPTI metrics (early release)


Known problems and limitations in early release of metric support
-----------------------------------------------------------------

* Only sets of metrics and events that can be gathered in a single
  pass are supported.  Transparent multi-pass support is expected
* All metrics are returned as long long integers, which means that
  CUPTI double precision values will be truncated, possibly severely.
* The NVLink metrics have been disabled for this alpha release.


General information
-------------------

The PAPI CUDA component is a hardware performance counter
measurement technology for the NVIDIA CUDA platform which provides
access to the hardware counters inside the GPU. PAPI CUDA is based on
CUPTI support in the NVIDIA driver library. In any environment where
the CUPTI-enabled driver is installed, the PAPI CUDA component should
be able to provide detailed performance counter information regarding
events on the GPU kernels.  

NOTE: When adding CUDA related events or metrics to the CUDA
component, each event can be added within a users specified CUDA
context.  If the event is outside its context or in no context, a
default CUDA context will be created for the event.

NOTE: In order to disable and destroy the CUDA eventGroup properly,
the user has to call PAPI_cleanup_eventset( EventSet ) before calling
PAPI_shutdown() in the application. This is important since it also
frees the performance monitoring hardware on the GPU.


How to install PAPI with the CUDA component?
-------------------------------------------- 

This PAPI CUDA component has been developed and tested using CUDA
version 8.0 and the associated CUPTI library. CUPTI is released with
the CUDA Tools SDK.

This component uses the CUDA location from the environment (or looks
for /opt/cuda by default).  Please set CUDA_DIR and CUPTI_DIR during
builds so that the component can find the required header files.

Configure PAPI with CUDA enabled.  
    % cd src
    % ./configure --prefix=some_location --with-components="cuda"

Build with CUDA_DIR and CUPTI_DIR specified
    % export CUDA_DIR=/opt/cuda
    % export CUPTI_DIR=/opt/cuda/extras/CUPTI
    % make 

Testing the component requires that libraries for PAPI, CUDA, CUPTI
can be found or are statically linked in to the executable.  You may
need to add the library directories as shown here.  

 % export LD_LIBRARY_PATH=${CUDA_DIR}/lib64:${CUPTI_DIR}/lib64:${LD_LIBRARY_PATH}

Before starting working with the cuda component, verify it's active by
running:
   % ./papi_component_avail"
and check if it listed under the "Active Components" list.

Test by running from the src directory
   % ./components/cuda/tests/simpleMultiGPU

For general information on how to create and run components, the user
is referred to the INSTALL.txt section "CREATING AND RUNNING
COMPONENTS".

To find a list of CUDA supported events.
    % utils/papi_native_avail | grep -i CUDA

*/
