c - 如何将文件从主机复制到 GPU 设备?

标签 c memory-management cuda

我有一个 C 代码,它读取一个充满数据的文件,这些数据以 block (称为帧)分隔,然后获取每个帧并将其保存在 vector 中 - 每个帧都是一个 vector 分量。现在我想用 CUDA 做同样的事情,以便我的程序以并行方式读取和保存每个帧。因此,首先我需要将数据文件从主机复制到 GPU 设备。

我正在考虑使用 cudaMalloc 来执行此操作,但我想知道是否有其他方法可以将文件从主机复制到设备。

我想这是一件简单的事情,但我才刚刚开始使用 CUDA。 提前致谢!

最佳答案

GPU 有不同的内存,您需要将所有内容复制到其中。 您需要做的第一件事是为您提供空间。 然后使用 cudaMemcpy 复制数据。

奖励:还有 cudaMallocManaged 可以自动管理设备之间的复制。如果您不想处理 cudaMemcpy,这是很好的选择。

以下是使用 CUDA 的简单方法:

int main(int argc, char *argv[])
{
    double * data_host = new double[N];

    // read your data here and put it in "data_host"
    // ...


    // allocate and copy your data to device
    double * data_gpu;
    cudaMalloc((void **) &data_gpu, N * sizeof(double));
    cudaMemcpy(data_gpu, data_host, N * sizeof(double), cudaMemcpyHostToDevice);

    // launch kernel
    kernel<<< number_of_blocks, number_of_threads>>> (data_gpu);

    // copy back the result
    cudaMemcpy(data_host, data_gpu, N * sizeof(double), cudaMemcpyDeviceToHost);

    // Do more stuff with your data
}

关于c - 如何将文件从主机复制到 GPU 设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58811802/

相关文章:

performance - CUDA 中的分歧 - 从内核中的线程退出

c - 修改同一内存地址上的值如何会删除以前的值? "OVERWRITTEN concept on PC' s模式操作”

c - 访问双指针

c - 发送多个信号时信号处理程序的行为

java - YourKit - 对象的保留大小不等于它引用的所有对象的保留大小

profiling - 诊断 CUDA 内核问题

c++ - CUDA 内存(类型),用于内核调用期间的仅设备计算(计算 1.1 或 1.2)

c - Shellcode 测试出错

linux - Linux 内核如何决定使用哪个内存区域?

c++ - 正确分配和释放子类 QCPGraph