Skip to content

Commit

Permalink
Eliminate Thrust-specific names for cuda_errc_t. Make cuda_errc_t a t…
Browse files Browse the repository at this point in the history
…ypedef of cudaError_t.

Doxygenate thrust/system_error.h and headers in thrust/system.
  • Loading branch information
jaredhoberock committed Sep 2, 2010
1 parent b26325d commit 8b223d8
Show file tree
Hide file tree
Showing 6 changed files with 201 additions and 100 deletions.
2 changes: 1 addition & 1 deletion thrust/experimental/arch.inl
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ inline void checked_get_current_device_properties(cudaDeviceProp &props)
}

if(current_device < 0)
throw thrust::experimental::system_error(thrust::experimental::cuda_errc::no_device, thrust::experimental::cuda_category());
throw thrust::experimental::system_error(cudaErrorNoDevice, thrust::experimental::cuda_category());

// cache the result of the introspection call because it is expensive
static std::map<int,cudaDeviceProp> properties_map;
Expand Down
55 changes: 8 additions & 47 deletions thrust/system/cuda_error.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ namespace experimental
namespace system
{

/*! \addtogroup system
* \{
*/

// To construct an error_code after a CUDA Runtime error:
//
Expand All @@ -43,53 +46,8 @@ namespace system
namespace cuda_errc
{

// XXX maybe we should just use the enum cudaError directly here?
enum cuda_errc_t
{
// from cuda/include/driver_types.h
// XXX some of these could use better names
success = ::cudaSuccess,
missing_configuration = ::cudaErrorMissingConfiguration,
memory_allocation = ::cudaErrorMemoryAllocation,
initialization_error = ::cudaErrorInitializationError,
launch_failure = ::cudaErrorLaunchFailure,
prior_launch_failure = ::cudaErrorPriorLaunchFailure,
launch_timeout = ::cudaErrorLaunchTimeout,
launch_out_of_resources = ::cudaErrorLaunchOutOfResources,
invalid_device_function = ::cudaErrorInvalidDeviceFunction,
invalid_configuration = ::cudaErrorInvalidConfiguration,
invalid_device = ::cudaErrorInvalidDevice,
invalid_value = ::cudaErrorInvalidValue,
invalid_pitch_value = ::cudaErrorInvalidPitchValue,
invalid_symbol = ::cudaErrorInvalidSymbol,
map_buffer_object_failed = ::cudaErrorMapBufferObjectFailed,
unmap_buffer_object_failed = ::cudaErrorUnmapBufferObjectFailed,
invalid_host_pointer = ::cudaErrorInvalidHostPointer,
invalid_device_pointer = ::cudaErrorInvalidDevicePointer,
invalid_texture = ::cudaErrorInvalidTexture,
invalid_texture_binding = ::cudaErrorInvalidTextureBinding,
invalid_channel_descriptor = ::cudaErrorInvalidChannelDescriptor,
invalid_memcpy_direction = ::cudaErrorInvalidMemcpyDirection,
address_of_constant_error = ::cudaErrorAddressOfConstant,
texture_fetch_failed = ::cudaErrorTextureFetchFailed,
texture_not_bound = ::cudaErrorTextureNotBound,
synchronization_error = ::cudaErrorSynchronizationError,
invalid_filter_setting = ::cudaErrorInvalidFilterSetting,
invalid_norm_setting = ::cudaErrorInvalidNormSetting,
mixed_device_execution = ::cudaErrorMixedDeviceExecution,
cuda_runtime_unloading = ::cudaErrorCudartUnloading,
unknown = ::cudaErrorUnknown,
not_yet_implemented = ::cudaErrorNotYetImplemented,
memory_value_too_large = ::cudaErrorMemoryValueTooLarge,
invalid_resource_handle = ::cudaErrorInvalidResourceHandle,
not_ready = ::cudaErrorNotReady,
cuda_runtime_is_newer_than_driver = ::cudaErrorInsufficientDriver,
set_on_active_process_error = ::cudaErrorSetOnActiveProcess,
no_device = ::cudaErrorNoDevice,
ecc_uncorrectable = ::cudaErrorECCUncorrectable,
startup_failure = ::cudaErrorStartupFailure,
api_failure_base = ::cudaErrorApiFailureBase,
}; // end cuda_errc_t
// typedef cudaError_t to cuda_errc_t so we don't have to update the list
typedef cudaError_t cuda_errc_t;

} // end namespace cuda_errc

Expand Down Expand Up @@ -122,6 +80,9 @@ inline error_condition make_error_condition(cuda_errc::cuda_errc_t e);
*/
inline const error_category &cuda_category(void);

/*! \} // end system
*/


} // end system

