gpt4 book ai didi

c++ - CUDA - 使用 __constant__ 变量和 cudaMemcpyFromSymbol

转载 作者:行者123 更新时间:2023-11-28 05:51:46 24 4
gpt4 key购买 nike

我对 CUDA 有点陌生,所以如果这是一个愚蠢的问题,请原谅我。我一直在阅读/观看很多教程,但它们都很困惑,但我认为我已经掌握了基本概念。无论如何,我正在尝试执行以下操作:我想在设备上初始化几个常量变量(hbar、kb、q、T、me)。然后我还想有一个变量 muB,它是这些其他已初始化常量的函数。但是,我相信要做到这一点,我需要先将常量值复制到主机内存,计算 muB 并将其传回设备内存。我试图在主要功能中做到这一点。

#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <ctime>

#include <cuda.h>
#include <cuda_runtime.h>

using namespace std;

//Physical Constants
__constant__ float hbar = 1.054e-34;
__constant__ float kb = 1.38e-23;
__constant__ float q = 1.6e-19;
__constant__ float T = 300.0;
__constant__ float me = 9.1e-31;
__constant__ float muB = 0.0;

int main() {
float tmp = 0.0f;

float h_q, h_hbar, h_me;
cudaMemcpyFromSymbol(&h_q, &q, sizeof(float));
cudaMemcpyFromSymbol(&h_hbar, &hbar, sizeof(float));
cudaMemcpyFromSymbol(&h_me, &me, sizeof(float));
tmp = h_q*h_hbar / 2 / h_me;
cudaMemcpyToSymbol(&muB, &tmp, sizeof(float));

return 0;
}

问题是,当我运行这个程序时,h_q、h_hbar 和 h_me 都等于 -107374176,这不是我将这些常量变量初始化为的值。 tmp 也等于 -53687088.0。我知道我一定做错了什么,但无法弄清楚是什么。有人有任何见解或建议吗?谢谢

最佳答案

当使用 cudaMemcpyTo/FromSymbol 时,我们直接使用符号名称,而不是与符号。所以不是这个:

cudaMemcpyFromSymbol(&h_q, &q, sizeof(float));
cudaMemcpyFromSymbol(&h_hbar, &hbar, sizeof(float));
cudaMemcpyFromSymbol(&h_me, &me, sizeof(float));
tmp = h_q*h_hbar / 2 / h_me;
cudaMemcpyToSymbol(&muB, &tmp, sizeof(float));

这样做:

cudaMemcpyFromSymbol(&h_q, q, sizeof(float));
cudaMemcpyFromSymbol(&h_hbar, hbar, sizeof(float));
cudaMemcpyFromSymbol(&h_me, me, sizeof(float));
tmp = h_q*h_hbar / 2 / h_me;
cudaMemcpyToSymbol(muB, &tmp, sizeof(float));

另外,我很确定如果你做了 proper cuda error checking ,您编写的每一行都会引发错误。

关于c++ - CUDA - 使用 __constant__ 变量和 cudaMemcpyFromSymbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35110540/

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