Fortran Coder

查看: 633|回复: 4
打印 上一主题 下一主题

[通用算法] 怎么把一个大数组的数据尽量平均地分成几组?

[复制链接]

80

帖子

26

主题

0

精华

专家

F 币
280 元
贡献
150 点
跳转到指定楼层
楼主
发表于 2024-6-18 21:29:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
多GPU处理同一个大型数组时,我想尽量地把这个数组的数据平均分成几个部分,每个GPU负责处理一部分,但是因为这个数组的大小并不确定,并不一定是GPU数量的整数倍,所以直接相除并不总得到整数。不知道大家有没有遇到类似这种问题,可否提供一下思路,或者参考代码就可以。
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
沙发
发表于 2024-6-19 09:44:53 | 只看该作者
没要求非得平均,近似平均就行。

2022

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1598 元
贡献
689 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

板凳
发表于 2024-6-19 10:13:16 | 只看该作者
让其中一个GPU受累多算点。

80

帖子

26

主题

0

精华

专家

F 币
280 元
贡献
150 点
地板
 楼主| 发表于 2024-6-21 16:43:58 | 只看该作者
fcode 发表于 2024-6-19 10:13
让其中一个GPU受累多算点。

哈哈,想起来了chatgpt,下面是它的回答。

def divide_integer(n, k):
    # 计算基础值和余数
    q = n // k
    r = n % k
   
    # 初始化结果数组,每个元素为 q
    parts = [q] * k
   
    # 分配余数给前 r 个元素
    for i in range(r):
        parts += 1
   
    return parts

# 示例
n = 10
k = 3
result = divide_integer(n, k)
print(result)  # 输出: [4, 3, 3]

80

帖子

26

主题

0

精华

专家

F 币
280 元
贡献
150 点
5#
 楼主| 发表于 2024-6-21 16:51:42 | 只看该作者
li913 发表于 2024-6-19 09:44
没要求非得平均,近似平均就行。

是的,尽量做得平均,关键是每个GPU上要分配的数量是正整数。哈哈
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-22 05:32

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表