首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将静态声明的__constant__变量作为内核参数传递(CUDA)

将静态声明的__constant__变量作为内核参数传递(CUDA)
EN

Stack Overflow用户
提问于 2020-04-01 04:11:36
回答 1查看 47关注 0票数 1

我试图将静态分配的__constant__变量作为内核参数进行传递,但似乎有些地方不对劲。内核的行为如同变量未初始化一样。但是,我仍然可以将变量作为全局变量进行访问(来自同一内核)。修改主机中的变量值是可行的,但同样,前提是我必须从全局作用域访问变量。下面是一个示例:

代码语言:javascript
运行
复制
#include<cuda_runtime_api.h>
#include<cuda_runtime.h>
#include<stdio.h>

__constant__ float constant_a=1.12345;
__constant__ float constant_b;

__global__ void test_values(float a, float b) {
    printf("Device code: constant_a = %f, constant_b = %f\n", a, b);
    printf("Device code: constant_a = %f, constant_b = %f\n\n", constant_a, constant_b);
}

int main() {
    test_values<<<1, 1>>>(constant_a, constant_b);
    cudaDeviceSynchronize();

    const float h_const_a = 1;
    const float h_const_b = 2;

    cudaMemcpyToSymbol(constant_a, &h_const_a, sizeof(float));
    test_values<<<1, 1>>>(constant_a, constant_b);
    cudaDeviceSynchronize();

    cudaMemcpyToSymbol(constant_b, &h_const_b, sizeof(float));
    test_values<<<1, 1>>>(constant_b, constant_b);
    cudaDeviceSynchronize();
}

内核打印出以下内容:

代码语言:javascript
运行
复制
Device code: constant_a = 0.000000, constant_b = 0.000000
Device code: constant_a = 1.123450, constant_b = 0.000000

Device code: constant_a = 0.000000, constant_b = 0.000000
Device code: constant_a = 1.000000, constant_b = 0.000000

Device code: constant_a = 0.000000, constant_b = 0.000000
Device code: constant_a = 1.000000, constant_b = 2.000000

如果有人能解释这一点,我也非常感谢您能提供我的信息来源。因为我没有在Nvidia指南或其他几本书中找到这些信息。

EN

回答 1

Stack Overflow用户

发布于 2020-04-01 15:15:36

我试图将静态分配的__constant__变量作为内核参数传递,但似乎有些地方不对劲

问题是你不能这样做。它不受支持。

内核的行为如同变量未初始化一样

因为它们没有初始化。不能在宿主代码中访问__constant__变量,除非通过符号操作API。当您使用这些API时,您仅修改了设备内存中的值。没别的了。与静态声明的设备符号相关联的主机端变量仅作为用于绑定API调用的标签而存在。设备内存中的更改不会反映在主机内存中。唯一的例外是__managed__符号(在支持它的平台上)。

修改主机中的变量值有效,但同样,只有在访问全局范围中的变量时才有效

这是主机代码中__constant__变量唯一有效和受支持的用例。

,因为我在Nvidia指南或其他几本书中没有找到这个信息。

您没有找到有关如何执行此操作的信息,因为它不存在,也因为它不受支持。您可以找到here支持的内容的简明描述。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60959064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档