Skip to content
This repository has been archived by the owner on Jan 24, 2024. It is now read-only.

op unittest for sort & enhance test helper #1411

Merged
merged 18 commits into from
May 24, 2023

Conversation

zzk0
Copy link
Contributor

@zzk0 zzk0 commented May 11, 2023

描述

From #1378

这个 PR 给 sort 添加了单元测试,修复部分问题,一共有 36 个测试用例, CPU 运行时间 30s,GPU 运行时间 83s。此外,在 test helper 中添加了函数,提供 run_test 接口运行 OpTest 子类。

需要注意的是,sort op 存在三个问题:

  • 正确性问题,出现重复元素的情况可能会出错,比如 [1, 1, 1, 2, 2, 2, 3, 3, 3] 这样的数组。
  • 性能问题,CUDA kernel 只使用了一个 block,几乎是单线程模式。(后续应该替换成 external calll with CUB & thrust 的方式来实现)
  • 内存问题,在输入数组的大小大于 32K/64K 的情况下,kernel 中的 temp buffer 将会超过 stack size,抛出 CUDA ERROR。此外,该计算过程分配过多内存,输入数组越大,中间将占用越多显存。

目前的 PR 对正确性问题进行了临时修复,未对性能问题、内存问题做修复。

算子类型

  • ElementWise:输入张量索引和输出张量索引之间存在一对一的对应关系
  • Broadcast:输入张量索引和输出张量索引之间存在一对多的对应关系
  • Injective:单射算子,可以将一个输出 axis 映射到一个输入 axis
  • Reduction:输入张量索引和输出张量索引之间存在多对一的对应关系
  • OutFusible:复杂算子,仍然可以将一对一的算子融合到其输出中。
  • kNonFusible:无法融合的算子

Test Cases Checklist

张量维度

  • 1D 张量
  • 2D 张量
  • 3D 张量
  • 4D 张量

special shape

挑选 2D/3D/4D 张量中的一个,测试下面的特殊情况。

  • 其中一个维度为 1
  • 其中一个维度小于 1024
  • 其中一个维度大于 1024
  • 向量的所有维度都是 1

张量数据类型

  • int32
  • int64
  • float16
  • float32
  • float64

###广播

  • 这个算子是否支持广播?
  • 广播的测试样例

算子属性

  • axis: 对 4D Tensor 每一维度进行了测试
  • descending: 验证了 4D Tensor 每一维度上 descending 为 True or False 的正确性

@paddle-bot
Copy link

paddle-bot bot commented May 11, 2023

Thanks for your contribution!

@zzk0

This comment was marked as outdated.

python/tests/ops/test_sort_op.py Show resolved Hide resolved
cinn/runtime/cuda/cinn_cuda_runtime_source.cuh Outdated Show resolved Hide resolved
cinn/hlir/op/contrib/sort.cc Show resolved Hide resolved
@luotao1 luotao1 added the HappyOpenSource 快乐开源活动issue与PR label May 17, 2023
@zzk0 zzk0 requested a review from thisjiang May 23, 2023 01:01
@zzk0 zzk0 requested a review from thisjiang May 23, 2023 03:31
Copy link
Collaborator

@thisjiang thisjiang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@thisjiang thisjiang merged commit 500ff05 into PaddlePaddle:develop May 24, 2023
jiahy0825 pushed a commit to jiahy0825/CINN that referenced this pull request May 25, 2023
* fix typo select unittest

* op unittest for sort

* op unittest for sort

* enhance TestCaseHelper & add special case for sort op

* fix sort bug for duplicate element

* fix index typo

* refine hard code testcase

* reduce array size to avoid large cuda memory occupation

* add not passed test case

* reduce array size again

* fix magic number

* remove headers

* remove cpp style code from .cuh
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants