Import Geant4 11.4.0 source tree
This commit is contained in:
@@ -30,12 +30,14 @@ class DataBuffer {
|
||||
std::size_t m_doubleIndex;
|
||||
std::size_t m_charIndex;
|
||||
std::size_t m_longIndex;
|
||||
std::size_t m_size_tIndex;
|
||||
|
||||
int *m_intData;
|
||||
float *m_floatData;
|
||||
double *m_doubleData;
|
||||
char *m_charData;
|
||||
std::uint64_t *m_longData;
|
||||
std::size_t *m_size_tData;
|
||||
|
||||
// For unpacking into pre-allocated memory
|
||||
char *m_placementStart;
|
||||
@@ -56,11 +58,15 @@ class DataBuffer {
|
||||
m_doubleIndex( 0 ),
|
||||
m_charIndex( 0 ),
|
||||
m_longIndex( 0 ),
|
||||
m_size_tIndex( 0 ),
|
||||
|
||||
m_intData( nullptr ),
|
||||
m_floatData( nullptr ),
|
||||
m_doubleData( nullptr ),
|
||||
m_charData( nullptr ),
|
||||
m_longData( nullptr ),
|
||||
m_size_tData( nullptr ),
|
||||
|
||||
m_placementStart( nullptr ),
|
||||
m_placement( nullptr ),
|
||||
m_maxPlacementSize( 0 ),
|
||||
@@ -75,11 +81,15 @@ class DataBuffer {
|
||||
m_doubleIndex( 0 ),
|
||||
m_charIndex( 0 ),
|
||||
m_longIndex( 0 ),
|
||||
m_size_tIndex( 0 ),
|
||||
|
||||
m_intData( nullptr ),
|
||||
m_floatData( nullptr ),
|
||||
m_doubleData( nullptr ),
|
||||
m_charData( nullptr ),
|
||||
m_longData( nullptr ),
|
||||
m_size_tData( nullptr ),
|
||||
|
||||
m_placementStart( nullptr ),
|
||||
m_placement( nullptr ),
|
||||
m_maxPlacementSize( 0 ),
|
||||
@@ -98,11 +108,12 @@ class DataBuffer {
|
||||
delete [] m_doubleData;
|
||||
delete [] m_charData;
|
||||
delete [] m_longData;
|
||||
delete [] m_size_tData;
|
||||
}
|
||||
|
||||
LUPI_HOST_DEVICE void zeroIndexes( void ) {
|
||||
|
||||
m_intIndex = m_floatIndex = m_doubleIndex = m_charIndex = m_longIndex = 0;
|
||||
m_intIndex = m_floatIndex = m_doubleIndex = m_charIndex = m_longIndex = m_size_tIndex = 0;
|
||||
}
|
||||
|
||||
LUPI_HOST_DEVICE void copyIndexes( DataBuffer const &a_input ) {
|
||||
@@ -112,6 +123,7 @@ class DataBuffer {
|
||||
m_doubleIndex = a_input.m_doubleIndex;
|
||||
m_charIndex = a_input.m_charIndex;
|
||||
m_longIndex = a_input.m_longIndex;
|
||||
m_size_tIndex = a_input.m_size_tIndex;
|
||||
}
|
||||
|
||||
LUPI_HOST_DEVICE void simpleCopy( DataBuffer const &a_input ) {
|
||||
@@ -121,12 +133,14 @@ class DataBuffer {
|
||||
m_doubleIndex = a_input.m_doubleIndex;
|
||||
m_charIndex = a_input.m_charIndex;
|
||||
m_longIndex = a_input.m_longIndex;
|
||||
m_size_tIndex = a_input.m_size_tIndex;
|
||||
|
||||
m_intData = a_input.m_intData;
|
||||
m_floatData = a_input.m_floatData;
|
||||
m_doubleData = a_input.m_doubleData;
|
||||
m_charData = a_input.m_charData;
|
||||
m_longData = a_input.m_longData;
|
||||
m_size_tData = a_input.m_size_tData;
|
||||
|
||||
m_placementStart = a_input.m_placementStart;
|
||||
m_placement = a_input.m_placement;
|
||||
@@ -144,6 +158,7 @@ class DataBuffer {
|
||||
m_doubleData = nullptr;
|
||||
m_charData = nullptr;
|
||||
m_longData = nullptr;
|
||||
m_size_tData = nullptr;
|
||||
}
|
||||
|
||||
LUPI_HOST_DEVICE void allocateBuffers( void ) {
|
||||
@@ -153,6 +168,7 @@ class DataBuffer {
|
||||
m_doubleData = new double[m_doubleIndex];
|
||||
m_charData = new char[m_charIndex];
|
||||
m_longData = new std::uint64_t[m_longIndex];
|
||||
m_size_tData = new std::size_t[m_size_tIndex];
|
||||
}
|
||||
|
||||
LUPI_HOST_DEVICE void freeMemory( void ) {
|
||||
@@ -162,6 +178,8 @@ class DataBuffer {
|
||||
delete [] m_doubleData;
|
||||
delete [] m_charData;
|
||||
delete [] m_longData;
|
||||
delete [] m_size_tData;
|
||||
|
||||
zeroIndexes( );
|
||||
nullOutPointers( );
|
||||
}
|
||||
@@ -170,7 +188,8 @@ class DataBuffer {
|
||||
|
||||
return( ( a_input.m_intIndex == m_intIndex ) && ( a_input.m_floatIndex == m_floatIndex ) &&
|
||||
( a_input.m_doubleIndex == m_doubleIndex ) &&
|
||||
( a_input.m_charIndex == m_charIndex ) && ( a_input.m_longIndex == m_longIndex ) );
|
||||
( a_input.m_charIndex == m_charIndex ) && ( a_input.m_longIndex == m_longIndex ) &&
|
||||
( a_input.m_size_tIndex == m_size_tIndex ) );
|
||||
}
|
||||
|
||||
LUPI_HOST_DEVICE void incrementPlacement(std::size_t a_delta) {
|
||||
@@ -225,6 +244,8 @@ class DataBuffer {
|
||||
gpuErrorCheck( LUPI_GPU_MEMCPY( buf_tmp.m_charData, m_charData, sizeof(char) * m_charIndex, LUPI_GPU_HTOD ) );
|
||||
gpuErrorCheck( LUPI_GPU_MALLOC( (void **) &buf_tmp.m_longData, sizeof(std::uint64_t) * m_longIndex ) );
|
||||
gpuErrorCheck( LUPI_GPU_MEMCPY( buf_tmp.m_longData, m_longData, sizeof(std::uint64_t) * m_longIndex, LUPI_GPU_HTOD ) );
|
||||
gpuErrorCheck( LUPI_GPU_MALLOC( (void **) &buf_tmp.m_size_tData, sizeof(std::size_t) * m_size_tIndex ) );
|
||||
gpuErrorCheck( LUPI_GPU_MEMCPY( buf_tmp.m_size_tData, m_size_tData, sizeof(std::size_t) * m_size_tIndex, LUPI_GPU_HTOD ) );
|
||||
|
||||
gpuErrorCheck( LUPI_GPU_MALLOC( (void **) &buf_tmp.m_placementStart, buf_tmp.m_maxPlacementSize ) );
|
||||
// Set to 0 for easier byte comparisons. This may be removed after testing is done
|
||||
@@ -269,14 +290,15 @@ class DataBuffer {
|
||||
#define DATA_MEMBER_INT( member, buf, mode) DATA_MEMBER_SIMPLE(member, (buf).m_intData, (buf).m_intIndex, mode)
|
||||
#define DATA_MEMBER_FLOAT(member, buf, mode) DATA_MEMBER_SIMPLE(member, (buf).m_floatData, (buf).m_floatIndex, mode)
|
||||
#define DATA_MEMBER_DOUBLE(member, buf, mode) DATA_MEMBER_SIMPLE(member, (buf).m_doubleData, (buf).m_doubleIndex, mode)
|
||||
#define DATA_MEMBER_SIZE_T(member, buf, mode) DATA_MEMBER_SIMPLE(member, (buf).m_size_tData, (buf).m_size_tIndex, mode)
|
||||
|
||||
#define DATA_MEMBER_STRING(member, buf, mode) \
|
||||
{if ( mode == LUPI::DataBuffer::Mode::Count ) {((buf).m_charIndex) += member.size(); ((buf).m_intIndex)++; } \
|
||||
{if ( mode == LUPI::DataBuffer::Mode::Count ) {((buf).m_charIndex) += member.size(); ((buf).m_size_tIndex)++; } \
|
||||
else if ( mode == LUPI::DataBuffer::Mode::Pack ) {std::size_t array_size = member.size(); \
|
||||
(buf).m_intData[((buf).m_intIndex)++] = array_size; \
|
||||
(buf).m_size_tData[((buf).m_size_tIndex)++] = array_size; \
|
||||
for (std::size_t size_index = 0; size_index < array_size; size_index++)\
|
||||
{(buf).m_charData[ ((buf).m_charIndex)++ ] = (member[size_index]); }} \
|
||||
else if ( mode == LUPI::DataBuffer::Mode::Unpack ) {std::size_t array_size = (buf).m_intData[((buf).m_intIndex)++]; \
|
||||
else if ( mode == LUPI::DataBuffer::Mode::Unpack ) {std::size_t array_size = (buf).m_size_tData[((buf).m_size_tIndex)++]; \
|
||||
member.resize(array_size, &(buf).m_placement); \
|
||||
for (std::size_t size_index = 0; size_index < array_size; size_index++) \
|
||||
{member[size_index] = (buf).m_charData[ ((buf).m_charIndex)++ ]; }} \
|
||||
@@ -287,12 +309,12 @@ class DataBuffer {
|
||||
|
||||
#define DATA_MEMBER_STD_STRING(member, buf, mode) { \
|
||||
if ( mode == LUPI::DataBuffer::Mode::Count ) \
|
||||
{((buf).m_charIndex) += member.size(); ((buf).m_intIndex)++; } \
|
||||
{((buf).m_charIndex) += member.size(); ((buf).m_size_tIndex)++; } \
|
||||
else if ( mode == LUPI::DataBuffer::Mode::Pack ) {std::size_t array_size = member.size(); \
|
||||
(buf).m_intData[((buf).m_intIndex)++] = array_size; \
|
||||
(buf).m_size_tData[((buf).m_size_tIndex)++] = array_size; \
|
||||
for (std::size_t size_index = 0; size_index < array_size; size_index++)\
|
||||
{(buf).m_charData[((buf).m_charIndex)++] = (member[size_index]); }} \
|
||||
else if ( mode == LUPI::DataBuffer::Mode::Unpack ) {std::size_t array_size = (buf).m_intData[((buf).m_intIndex)++]; \
|
||||
else if ( mode == LUPI::DataBuffer::Mode::Unpack ) {std::size_t array_size = (std::size_t) (buf).m_size_tData[((buf).m_size_tIndex)++]; \
|
||||
member.resize(array_size); \
|
||||
for (std::size_t size_index = 0; size_index < array_size; size_index++) \
|
||||
{member[size_index] = (buf).m_charData[ ((buf).m_charIndex)++ ]; }} }
|
||||
@@ -301,7 +323,7 @@ class DataBuffer {
|
||||
#define DATA_MEMBER_VECTOR_FLOAT(member, buf, mode) \
|
||||
{ \
|
||||
std::size_t vector_size = member.size(); \
|
||||
DATA_MEMBER_INT(vector_size, (buf), mode); \
|
||||
DATA_MEMBER_SIZE_T(vector_size, (buf), mode); \
|
||||
if ( mode == LUPI::DataBuffer::Mode::Unpack ) member.resize(vector_size, &(buf).m_placement); \
|
||||
std::size_t bufferIndex = (buf).m_floatIndex; \
|
||||
for ( std::size_t member_index = 0; member_index < vector_size; member_index += LUPI_WARP_SIZE, bufferIndex += LUPI_WARP_SIZE ) \
|
||||
@@ -315,7 +337,7 @@ class DataBuffer {
|
||||
#define DATA_MEMBER_VECTOR_DOUBLE(member, buf, mode) \
|
||||
{ \
|
||||
std::size_t vector_size = member.size(); \
|
||||
DATA_MEMBER_INT(vector_size, (buf), mode); \
|
||||
DATA_MEMBER_SIZE_T(vector_size, (buf), mode); \
|
||||
if ( mode == LUPI::DataBuffer::Mode::Unpack ) member.resize(vector_size, &(buf).m_placement); \
|
||||
std::size_t bufferIndex = (buf).m_doubleIndex; \
|
||||
for ( std::size_t member_index = 0; member_index < vector_size; member_index += LUPI_WARP_SIZE, bufferIndex += LUPI_WARP_SIZE ) \
|
||||
@@ -330,7 +352,7 @@ class DataBuffer {
|
||||
#define DATA_MEMBER_VECTOR_FLOAT(member, buf, mode) \
|
||||
{ \
|
||||
std::size_t vector_size = member.size(); \
|
||||
DATA_MEMBER_INT(vector_size, (buf), mode); \
|
||||
DATA_MEMBER_SIZE_T(vector_size, (buf), mode); \
|
||||
if ( mode == LUPI::DataBuffer::Mode::Unpack ) { \
|
||||
if ((buf).m_sharedPlacement == nullptr) { \
|
||||
member.resize(vector_size, &(buf).m_placement); \
|
||||
@@ -349,7 +371,7 @@ class DataBuffer {
|
||||
#define DATA_MEMBER_VECTOR_DOUBLE(member, buf, mode) \
|
||||
{ \
|
||||
std::size_t vector_size = member.size(); \
|
||||
DATA_MEMBER_INT(vector_size, (buf), mode); \
|
||||
DATA_MEMBER_SIZE_T(vector_size, (buf), mode); \
|
||||
if ( mode == LUPI::DataBuffer::Mode::Unpack ) { \
|
||||
if ((buf).m_sharedPlacement == nullptr) { \
|
||||
member.resize(vector_size, &(buf).m_placement); \
|
||||
@@ -371,7 +393,7 @@ class DataBuffer {
|
||||
#define DATA_MEMBER_VECTOR_INT(member, buf, mode) \
|
||||
{ \
|
||||
std::size_t vector_size = member.size(); \
|
||||
DATA_MEMBER_INT(vector_size, (buf), mode); \
|
||||
DATA_MEMBER_SIZE_T(vector_size, (buf), mode); \
|
||||
if ( mode == LUPI::DataBuffer::Mode::Unpack ) member.resize(vector_size, &(buf).m_placement); \
|
||||
std::size_t bufferIndex = (buf).m_intIndex; \
|
||||
for ( std::size_t member_index = 0; member_index < vector_size; member_index += LUPI_WARP_SIZE, bufferIndex += LUPI_WARP_SIZE ) \
|
||||
@@ -386,7 +408,7 @@ class DataBuffer {
|
||||
#define DATA_MEMBER_VECTOR_INT(member, buf, mode) \
|
||||
{ \
|
||||
std::size_t vector_size = member.size(); \
|
||||
DATA_MEMBER_INT(vector_size, (buf), mode); \
|
||||
DATA_MEMBER_SIZE_T(vector_size, (buf), mode); \
|
||||
if ( mode == LUPI::DataBuffer::Mode::Unpack ) { \
|
||||
if ((buf).m_sharedPlacement == nullptr) { \
|
||||
member.resize(vector_size, &(buf).m_placement); \
|
||||
@@ -408,7 +430,7 @@ class DataBuffer {
|
||||
#define DATA_MEMBER_VECTOR_BOOL(member, buf, mode) \
|
||||
{ \
|
||||
std::size_t vector_size = member.size(); \
|
||||
DATA_MEMBER_INT(vector_size, (buf), mode); \
|
||||
DATA_MEMBER_SIZE_T(vector_size, (buf), mode); \
|
||||
if ( mode == LUPI::DataBuffer::Mode::Unpack ) member.resize(vector_size, &(buf).m_placement); \
|
||||
std::size_t bufferIndex = (buf).m_intIndex; \
|
||||
for ( std::size_t member_index = 0; member_index < vector_size; member_index += LUPI_WARP_SIZE, bufferIndex += LUPI_WARP_SIZE ) \
|
||||
@@ -423,7 +445,7 @@ class DataBuffer {
|
||||
#define DATA_MEMBER_VECTOR_BOOL(member, buf, mode) \
|
||||
{ \
|
||||
std::size_t vector_size = member.size(); \
|
||||
DATA_MEMBER_INT(vector_size, (buf), mode); \
|
||||
DATA_MEMBER_SIZE_T(vector_size, (buf), mode); \
|
||||
if ( mode == LUPI::DataBuffer::Mode::Unpack ) { \
|
||||
if ((buf).m_sharedPlacement == nullptr) { \
|
||||
member.resize(vector_size, &(buf).m_placement); \
|
||||
@@ -459,4 +481,41 @@ class DataBuffer {
|
||||
}
|
||||
#endif
|
||||
|
||||
#if LUPI_WARP_SIZE > 1 && defined(LUPI_ON_GPU)
|
||||
#define DATA_MEMBER_VECTOR_SIZE_T(member, buf, mode) \
|
||||
{ \
|
||||
std::size_t vector_size = member.size(); \
|
||||
DATA_MEMBER_SIZE_T(vector_size, (buf), mode); \
|
||||
if ( mode == LUPI::DataBuffer::Mode::Unpack ) member.resize(vector_size, &(buf).m_placement); \
|
||||
std::size_t bufferIndex = (buf).m_size_tIndex; \
|
||||
for ( std::size_t member_index = 0; member_index < vector_size; member_index += LUPI_WARP_SIZE, bufferIndex += LUPI_WARP_SIZE ) \
|
||||
{ \
|
||||
std::size_t thrMemberId = member_index + LUPI_THREADID; \
|
||||
if (thrMemberId >= vector_size) continue; \
|
||||
member[thrMemberId] = (buf).m_size_tData[bufferIndex + LUPI_THREADID]; \
|
||||
} \
|
||||
(buf).m_size_tIndex += vector_size; \
|
||||
}
|
||||
#else
|
||||
#define DATA_MEMBER_VECTOR_SIZE_T(member, buf, mode) \
|
||||
{ \
|
||||
std::size_t vector_size = member.size(); \
|
||||
DATA_MEMBER_SIZE_T(vector_size, (buf), mode); \
|
||||
if ( mode == LUPI::DataBuffer::Mode::Unpack ) { \
|
||||
if ((buf).m_sharedPlacement == nullptr) { \
|
||||
member.resize(vector_size, &(buf).m_placement); \
|
||||
} else { \
|
||||
member.resize(vector_size, &(buf).m_sharedPlacement); \
|
||||
} \
|
||||
}\
|
||||
if ( mode == LUPI::DataBuffer::Mode::Memory ) { \
|
||||
(buf).incrementSharedPlacement(sizeof(std::size_t) * member.capacity()); \
|
||||
} \
|
||||
for ( std::size_t member_index = 0; member_index < vector_size; member_index++ ) \
|
||||
{ \
|
||||
DATA_MEMBER_SIZE_T(member[member_index], (buf), mode); \
|
||||
} \
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // End of LUPI_data_buffer_hpp_included
|
||||
|
||||
Reference in New Issue
Block a user