Всем хорошего дня!
Помогите новичку!
Обновил Ubuntu до версии 11.10 и решил поставить Cuda. Соответственно скачал все дрова, Toolkit, SDK. Все поставил, сделал все export'ы.
И получается интересная вещь:
http://steps3d.narod.ru/tutorials/cuda-tutorial.html - компилирую первые два примера отсюда - они замечательно компилируются без ошибок. Но при запуске на видюхе ничего не считается во втором случае, а в первом программа всегда выдает разные результаты - хотя должна, как я понял, выдавать характеристики видеокарты. Ниже приведу примеры вывода. И так со всеми примерами - там, где должно что-то посчитаться результат всегда одинаков, то есть никакой - ничего не считается.
soopic@soopic:~$ nvcc cuda.cu
soopic@soopic:~$ ./a.out
Found 1 devices
Device 0
Compute capability : 137289736.1780274
Name : �
Total Global Memory : 48
Shared memory per block: 4
Registers per block : 0
Warp size : 3514356
Max threads per block : 1964260
Total constant memory : 1964872
soopic@soopic:~$ ./a.out
Found 1 devices
Device 0
Compute capability : 163667976.10906162
Name : �
Total Global Memory : 48
Shared memory per block: 4
Registers per block : 0
Warp size : 7340020
Max threads per block : 11090148
Total constant memory : 11090760
soopic@soopic:~$ nvcc cuda.cu
soopic@soopic:~$ ./a.out
time spent executing by the GPU: 0.00 millseconds
--------------------------------------------------------------
Error in pos 0, 0.000000
soopic@soopic:~$
Сами примеры:
#include <stdio.h>
__global__ void incKernel ( float * data )
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
data [idx] = data [idx] + 1.0f;
}
int main ( int argc, char * argv [] )
{
int n = 16 * 1024 * 1024;
int numBytes = n * sizeof ( float );
// allocate host memory
float * a = new float [n];
for ( int i = 0; i < n; i++ )
a [i] = 0.0f;
// allocate device memory
float * dev = NULL;
cudaMalloc ( (void**)&dev, numBytes );
// set kernel launch configuration
dim3 threads = dim3(512, 1);
dim3 blocks = dim3(n / threads.x, 1);
// create cuda event handles
cudaEvent_t start, stop;
float gpuTime = 0.0f;
cudaEventCreate ( &start );
cudaEventCreate ( &stop );
// asynchronously issue work to the GPU (all to stream 0)
cudaEventRecord ( start, 0 );
cudaMemcpy ( dev, a, numBytes, cudaMemcpyHostToDevice );
incKernel<<<blocks, threads>>>(dev);
cudaMemcpy ( a, dev, numBytes, cudaMemcpyDeviceToHost );
cudaEventRecord ( stop, 0 );
cudaEventSynchronize ( stop );
cudaEventElapsedTime ( &gpuTime, start, stop );
// print the cpu and gpu times
printf("time spent executing by the GPU: %.2f millseconds\n", gpuTime );
// check the output for correctness
printf("--------------------------------------------------------------\n");
for ( int i = 0; i < n; i++ )
if ( a [i] != 1.0f )
{
printf ( "Error in pos %d, %f\n", i, a [i] );
break;
}
// release resources
cudaEventDestroy ( start );
cudaEventDestroy ( stop );
cudaFree ( dev );
delete a;
return 0;
}
#include <stdio.h>
int main ( int argc, char * argv [] )
{
int deviceCount;
cudaDeviceProp devProp;
cudaGetDeviceCount ( &deviceCount );
printf ( "Found %d devices\n", deviceCount );
for ( int device = 0; device < deviceCount; device++ )
{
cudaGetDeviceProperties ( &devProp, device );
printf ( "Device %d\n", device );
printf ( "Compute capability : %d.%d\n", devProp.major, devProp.minor );
printf ( "Name : %s\n", devProp.name );
printf ( "Total Global Memory : %d\n", devProp.totalGlobalMem );
printf ( "Shared memory per block: %d\n", devProp.sharedMemPerBlock );
printf ( "Registers per block : %d\n", devProp.regsPerBlock );
printf ( "Warp size : %d\n", devProp.warpSize );
printf ( "Max threads per block : %d\n", devProp.maxThreadsPerBlock );
printf ( "Total constant memory : %d\n", devProp.totalConstMem );
}
return 0;
}
При компилировании примеров из SDK тоже возникает непонятное:
/usr/bin/ld: cannot open output file ../../bin/linux/release/scalarProd: Permission denied
collect2: выполнение ld завершилось с кодом возврата 1
- если запускаю без sudo
/usr/bin/ld: cannot find -lcuda
collect2: выполнение ld завершилось с кодом возврата 1
если запускаю из-под root'а...
Что делать - ума не приложу, а желательно разобраться с программированием на Cuda.
Заранее спасибо!
ЗЫ Где-то написано, что не поддерживает 11.10 CUDA. Если да - это очень печально.