cuda 9.2 curand_init очень медленно - PullRequest
0 голосов
/ 28 мая 2018

У меня есть программа, в которой я генерирую массивы со случайными элементами, используя cuda.С тех пор как я обновил cuda 9.1 до cuda 9.2, время, которое требуется для этого, увеличилось с доли секунды (около 0,1 с) до почти двух минут (без изменения какого-либо кода).Кажется, проблема в функции curand_init (), так как остальные работают примерно с той же скоростью.Было ли изменение, которое я пропустил в библиотеке, это ошибка или проблема с моим кодом?Это пример

#include <iostream>
#include <curand.h>
#include <curand_kernel.h>

#define cudaErrchk(ans) { gpuAssert((ans), __FILE__, __LINE__); }
inline void gpuAssert(cudaError_t code, const char *file, int line, bool abort=true)
    {
    if (code != cudaSuccess) 
        {
        std::cerr << "cudaAssert: " << cudaGetErrorString(code) << " " << file << ": " << line << std::endl;
        if (abort) exit(code);
        }
    }

__global__
void setup_curand_state (curandState *state, int seed, int dim)
    {
    int index = threadIdx.x+blockDim.x*blockIdx.x;
    if (index < dim)
        curand_init(seed, index, 0, &state[index]);
    }

__global__
void set_random (float* to, curandState* curand_state, int dim)
    {
    int index = threadIdx.x+ blockIdx.x* blockDim.x;
    if (index < dim)
        to [index] = curand_normal (&curand_state[index]);
    }

int main () {

int dim = 100000;
float *data;
cudaErrchk (cudaMallocManaged ((void**) &data, dim * sizeof (float)));

curandState* curand_state;
cudaErrchk (cudaMalloc (&curand_state, (dim * sizeof (curandState))));
setup_curand_state <<<(dim + 1023) / 1024, 1024>>> (curand_state, time(NULL), dim);
cudaErrchk (cudaDeviceSynchronize());
set_random <<<(dim + 1023) / 1024, 1024>>> (data, curand_state, dim);

cudaFree (data);
return 0;
}

1 Ответ

0 голосов
/ 29 мая 2018

Ответ mrBonobo в комментарии выше:

Очевидно, что обновление cuda через apt молча прервало установку.Код, скомпилированный для 9.1, все еще будет работать, но примерно в 100/1000 раз медленнее.Переустановка nvidia-cuda-toolkit устранила ошибку

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