gpt4 book ai didi

c - 如何为 2D 数组设置循环边界以按线程分割工作

转载 作者:行者123 更新时间:2023-11-30 15:02:36 24 4
gpt4 key购买 nike

我的目标是使用 pthreads 创建一个多线程应用程序来完成某些任务。任务和 pthread 本身运行正常,因此我不会用数百行代码淹没屏幕,而只显示这一重要部分。如果您想测试代码而这让事情变得困难,我们深表歉意。

不幸的是,我无法弄清楚如何拆分 2D 数组以按线程在 block 中完成工作,正如我打算通过此图所做的那样:

enter image description here

for(int i=(t_id%x)*(height/x); i<(t_id%x + 1)*(height/x); i++){
for(int j=(t_id%x)*(length/x); j<(t_id%x + 1)*(length/x); j++){
//some work is done
}
}
//t_id -> thread id
//x -> 2^x = number of threads, so in this ex, x=4
//i -> y axis, j -> x-axis
//height -> bound on y-axis of array
//length -> bound on x-axis of array

经过测试和检查,很明显这个解决方案有一个缺陷,即所有线程都沿着对角线放置。我不太清楚如何构建一个解决方案来解决这个问题。我当然非常感谢任何关于如何解决这个问题的建议。

最佳答案

假设您必须将网格拆分为 N 行和 M 列。处理 I 行和 J 列中的单元格的线程将处理 H/N * IH/N * (I + 1) 范围内的数据和 W/M * JW/M * (J + 1),其中 I 和 J 从 0 开始。

关于c - 如何为 2D 数组设置循环边界以按线程分割工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40986898/

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