Я хочу написать следующую функцию CUDA:
void foo(int* a, size_t n)
{
if ( /* MAGIC 1 */ ) {
// a is known to be in shared memory,
// so use it directly
}
else {
// make a copy of a in shared memory
// and use the copy
}
}
На стороне хоста у нас есть немного связанное средство в виде cudaPointerGetAttributes, которые могут сказать нам, относится ли указатель к памяти устройства или памяти хоста; возможно, есть какой-то способ отличить указатели в коде устройства, и, возможно, он также может отличать общие указатели от глобальных. В качестве альтернативы и, возможно, даже лучше - может быть, для этого есть механизм времени компиляции, поскольку, в конце концов, функции устройства компилируются только в ядра и не являются автономными, поэтому nvcc
часто может знать, используются ли они с общей памятью или нет.