Hello!
I have such code:
[codebox]
device constant char g_constDevFiles[ PREDEFINED_BUFFER_SIZE * FILES_NUM ];
device constant uint_t g_constDevFilesOffsets[ FILES_NUM ];
func()
{
[indent]for( uint_t i = 0; i < uiStartsCount; i++ )
{
uiFilesToCheck = ( uiFilesCount >= 30 ? 30 : uiFilesCount );
uiFilesCount -= uiFilesToCheck;
const char* pNextFilesPortion = (pcFilesBuffers + i * FILES_NUM * PREDEFINED_BUFFER_SIZE);
const uint_t* pNextOffsetsPortion = (puiFilesOffsets + i * FILES_NUM * sizeof( uint_t ));
cuError = cudaMemcpyToSymbol( g_constDevFiles, pNextFilesPortion, PREDEFINED_BUFFER_SIZE * uiFilesToCheck, 0, cudaMemcpyHostToDevice );
cuError = cudaMemcpyToSymbol( g_constDevFilesOffsets, pNextOffsetsPortion, sizeof( uint_t ) * uiFilesToCheck, 0, cudaMemcpyHostToDevice );
kernel1<<< X, Y >>>( ... )
}[/indent]
}[/codebox]
The problem is that cudaMemcpyToSymbol copies right data to constant variables ( g_constDevFiles and g_constDevFilesOffsets ) only on first pass of “for”. On second and further passes it copies something strange. What I doing wrong?