作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码(假设所有内容都已正确定义):
#include "OurIncludes.h"
#include <ctime>
__global__ void kernel_testing(int *d_intersects, Circle *part1, Circle *part2)
{
int i = blockIdx.x * blockDim.x + threadIdx.x;
int j = blockIdx.y * blockDim.y + threadIdx.y;
if (i < 10 && j < 10) {
int index = i + j * 10;
d_intersects[index] = part1[i].intersect(part2[j]);
}
}
int main(void)
{
dim3 GRID(1, 1);
dim3 BLOCK(10, 10);
short randomNum;
RandObj randGenerator;
Circle* obj = new Circle[10];
Circle* obj2 = new Circle[10];
Circle *d_obj;
Circle *d_obj2;
int intersects[100];
int *d_intersects;
if (cudaSuccess != cudaMalloc((void **)&d_obj, sizeof(Circle) * 10)) {
fprintf(stderr, "Failed to allocate memory for d_result\n");
}
if (cudaSuccess != cudaMalloc((void **)&d_obj2, sizeof(Circle) * 10)) {
fprintf(stderr, "Failed to allocate memory for d_result\n");
}
if (cudaSuccess != cudaMalloc((void **)&d_intersects, sizeof(int) * 100)) {
fprintf(stderr, "Failed to allocate memory for d_result\n");
}
for (int i = 0; i < 10; i++) {
obj[i] = (*randGenerator.makeRandomCircle());
}
for (int i = 0; i < 10; i++) {
obj2[i] = (*randGenerator.makeRandomCircle());
}
size_t size = sizeof(Circle);
if (cudaSuccess != cudaMemcpy(d_obj, obj, size * 10, cudaMemcpyHostToDevice)) {
fprintf(stderr, "Failed to copy data to d_obj\n");
}
if (cudaSuccess != cudaMemcpy(d_obj2, obj2, size * 10, cudaMemcpyHostToDevice)) {
fprintf(stderr, "Failed to copy data to d_obj2\n");
}
kernel_testing << < GRID, BLOCK >> >(d_intersects, d_obj, d_obj2);
cudaError_t s = cudaMemcpy(intersects, d_intersects, sizeof(int) * 100, cudaMemcpyDeviceToHost);
fprintf(stderr, "Error is: %s", cudaGetErrorString(s));
cudaFree(d_intersects);
cudaFree(d_obj);
cudaFree(d_obj2);
return 0;
}
由于某种原因,代码总是在cudaMemcpyDeviceToHost
处失败。 ,而且我看不出为什么应该这样做的原因。我尝试过使用不同的对象(三角形、球体等)启动,但当我需要将数据从设备复制回主机时,它总是失败。感谢任何帮助和/或建议,我对使用 CUDA 编程非常陌生。谢谢。
编辑:错误代码表示遇到了非法内存访问,但我不明白为什么会发生这种情况。
编辑2:所以我删除了所有双指针并“展平”我的数组,但我仍然遇到同样的问题。我现在完全没有想法了。
最佳答案
我想我曾经遇到过这样的问题,我的解决方案是:
cudaError_t status = cudaMemcpy(devPtr, srcPtr, size * sizeof(int), cudaMemcpyHostToDevice);
if (status == cudaSuccess) { ... }
尝试不要直接将函数与 cudaSuccess 进行比较,而是通过变量进行比较。
关于c++ - cudaMemcpyDeviceToHost() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29978457/
这个问题已经有答案了: Passing variables between host and device in CUDA (1 个回答) 已关闭 7 年前。 我在主机中有一个 bool 值,它被复制
这个问题已经有答案了: Interpretation of "too many resources for launch" (1 个回答) 已关闭 6 年前。 我有以下代码(假设所有内容都已正确定义)
在 CUDA 中如何使用 std::vector 并不明显,所以我设计了自己的 Vector 类: #ifndef VECTORHEADERDEF #define VECTORHEADERDEF #i
我是一名优秀的程序员,十分优秀!