Бонусный ответ: сочетание клавиш в Visual Studio для того, чтобы прокомментировать что-либо Ctrl-KC. Это работает во многих местах, включая C#, VB, JavaScript и aspx страницы; это также работает на SQL в Studio управления SQL.
можно или выбрать текст, который будет прокомментирован, или можно расположить текст в блоке, который будет прокомментирован; например, поместите свой курсор в открывающем тэге GridView, нажмите Ctrl-KC, и все это комментируется.
Я не думаю, что это поддерживается. cudaMalloc ()
выделяет память устройства, но сохраняет адрес в переменной на хосте. В вашем цикле for вы передаете ему адреса в памяти устройства.
В зависимости от того, что вы пытаетесь выполнить, вы можете выделить данных
с обычным хостом malloc ()
перед вызовом цикла for в том виде, в каком он у вас есть. Или выделите один большой блок памяти устройства и вычислите смещения в нем вручную.
См. Разделы 2.4, 3.2.1 и B.2. 5 (внизу) Руководства по программированию CUDA для более подробного обсуждения этого. В частности, внизу страницы 108:
Адрес, полученный путем взятия адреса
__ устройства __
,__ общего __
или__ constant __
Переменная может использоваться только в коде устройства.
Вы должны выделить указатели в память хоста, затем выделить память устройства для каждого массива и сохранить указатель в памяти хоста. Затем выделите память для хранения указателей в устройстве. а затем скопируйте память хоста в память устройства. Один пример стоит 1000 слов:
__global__ void multi_array_kernel( int N, void** arrays ){
// stuff
}
int main(){
const int N_ARRAYS = 20;
void *h_array = malloc(sizeof(void*) * N_ARRAYS);
for(int i = 0; i < N_ARRAYS; i++){
cudaMalloc(&h_array[i], i * sizeof(void*));
//TODO: check error
}
void *d_array = cudaMalloc(sizeof(void*) * N_ARRAYS);
// Copy to device Memory
cudaMemcpy(d_array, h_array, sizeof(void*) * N_ARRAYS, cudaMemcpyHostToDevice);
multi_array_kernel<1,1>(N_ARRAYS, d_array);
cudaThreadSynchronize();
for(int i = 0; i < N_ARRAYS; i++){
cudaFree(h_array[i]); //host not device memory
//TODO: check error
}
cudaFree(d_array);
free(h_array);
}