- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 C# 中使用 ManagedCuda,但我有一个问题找不到答案...也许您可以帮助我。我读到在 C++ 和 CUDA 中你可以声明一个变量(它是一个数组),比如:
__constant__ double myVar[X];
(这应该用来保存 X 元素的数组)
然后使用它来设置来自主机代码的值:
cudaMemcpyToSymbol(myVar, &arrayFromHost[0], sizeof(arrayFromHost) * numElements,
size_t(0),cudaMemcpyHostToDevice);
所以现在你可以使用类似的东西:
__global__ void myFunction(double *res)
{
*res = myVar[0] + 2.5;
}
使用主机在 myVar
中设置的值...
但在 ManagedCuda 中我似乎无法做到这一点...我该怎么做??
(或 __device__
变量......我不知道......它将是一个变量,它将在第一次运行时接收一个数组(具有未知数量的元素) ,从那时起,该函数将引用它的值,但该变量永远不会改变)
现在我只声明了一个 CudaDeviceVariable
并且我再也没有碰过它,但是在我的内核上我总是必须发送 DevicePointer,我认为这使得阅读时更难理解。 ..
现在看起来像这样:
myKernel.Run(staticData.DevicePointer, moreData.DevicePointer,
evenMoreData.DevicePointer, numberOfElementsWhichNeverChange,
moreStaticData.DevicePointer, myResults.DevicePointer)
我想跳过 3 个具有永不更改的数据的参数,并将其设置在另一个函数中,例如 setData.Run(numElements, staticData, moreStaticData);
并在我的 *.cu 文件中的其他函数中使用常量或设备变量。
最佳答案
myKernel 有一个方法 SetConstantVariable() 做你想做的事。在启动内核之前调用它:在您的 *.cu 文件中:
extern "C"
{
__constant__ double myConstVarInCuda[5];
__global__ void myFunction(double *res)
{
*res = myConstVarInCuda[0] + 2.5;
}
}
在 C# 中:
double[] myVarInCS = new double[] { 1.0, 2.0, 3.0, 4.0, 5.0 };
myKernel.SetConstantVariable("myConstVarInCuda", myVarInCS);
myKernel.Run(...);
如果您不在外部“C”范围内声明您的 Cuda 代码,请注意名称会被破坏。在这种情况下,您可以在 PTX 代码中查找确切的损坏名称。
关于c# - ManagedCuda 和 __constant__ 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12399838/
有什么区别,在 CUDA 程序中定义设备常量的最佳方法是什么?在 C++,主机/设备程序中,如果我想将常量定义在设备常量内存中,我可以这样做 __device__ __constant__ float
我没有向内核传递大量参数,而是使用了一个 __constant__ 变量。这个变量是一个结构数组,其中包含许多指向全局数据的指针(这些指针将是一个参数列表);用于调用内核的多个不同数据集的数组。然后内
我在 C# 中使用 ManagedCuda,但我有一个问题找不到答案...也许您可以帮助我。我读到在 C++ 和 CUDA 中你可以声明一个变量(它是一个数组),比如: __constant__ do
我在 C# 中使用 ManagedCuda,但我有一个问题找不到答案...也许您可以帮助我。我读到在 C++ 和 CUDA 中你可以声明一个变量(它是一个数组),比如: __constant__ do
我是 CUDA 编程新手。目前,我正在尝试构建一个使用 CUDA 并行处理数据的 OO 框架。我目前正在使用 CUDA 8.0。 有一些关键参数__constant__ int foo[3]需要所有线
我有一个数组,我想在 CUDA 设备上的 __constant__ 内存中初始化。直到运行时我才知道它的大小或值。 我知道我可以使用 __constant__ float Points[**N**][
我不明白为什么我会收到错误 dynamic initialization is not supported for __device__, __constant__, __shared__ varia
我对 CUDA 有点陌生,所以如果这是一个愚蠢的问题,请原谅我。我一直在阅读/观看很多教程,但它们都很困惑,但我认为我已经掌握了基本概念。无论如何,我正在尝试执行以下操作:我想在设备上初始化几个常量变
例如,如果您有一个简单的常量变量 __device__ __constant__ int MY_CONSTANT; 并且它被同一个内核线程多次访问: __global__ void move(int*
我在同一个问题上看到了很多答案,但从未找到解决方案。只有一些建议在 cudaMemcpyToSymbol(...) 等中使用 char simbol。 我使用来自 cudaMemcpyToSymbol
与 CUDA 一样,最基本的东西有时也是最难的…… 所以...我只想将一个变量从 CPU 复制到 GPU 的 常数 变量,我很难过。 这就是我所拥有的: __constant__ int contad
我正在尝试编译一个 CUDA 示例; cuda.cu: __constant__ unsigned VERTICES; __constant__ unsigned TRIANGLES; 以及main.
在共享内存编程模型中,任何全局变量对每个线程都是可见的。 在 CUDA 中,常量 内存的声明方式与共享内存系统中的全局变量类似,这让我有点担心: 考虑以下代码: __constant__ int ar
我正在尝试静态初始化 GPU 内存中的只读 std::map 变量,如下所示: // EXAMPLE 1: using namespace std; // first attempt: __devic
我是一名优秀的程序员,十分优秀!