Я попробовал простой тестовый пример, и он скомпилирован нормально, к сожалению. Как определяются u_char и u_int_64?
Я бы определенно согласился, что вы должны сообщить об этом в NVIDIA, но им понадобится больше кода, чтобы воспроизвести проблему. Это также может помочь посмотреть на генерируемый код PTX.
Я использовал следующий код:
#include <iostream>
#include <algorithm>
#include <cuda.h>
__device__ void put_u64(void *vp, unsigned long long v)
{
unsigned char *p = (unsigned char *) vp;
p[0] = (unsigned char) (v >> 56) & 0xff;
p[1] = (unsigned char) (v >> 48) & 0xff;
p[2] = (unsigned char) (v >> 40) & 0xff;
p[3] = (unsigned char) (v >> 32) & 0xff;
p[4] = (unsigned char) (v >> 24) & 0xff;
p[5] = (unsigned char) (v >> 16) & 0xff;
p[6] = (unsigned char) (v >> 8) & 0xff;
p[7] = (unsigned char) v & 0xff;
}
__global__ void test(unsigned char *output, unsigned long long input)
{
put_u64(output, input);
}
int main(void)
{
unsigned char result[8];
unsigned char *d_result;
unsigned long long input = 0x1212343456567878ULL;
cudaMalloc((void **)&d_result, 8 * sizeof(unsigned char));
test<<<1,1>>>(d_result, input);
cudaMemcpy(&result, d_result, 8 * sizeof(unsigned char), cudaMemcpyDeviceToHost);
std::cout << std::hex;
std::copy(result, result + 8, std::ostream_iterator<int>(std::cout));
std::cout << std::endl;
}