Expand Down
47 changes: 4 additions & 43 deletions thrust/system/detail/cuda_error.inl
Original file line number Diff line number Diff line change
Expand Up @@ -67,51 +67,12 @@ class cuda_error_category
{
using namespace cuda_errc;

switch(ev)
if(ev < cudaErrorApiFailureBase)
{
case cudaSuccess: return make_error_condition(success);
case cudaErrorMissingConfiguration: return make_error_condition(missing_configuration);
case cudaErrorMemoryAllocation: return make_error_condition(memory_allocation);
case cudaErrorInitializationError: return make_error_condition(initialization_error);
case cudaErrorLaunchFailure: return make_error_condition(launch_failure);
case cudaErrorPriorLaunchFailure: return make_error_condition(prior_launch_failure);
case cudaErrorLaunchTimeout: return make_error_condition(launch_timeout);
case cudaErrorLaunchOutOfResources: return make_error_condition(launch_out_of_resources);
case cudaErrorInvalidDeviceFunction: return make_error_condition(invalid_device_function);
case cudaErrorInvalidConfiguration: return make_error_condition(invalid_configuration);
case cudaErrorInvalidDevice: return make_error_condition(invalid_device);
case cudaErrorInvalidValue: return make_error_condition(invalid_value);
case cudaErrorInvalidPitchValue: return make_error_condition(invalid_pitch_value);
case cudaErrorInvalidSymbol: return make_error_condition(invalid_symbol);
case cudaErrorMapBufferObjectFailed: return make_error_condition(map_buffer_object_failed);
case cudaErrorUnmapBufferObjectFailed: return make_error_condition(unmap_buffer_object_failed);
case cudaErrorInvalidHostPointer: return make_error_condition(invalid_host_pointer);
case cudaErrorInvalidDevicePointer: return make_error_condition(invalid_device_pointer);
case cudaErrorInvalidTexture: return make_error_condition(invalid_texture);
case cudaErrorInvalidTextureBinding: return make_error_condition(invalid_texture_binding);
case cudaErrorInvalidChannelDescriptor:return make_error_condition(invalid_channel_descriptor);
case cudaErrorInvalidMemcpyDirection: return make_error_condition(invalid_memcpy_direction);
case cudaErrorAddressOfConstant: return make_error_condition(address_of_constant_error);
case cudaErrorTextureFetchFailed: return make_error_condition(texture_fetch_failed);
case cudaErrorTextureNotBound: return make_error_condition(texture_not_bound);
case cudaErrorSynchronizationError: return make_error_condition(synchronization_error);
case cudaErrorInvalidFilterSetting: return make_error_condition(invalid_filter_setting);
case cudaErrorInvalidNormSetting: return make_error_condition(invalid_norm_setting);
case cudaErrorMixedDeviceExecution: return make_error_condition(mixed_device_execution);
case cudaErrorCudartUnloading: return make_error_condition(cuda_runtime_unloading);
case cudaErrorUnknown: return make_error_condition(unknown);
case cudaErrorNotYetImplemented: return make_error_condition(not_yet_implemented);
case cudaErrorMemoryValueTooLarge: return make_error_condition(memory_value_too_large);
case cudaErrorInvalidResourceHandle: return make_error_condition(invalid_resource_handle);
case cudaErrorNotReady: return make_error_condition(not_ready);
case cudaErrorInsufficientDriver: return make_error_condition(cuda_runtime_is_newer_than_driver);
case cudaErrorSetOnActiveProcess: return make_error_condition(set_on_active_process_error);
case cudaErrorNoDevice: return make_error_condition(no_device);
case cudaErrorECCUncorrectable: return make_error_condition(ecc_uncorrectable);
case cudaErrorStartupFailure: return make_error_condition(startup_failure);
case cudaErrorApiFailureBase: return make_error_condition(api_failure_base);
default: return system_category().default_error_condition(ev);
return make_error_condition(static_cast<cuda_errc_t>(ev));
}

return system_category().default_error_condition(ev);
}
}; // end cuda_error_category

