【发布时间】:2021-02-25 12:27:32
【问题描述】:
我想知道为什么它们有相同的内存地址,如果我没记错的话,每个线程都有一个自己的创建变量的副本:
__global__ void
Matrix_Multiplication_Shared(
const int* const Matrix_A,
const int* const Matrix_B,
int* const Matrix_C)
{
const int sum_value = threadIdx.x;
printf("%p \n", &sum_value);
}
输出:
我正在考虑一个线程块的情况,例如有 2 个或更多线程。
【问题讨论】:
-
在我看来,没有线索可以添加更多代码,这很愚蠢
-
仅在需要时,我可以添加内核执行行
-
您正在打印
automatic变量的地址。这是在当前线程输入范围时创建的。可能这只是在调用函数时在堆栈上创建。因此,如果您只是在循环中重复调用此函数,它将“可能”始终具有相同的地址,因为堆栈没有更改。您是否在示例中使用不同的线程调用该函数? -
是的,但是如果我要打印一个值,那么我会打印出不同的值