【发布时间】:2016-01-31 13:31:47
【问题描述】:
我对 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。我知道我一定做错了什么,但不能完全弄清楚是什么。任何人有任何见解或建议?谢谢
【问题讨论】: