尝试使用:cudaHostAllocWriteCombined flag but I';当我尝试cudaMemcpy时,我得到了无效的参数
首先,我想说,我真的很喜欢CUDA文档,它真的很棒,而且资源丰富,尽管我发现很难找到哪个版本支持什么。我正在使用具有计算能力2.0的CUDA驱动程序版本5.0,我想知道是否支持cudaHostAllocWriteCombined 在我的代码中:尝试使用: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
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页在较新的处理器架构上进行写合并是值得怀疑的。