gpt4 book ai didi

c - 如何为 Cuda 中的每个内核创建本地参数 vector

转载 作者:行者123 更新时间:2023-11-30 14:27:28 25 4
gpt4 key购买 nike

如何在 cuda 中的每个实例中将参数 vector 视为局部变量?

__global__ void kern(char *text, int N){
//if i change text[0]='0'; the change only affects the current instance of the kernel and not the other threads
}

谢谢!

最佳答案

每个线程都将接收相同的输入参数,因此在这种情况下,每个线程中的 char *text 都是相同的 - 这是编程模型的基本部分。由于指针指向全局内存,如果一个线程通过指针更改数据(即修改全局内存),则该更改会影响所有线程(忽略危险)。

这与标准 C 完全相同,只不过现在有多个线程通过指针进行访问。换句话说,如果您在标准 C 函数内修改 text[0],则更改在函数外部可见。

如果我理解正确的话,您是在要求每个线程都有 text 内容的本地副本。如果您不希望更改在函数外部可见,那么解决方案与标准 C 完全相同:

__global__ void kern(char* text, int N) {
// If you have an upper bound for N...
char localtext[NMAX];
// If you don't know the range of N...
char *localtext;
localtext = malloc(N*sizeof(char));

// Copy from text to localtext
// Since each thread has the same value for i this will
// broadcast from the L1 cache
for (int i = 0 ; i < N ; i++)
localtext[i] = text[i];

//...
}

请注意,我假设您有 sm_20 或更高版本。另请注意,虽然可以在设备代码中使用 malloc,但您将付出性能代价。

关于c - 如何为 Cuda 中的每个内核创建本地参数 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7909015/

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