Статические и динамические массивы в cudaMalloc () - PullRequest
0 голосов
/ 22 февраля 2011

Существуют ли различия между w.r.t cudaMalloc(...) и cudaMemCpy(...) между следующими двумя подходами:

#1. Use dynamic host arrays:

float *a_host_1 = new float [10]();
float *a_dyn;
...
cudaMalloc((void **) &a_dyn, 10);
...
for (int i=0; i<10; i++) a_host_1[i] = (float)i*2;
cudaMemcpy(a_dyn, a_host_1, 10, cudaMemcpyHostToDevice);

#2. Use static host arrays:

float a_host_2[] = {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
float *a_st;
...
cudaMalloc((void **) &a_st, 10);
...
cudaMemcpy(a_st, a_host_2, 10, cudaMemcpyHostToDevice);

С уважением,
Саян

1 Ответ

2 голосов
/ 22 февраля 2011

@ aaa является точным, единственное отличие состоит в том, что для первого подхода потребуется несколько больше флопов, чтобы пройти через цикл, чем вариант 2 (незначительный). Однако к тому времени, когда код достигает значений cudaMemcpy a_host_1 и a_host_2 идентичны.

Определение a_host_2 как const может иметь значение, но любые временные различия, которые вы видите, не сводятся к динамическим / статическим объявлениям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...