2017-08-29 1656 views
0

我是CUDA和CUB的新手。我發現下面的代碼,並試圖編譯它,但我有這個錯誤: 致命錯誤:cub/cub.cuh:沒有這樣的文件或目錄。致命錯誤:cub/cub.cuh:沒有這樣的文件或目錄

CUDA的版本是7.0.27 我該如何解決這個錯誤?

謝謝!

所有的
#include <cuda.h> 
#include <cub/cub.cuh> 
#include <stdio.h> 

int main(){ 

    // Declare, allocate, and initialize device pointers for input and output 
    int num_items = 7; 
    int *d_in; 
    int h_in[] = {8, 6, 7, 5, 3, 0, 9}; 
    int sz = sizeof(h_in)/sizeof(h_in[0]); 
    int *d_out; // e.g., [ , , , , , , ] 
    cudaMalloc(&d_in, sz*sizeof(h_in[0])); 
    cudaMalloc(&d_out, sz*sizeof(h_in[0])); 
    cudaMemcpy(d_in, h_in, sz*sizeof(h_in[0]), cudaMemcpyHostToDevice); 
    printf("\nInput:\n"); 
    for (int i = 0; i < sz; i++) printf("%d ", h_in[i]); 
    // Determine temporary device storage requirements 
    void *d_temp_storage = NULL; 
    size_t temp_storage_bytes = 0; 
    cub::DeviceScan::InclusiveSum(d_temp_storage, temp_storage_bytes, d_in, d_out, num_items); 
    // Allocate temporary storage 
    cudaMalloc(&d_temp_storage, temp_storage_bytes); 
    // Run inclusive prefix sum 
    cub::DeviceScan::InclusiveSum(d_temp_storage, temp_storage_bytes, d_in, d_out, num_items); 
// d_out s<-- [8, 14, 21, 26, 29, 29, 38] 
    cudaMemcpy(h_in, d_out, sz*sizeof(h_in[0]), cudaMemcpyDeviceToHost); 
    printf("\nOutput:\n"); 
    for (int i = 0; i < sz; i++) printf("%d ", h_in[i]); 
    printf("\n"); 
    return 0; 
} 
+1

您必須單獨安裝CUB。它不包含在cuda工具包中。你可以得到CUB [這裏](https://github.com/NVlabs/cub)。請注意,CUDA 7現在已經很老了。您可能需要爲此選擇較舊版本的CUB。 –

回答

0

首先,你應該升級到CUDA 8.此錯誤致命錯誤:幼崽/ cub.cuh因爲編譯器無法找到該文件。如果您使用cmake,則必須通過命令include_directories添加小目錄,如果您使用IDE或其他,請嘗試將cub目錄添加到您的項目中。

相關問題