Russian Qt Forum

Qt => Общие вопросы => Тема начата: Torvald от Август 27, 2011, 12:06



Название: Подключение библиотеки собранной nvcc
Отправлено: Torvald от Август 27, 2011, 12:06
Пытаюсь подключить библиотеку
Код:
LIBS     += a.a
Возникает куча ошибок
Код:
tmpxft_00000e76_00000000-1_1.cudafe1.cpp:(.text+0x21): undefined reference to `cudaMalloc'
tmpxft_00000e76_00000000-1_1.cudafe1.cpp:(.text+0x7b): undefined reference to `cudaConfigureCall'
tmpxft_00000e76_00000000-1_1.cudafe1.cpp:(.text+0xab): undefined reference to `cudaMemcpy'
tmpxft_00000e76_00000000-1_1.cudafe1.cpp:(.text+0xb7): undefined reference to `cudaFree'
a.a(tmpxft_00000e76_00000000-13_1.o): In function `__cudaUnregisterBinaryUtil()':
tmpxft_00000e76_00000000-1_1.cudafe1.cpp:(.text+0x11c): undefined reference to `__cudaUnregisterFatBinary'
a.a(tmpxft_00000e76_00000000-13_1.o): In function `__device_stub__Z6kernelPf(float*)':
tmpxft_00000e76_00000000-1_1.cudafe1.cpp:(.text+0x1226): undefined reference to `cudaSetupArgument'
a.a(tmpxft_00000e76_00000000-13_1.o): In function `__sti____cudaRegisterAll_36_tmpxft_00000e76_00000000_4_1_cpp1_ii_146421d2()':
tmpxft_00000e76_00000000-1_1.cudafe1.cpp:(.text+0x127a): undefined reference to `__cudaRegisterFatBinary'
tmpxft_00000e76_00000000-1_1.cudafe1.cpp:(.text+0x12db): undefined reference to `__cudaRegisterFunction'
a.a(tmpxft_00000e76_00000000-13_1.o): In function `cudaError cudaLaunch<char>(char*)':
tmpxft_00000e76_00000000-1_1.cudafe1.cpp:(.text._Z10cudaLaunchIcE9cudaErrorPT_[cudaError cudaLaunch<char>(char*)]+0x14): undefined reference to `cudaLaunch'
collect2: ld returned 1 exit status
make: *** [untitled] Ошибка 1
Процесс «/usr/bin/make» завершился с кодом 2.
Возникла ошибка при сборке проекта untitled (цель: Desktop)
Во время выполнения сборки на этапе «Сборка»

Файл 1.cu (библиотека)
Код:
#include <stdio.h>
#include "1.h"

#define N (1024*1024)
__global__ void kernel ( float * data )
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
float x = 2.0f * 3.1415926f * (float) idx / (float) N;
data [idx] = sinf ( sqrtf ( x ) );
}

int foo ()
{
float a [N];
float * dev = NULL;
cudaMalloc ( (void**)&dev, N * sizeof ( float ) );
kernel<<<dim3((N/512),1), dim3(512,1)>>> ( dev );
cudaMemcpy ( a, dev, N * sizeof ( float ), cudaMemcpyDeviceToHost );
cudaFree( dev );
for (int idx = 0; idx < N; idx++)
printf("a[%d] = %.5f\n", idx, a[idx]);
return 0;
}

хэдер файл 1.h
Код:
int foo ();

библиотеку делаю командой
Код:
nvcc 1.cu -lib

Я так понимаю в эту библиотеку не включаются все вспомогательные компоненты (другие библиотеки), можно ли их как нибудь автоматически включить? Или нужно вылавливать каждую и руками добавлять к моей конечной библиотеке? И если руками, то как? (покажите пример добавление одной такой библиотеки и как ее найти)
Понимаю вопрос не совсем по Qt, но русских форумов по CUDA не нашел.


Название: Re: Подключение библиотеки собранной nvcc
Отправлено: Olej от Ноябрь 07, 2011, 18:31
Пытаюсь подключить библиотеку
...
Я так понимаю в эту библиотеку не включаются все вспомогательные компоненты (другие библиотеки), можно ли их как нибудь автоматически включить? Или нужно вылавливать каждую и руками добавлять к моей конечной библиотеке? И если руками, то как? (покажите пример добавление одной такой библиотеки и как ее найти)
Понимаю вопрос не совсем по Qt, но русских форумов по CUDA не нашел.

http://rus-linux.net/forum/viewtopic.php?f=5&t=1530&start=20

http://www.gpgpu.ru/forum

http://3.14.by/forum/viewforum.php?f=6