gpt4 book ai didi

c++ - 通过cpu内核调用函数的划分算法,并在GPU内核上运行该函数

转载 作者:行者123 更新时间:2023-11-28 08:12:22 25 4
gpt4 key购买 nike

我只是想学习一点并行计算的知识。如果有一个看起来像这样的东西,

long A[12];
long B[5,000,000];
long C[12];
long long total=0;
long long tmp;

GPUKernel(){

for (n=0; n < 5,000,000; ++n) {
B[n]=0;
}

for (n=0; n < 5,000,000; ++n) {
for (n2=0; n2 < 12; ++n2) {
B[n]+=C[A[n2]];
}
tmp+=B[n];
}

if (tmp > total) {
total=tmp;
tmp=0;
}
}



int main(){

srand( (unsigned)time( NULL ) );

for (n=0; n < 12; ++n) {
C[n]=rand() % 1000000;
}

for (n=0 ; n < 8916100448256 ; ++n) {
++A[0];
for (p=0; n<11; ++p) {
if (A[p]==12) {
A[p]=0;
++A[p+1];
}
}
GPUKernel();
}

return 0;
}

我的想法是获取 CPU 可以使用的线程数。例如,如果有 4 个,我将针对我创建的每多少个 cpu 线程制作所有数据的单独拷贝。所以每个 gpu 内核也将拥有自己的数据。这有意义吗?这是完成这项任务的好方法吗?

//cpu core 1
for (n=0; n < 8916100448256/4 ; ++n) {
...
GPUKernel1();
}

//cpu core 2
for (n=(8916100448256/4; n < (8916100448256/4)*2 ; ++n) {
...
GPUKernel2();
}

//cpu core 3
for (n=(8916100448256/4)*2; n < (8916100448256/4)*3 ; ++n) {
...
GPUKernel3();
}

//cpu core 4
for (n=(8916100448256/4)*3; n < 8916100448256) ; ++n) {
...
GPUKernel4();
}

最佳答案

如果我错了请纠正我,但这似乎是一道算法题。 OpenCL 在图片中无处可去。顺便说一句,当你在 OpenCL/CUDA 中编写内核代码时,分配给每个线程的数据将由该线程的线程 ID 决定,你可以将它们划分为 block 等。请引用编程指南(NVIDIA/AMD)。

关于c++ - 通过cpu内核调用函数的划分算法,并在GPU内核上运行该函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8691121/

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