Expand Down
80 changes: 71 additions & 9 deletions thrust/system/error_code.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,23 @@ namespace system
{


/*! \addtogroup system
* \{
*/

class error_condition;
class error_code;


/*! A metafunction returning whether or not the parameter is an \p error_code enum.
*/
template<typename T> struct is_error_code_enum : public thrust::detail::false_type {};

/*! A metafunction returning whether or not the parameter is an \p error_condition enum.
*/
template<typename T> struct is_error_condition_enum : public thrust::detail::false_type {};


// XXX N3000 prefers enum class errc { ... }
// XXX N3092 prefers enum class errc { ... }
namespace errc
{

Expand Down Expand Up @@ -153,9 +160,16 @@ template<> struct is_error_condition_enum<errc::errc_t> : public thrust::detail:

// [19.5.1.1] class error_category

/*! \brief The class \p error_category serves as a base class for types used to identify the
* source and encoding of a particular category of error code. Classes may be derived
* from \p error_category to support categories of errors in addition to those defined
* in the C++ International Standard.
*/
class error_category
{
public:
/*! Destructor does nothing.
*/
inline virtual ~error_category(void);

// XXX enable upon c++0x
Expand Down Expand Up @@ -225,23 +239,27 @@ inline const error_category &system_category(void);
// [19.5.2] Class error_code


/*! \brief The class \p error_code describes an object used to hold error code values, such as
* those originating from the operating system or other low-level application program
* interfaces.
*/
class error_code
{
public:
// [19.5.2.2] constructors:

/*! Effects: Constructs an object of type \p error_code.
* Postconditions: <tt>value() == 0</tt> and <tt>category() == &system_category()</tt>.
* \post <tt>value() == 0</tt> and <tt>category() == &system_category()</tt>.
*/
inline error_code(void);

/*! Effects: Constructs an object of type \p error_code.
* Postconditions: <tt>value() == val</tt> and <tt>category() == &cat</tt>.
* \post <tt>value() == val</tt> and <tt>category() == &cat</tt>.
*/
inline error_code(int val, const error_category &cat);

/*! Effects: Constructs an object of type \p error_code.
* Postconditions: <tt>*this == make_error_code(e)<tt>.
* \post <tt>*this == make_error_code(e)</tt>.
*/
template <typename ErrorCodeEnum>
error_code(ErrorCodeEnum e
Expand All @@ -253,11 +271,11 @@ class error_code

// [19.5.2.3] modifiers:

/*! Postconditions: <tt>value() == val</tt> and <tt>category() == &cat</tt>.
/*! \post <tt>value() == val</tt> and <tt>category() == &cat</tt>.
*/
inline void assign(int val, const error_category &cat);

/*! Postconditions: <tt>*this == make_error_code(e)</tt>.
/*! \post <tt>*this == make_error_code(e)</tt>.
*/
template <typename ErrorCodeEnum>
// XXX WAR msvc's problem with enable_if
Expand All @@ -268,7 +286,7 @@ class error_code
#endif // THRUST_HOST_COMPILER_MSVC
operator=(ErrorCodeEnum e);

/*! Postconditions: <tt>value() == 0</tt> and <tt>category() == system_category()</tt>.
/*! \post <tt>value() == 0</tt> and <tt>category() == system_category()</tt>.
*/
inline void clear(void);

Expand Down Expand Up @@ -331,7 +349,7 @@ template <typename charT, typename traits>
// [19.5.3] class error_condition


/*! The class \p error_condition describes an object used to hold values identifying
/*! \brief The class \p error_condition describes an object used to hold values identifying
* error conditions.
*
* \note \p error_condition values are portable abstractions, while \p error_code values
Expand All @@ -341,10 +359,24 @@ class error_condition
{
public:
// [19.5.3.2] constructors

/*! Constructs an object of type \p error_condition.
* \post <tt>value() == 0</tt>.
* \post <tt>category() == generic_category()</tt>.
*/
inline error_condition(void);

/*! Constructs an object of type \p error_condition.
* \post <tt>value() == val</tt>.
* \post <tt>category() == cat</tt>.
*/
inline error_condition(int val, const error_category &cat);

/*! Constructs an object of type \p error_condition.
* \post <tt>*this == make_error_condition(e)</tt>.
* \note This constructor shall not participate in overload resolution unless
* <tt>is_error_condition_enum<ErrorConditionEnum>::value</tt> is <tt>true</tt>.
*/
template<typename ErrorConditionEnum>
error_condition(ErrorConditionEnum e
// XXX WAR msvc's problem with enable_if
Expand All @@ -354,8 +386,21 @@ class error_condition
);

// [19.5.3.3] modifiers

/*! Assigns to this \p error_code object from an error value and an \p error_category.
* \param val The new value to return from <tt>value()</tt>.
* \param cat The new \p error_category to return from <tt>category()</tt>.
* \post <tt>value() == val</tt>.
* \post <tt>category() == cat</tt>.
*/
inline void assign(int val, const error_category &cat);

/*! Assigns to this \p error_code object from an error condition enumeration.
* \return *this
* \post <tt>*this == make_error_condition(e)</tt>.
* \note This operator shall not participate in overload resolution unless
* <tt>is_error_condition_enum<ErrorConditionEnum>::value</tt> is <tt>true</tt>.
*/
template<typename ErrorConditionEnum>
// XXX WAR msvc's problem with enable_if
#if THRUST_HOST_COMPILER != THRUST_HOST_COMPILER_MSVC
Expand All @@ -365,18 +410,31 @@ class error_condition
#endif // THRUST_HOST_COMPILER != THRUST_HOST_COMPILER_MSVC
operator=(ErrorConditionEnum e);

/*! Clears this \p error_code object.
* \post <tt>value == 0</tt>
* \post <tt>category() == generic_category()</tt>.
*/
inline void clear(void);

// [19.5.3.4] observers

/*! \return The value encoded by this \p error_condition.
*/
inline int value(void) const;

/*! \return A <tt>const</tt> reference to the \p error_category encoded by this \p error_condition.
*/
inline const error_category &category(void) const;

/*! \return <tt>category().message(value())</tt>.
*/
inline std::string message(void) const;

// XXX replace below with this upon c++0x
//explicit operator bool (void) const;

/*! \return <tt>value() != 0</tt>.
*/
inline operator bool (void) const;

/*! \cond
Expand Down Expand Up @@ -447,9 +505,13 @@ inline bool operator!=(const error_condition &lhs, const error_code &rhs);
*/
inline bool operator!=(const error_condition &lhs, const error_condition &rhs);

/*! \} // end system
*/


} // end system


// import names into thrust::
using system::error_category;
using system::error_code;
Expand Down
Loading

0 comments on commit 8b223d8

Please sign in to comment.