Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Помощь с Cuda. Ubunta 11.10  (Прочитано 1132 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн soopic

  • Автор темы
  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Помощь с Cuda. Ubunta 11.10
« : 19 Марта 2012, 01:05:03 »
Всем хорошего дня!

Помогите новичку!

Обновил 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. Если да - это очень печально.

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: Помощь с Cuda. Ubunta 11.10
« Ответ #1 : 24 Марта 2012, 01:32:56 »
Что делать - ума не приложу, а желательно разобраться с программированием на Cuda.
Заранее спасибо!
http://rus-linux.net/forum/viewtopic.php?f=18&t=1530
здесь не с кем обсуждать CUDA
("хотелось бы обсуждать вку устриц с тем, кто их пробовал"(с) М.Жванецкий)

 

Страница сгенерирована за 0.016 секунд. Запросов: 22.