Программа программирования Cublas ударила cudaErrorInvalidValue из-за «неверного аргумента» - PullRequest
0 голосов
/ 08 февраля 2019

В последнее время я пытаюсь написать программирование на GPU с помощью библиотеки Cublas.Я лишь выделяю память на устройстве и выполняю матричные вычисления.Однако, когда я пытаюсь выделить память следующим образом, я получаю такую ​​ошибку:

enter image description here Мой код выглядит следующим образом.C равно 21, а N равно 53940. SNIP равно 550482/30. Странно, но я нахожу, что независимо от порядка, в котором я выделяю память на устройстве, я всегда получаю ошибку из-за этой строки.cudaStat = cudaMalloc((void**)&d_WTW, C * C * sizeof(float)); Полный код выглядит следующим образом.

// Set cuda context
cudaError_t cudaStat;
cublasStatus_t stat;

// Initialize device pointer
float* d_data;
float* d_W;
float* d_v;
float* d_result;
float* d_result2;
float* d_temp;
float* d_one;
float* d_mean;
float prod;
float* d_cby1;
float* d_cby2;
float* d_cby3;
float* d_R;
float* d_data_final;
float* d_temp_final;
float* d_WTW;
cudaStat = cudaMalloc((void**)&d_data, SNIPs * N * sizeof(float));
if (cudaStat != cudaSuccess) {
    cout << "device memory allocation failed 1" << endl;
    return EXIT_FAILURE;
}
cudaStat = cudaMalloc((void**)&d_W, N * C * sizeof(float));
if (cudaStat != cudaSuccess) {
    cout << "device memory allocation failed 2" << endl;
    return EXIT_FAILURE;
}
cudaStat = cudaMalloc((void**)&d_v, N * sizeof(float));
if (cudaStat != cudaSuccess) {
    cout << "device memory allocation failed 4" << endl;
    return EXIT_FAILURE;
}
cudaStat = cudaMalloc((void**)&d_result2, N * sizeof(float));
if (cudaStat != cudaSuccess) {
    cout << "device memory allocation failed 5" << endl;
    return EXIT_FAILURE;
}
cudaStat = cudaMalloc((void**)&d_result, N * sizeof(float));
if (cudaStat != cudaSuccess) {
    cout << "device memory allocation failed 6" << endl;
    return EXIT_FAILURE;
}
cudaStat = cudaMalloc((void**)&d_temp, SNIPs * sizeof(float));
if (cudaStat != cudaSuccess) {
    cout << "device memory allocation failed 7" << endl;
    return EXIT_FAILURE;
}
cudaStat = cudaMalloc((void**)&d_cby1, C * sizeof(float));
if (cudaStat != cudaSuccess) {
    cout << "device memory allocation failed 9" << endl;
    return EXIT_FAILURE;
}
cudaStat = cudaMalloc((void**)&d_cby2, C * sizeof(float));
if (cudaStat != cudaSuccess) {
    cout << "device memory allocation failed 10" << endl;
    return EXIT_FAILURE;
}
cudaStat = cudaMalloc((void**)&d_cby3, N * sizeof(float));
if (cudaStat != cudaSuccess) {
    cout << "device memory allocation failed 11" << endl;
    return EXIT_FAILURE;
}
cudaStat = cudaMalloc((void**)&d_v, N * sizeof(float));
if (cudaStat != cudaSuccess) {
    cout << "device memory allocation failed 13" << endl;
    return EXIT_FAILURE;
}
// stat = cublasSetVector((int)N, sizeof(*vector_ones), vector_ones, 1, d_one, 1);
stat = cublasSetMatrix((int)N, C, sizeof(*W), W, (int)N, d_W, (int)N);
stat = cublasSetMatrix(C, C, sizeof(*WTWInv), WTWInv, C, d_WTW, C);
// allocate memeory for temp result
float* d_R_temp;
cudaStat = cudaMalloc((void**)&d_R, N * B * sizeof(float));
if (cudaStat != cudaSuccess) {
    cout << "device memory allocation failed 14" << endl;
    return EXIT_FAILURE;
}

cudaStat = cudaMalloc((void**)&d_WTW, C * C * sizeof(float));
if (cudaStat != cudaSuccess) {
    cout << "device memory allocation failed 12" << endl;
    return EXIT_FAILURE;
}                     

1 Ответ

0 голосов
/ 15 февраля 2019

Наконец, я обнаружил, что с размером выделенной памяти что-то не так, что вызывает переполнение.

...