1 / 1 / 0
Регистрация: 23.10.2014
Сообщений: 18
1

Подскажите, что делает функция cudaMalloc

23.10.2014, 07:58. Показов 4056. Ответов 4
Метки нет (Все метки)

Начал читать книгу по CUDA.В ней встретился вот такой код.В этом коде не очень понятна строка функции
cudaMalloc. Перед ней определяется как я понимаю указатель dev_c.В функции получается фактически как я понимаю операция получения адреса(смотри указателя на указатель dev_c).После чего к этому всему еще void**.Вообщем не понятно о чем тут толком идет речь.Подскажите пожалуйста что дает эта функция по сути и почему у нее такие замысловатые параметры.
Не бейте больно я новичок как в С так и в CUDA)
Вот сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
__global__ void add( int a, int b, int *c ) {
    *c = a + b;
}
 
int main( void ) {
    int c;
    int *dev_c;
     cudaMalloc( (void**)&dev_c, sizeof(int) ) ;
 
    add<<<1,1>>>( 2, 7, dev_c );
 
cudaMemcpy( &c, dev_c, sizeof(int),cudaMemcpyDeviceToHost ) ;
    printf( "2 + 7 = %d\n", c );
     cudaFree( dev_c ) ;
 
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2014, 07:58
Ответы с готовыми решениями:

Пожалуйста подскажите что делает данная функция?
Пожалуйста подскажите что делает данная функция? fflush(stdin);

CudaMalloc, перегруженная функция
Доброго времени суток. Не нашёл более подходящего раздела, поэтому, прошу прощения, если запостил...

Что делает функция
имеется вот такая функция. Обясние пожалуйста что она делает? что ето за команды которые она...

что делает функция?
int slength ( char*str){ int Len = -1; while (++len, *str++); return len; } возвращает длину...

4
191 / 90 / 33
Регистрация: 04.11.2013
Сообщений: 472
Записей в блоге: 4
23.10.2014, 08:34 2
Драйвер видеокарт от nvidia nvlddmkm.sys является мостом между графическим процессором и приложением высокого уровня. CUDA аппаратно реализовано в графическом процессоре на видеокарте. Драйвер предоставляет интерфейс через который можно передавать данные из пользовательского режима на аппаратный уровень. Поэтому разработчику приложений на CUDA так же как и разработчикам на DirectX предоставляется указатель на интерфейс, причем он двойной, так как иначе пользовательские изменения не будут сохраняться после выхода из функции, так как область видимости данных является функция.

Добавлено через 17 минут
cudaMalloc выделяет память на аппаратном уровне, т.е. на видеокарте. На видеокарте GTX 780 3072 памяти типа GDDR5, из нее cudaMalloc динамически выделяет необходимый для вычислений объем памяти.
0
1 / 1 / 0
Регистрация: 23.10.2014
Сообщений: 18
23.10.2014, 10:21  [ТС] 3
Цитата Сообщение от Alexandr_1982 Посмотреть сообщение
Драйвер предоставляет интерфейс через который можно передавать данные из пользовательского режима на аппаратный уровень. Поэтому разработчику приложений на CUDA так же как и разработчикам на DirectX предоставляется указатель на интерфейс, причем он двойной, так как иначе пользовательские изменения не будут сохраняться после выхода из функции, так как область видимости данных является функция.
Ну от части стало понятнее.То есть по сути мы берем некий указатель dev_c,потом на этот указателя делаем еще указатель с помощью&.А потом с помощью void**получается записываем в него данные как то или что?Все таки вот я не понимаю вот эту конструкцию если честно: (void**)&dev_c.
Да и возможно глупый вопрос, но все же а выделяемая память своего рода оперативная но только некая оперативная память на GPU?И где ее размер можно посмотреть если что?
0
191 / 90 / 33
Регистрация: 04.11.2013
Сообщений: 472
Записей в блоге: 4
23.10.2014, 13:08 4
void так как когда программируете неизвестен тип, void позволяет преобразовывать к любому типу.
0
1 / 1 / 0
Регистрация: 23.10.2014
Сообщений: 18
23.10.2014, 15:52  [ТС] 5
Цитата Сообщение от Alexandr_1982 Посмотреть сообщение
void так как когда программируете неизвестен тип, void позволяет преобразовывать к любому типу.
Ну это то как раз понятно.Ну там воид с двумя звездочками.У меня вот это вызывает не понимание.Так как я понимаю там есть эти звездочки разыменовывают двойной указатель и фактически в итоге передают некую переменную типа int.Ну зачем тогда все эти сложности если можно было бы передать просто переменную или просто указатель.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2014, 15:52
Помогаю со студенческими работами здесь

Что делает функция?
void countFrequency( const std::string &amp; str, int *frequency ) //принимаем строку, и указатель на...

Подскажите, что делает программа
Собрался поступать в универ. проходил тест пробный, там с++, дали код. Я немного учил с++ и увидел...

Подскажите, что делает программа
// BrackStack.cpp - автомат с магазинной памятью, // распознающий вложенность круглых скобок. //...

Что делает эта функция?
func(x) { if (x == 0) { return 0 } return func(x / 10) + x % 10 }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru