尝试使用:cudaHostAllocWriteCombined flag but I';当我尝试cudaMemcpy时,我得到了无效的参数

尝试使用:cudaHostAllocWriteCombined flag but I';当我尝试cudaMemcpy时,我得到了无效的参数,cuda,nvidia,memcpy,Cuda,Nvidia,Memcpy,首先,我想说,我真的很喜欢CUDA文档,它真的很棒,而且资源丰富,尽管我发现很难找到哪个版本支持什么。我正在使用具有计算能力2.0的CUDA驱动程序版本5.0,我想知道是否支持cudaHostAllocWriteCombined 在我的代码中: float *d_data, h_data; h_data = new float[A]; assert(cudaHostAlloc((void **)&d_data, A * sizeof(float), cudaHostAllocWrite

首先,我想说,我真的很喜欢CUDA文档,它真的很棒,而且资源丰富,尽管我发现很难找到哪个版本支持什么。我正在使用具有计算能力2.0的CUDA驱动程序版本5.0,我想知道是否支持cudaHostAllocWriteCombined

在我的代码中:

float *d_data, h_data;
h_data = new float[A];

assert(cudaHostAlloc((void **)&d_data, A * sizeof(float), cudaHostAllocWriteCombined) == cudaSuccess);

cudaError_t err = cudaMemcpy(d_data, h_data, A * sizeof(float), cudaMemcpyHostToDevice);
if (err != cudaSuccess)
{
    std::cout << cudaGetErrorString(err) << std::endl;
    return false;
}
float*d_数据,h_数据;
h_数据=新浮点数[A];
断言(cudaHostAlloc((void**)和d_数据,A*sizeof(float),cudaHostAllocWriteCombined)=cudaSuccess);
cudaError\u t err=cudaMemcpy(d_数据、h_数据、A*sizeof(float)、cudaMemcpyHostToDevice);
if(err!=cudaSuccess)
{

std::cout您使用的
h_数据
不正确。
new
返回一个指针,该指针应分配给正确的变量类型。在声明中用
*h_数据
替换
h_数据
,您的代码将或多或少正确,并且
cudaMemcpy
不应抛出无效的参数错误

以下完整代码显示了更正,并为我在CUDA 6上编译和运行时没有错误:

#include <iostream>
#include <assert.h>
#define A 1024
int main(){

  float *d_data, *h_data;
  h_data = new float[A];

  cudaError_t err = cudaHostAlloc((void **)&d_data, A * sizeof(float), cudaHostAllocWriteCombined);
  if (err != cudaSuccess)
  {
    std::cout << "cudaHostAlloc fail " << std::endl;
    std::cout << cudaGetErrorString(err) << std::endl;
    return 1;
  }

  err = cudaMemcpy(d_data, h_data, A * sizeof(float), cudaMemcpyHostToDevice);
  if (err != cudaSuccess)
  {
    std::cout << "cudaMemcpy fail"  << std::endl;
    std::cout << cudaGetErrorString(err) << std::endl;
    return 1;
  }

  return 0;
}
#包括
#包括
#定义一个1024
int main(){
浮点*d_数据,*h_数据;
h_数据=新浮点数[A];
cudaError\u t err=cudaHostAlloc((void**)和d_数据,A*sizeof(float),cudahostallocwrite组合);
if(err!=cudaSuccess)
{

std::cout cudaHostAllocWriteCombined可能是2.2来源:第10页在较新的处理器架构上进行写合并是值得怀疑的。