gpt4 book ai didi

cudaMemset 似乎没有设置所需的值

转载 作者:行者123 更新时间:2023-12-01 06:05:28 24 4
gpt4 key购买 nike

我有以下简单的程序来测试 cudaMemset

#include <iostream>
#include <cuda.h>
using namespace std;
__global__ void kernel(int *input){
input[threadIdx.x] += threadIdx.x;
}
int main() {
size_t size = 5;
int *h_ptr, *d_ptr;
h_ptr = new int[size];

cudaMalloc((void **)&d_ptr, sizeof(int) * size);
cudaMemset(d_ptr, 10, sizeof(int) * size);

kernel<<<1, size>>>(d_ptr);
cudaDeviceSynchronize();

cudaMemcpy(h_ptr, d_ptr, sizeof(int)*size, cudaMemcpyDeviceToHost);

for(int i = 0; i < size; i++)
cout<<h_ptr[i]<<" ";
cout<<endl;

return 0;
}

我预计结果会是 [10 11 12 13 14] 而我得到的是垃圾值。

我缺少什么?

谢谢!

最佳答案

cudaMemset就像标准的一样工作 memset功能除了它是用于设备内存。它设置指定内存位置的每个字节 的值。您正在尝试将整数的值设置为一个整体,这对于 memset 是不可能的。

在提供的示例中,cudaMemset 将每个字节的值设置为 10。意思就是内存会这样初始化

0A0A0A0A0A0A0A......(十六进制表示法)。

因此,当您将其作为 32 位整数读取时,您将得到:

168430090 十进制

这些值不是垃圾,这些是预期的结果。

[168430090 168430091 168430092 168430093 168430094]

关于cudaMemset 似乎没有设置所需的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17515250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com