-
Notifications
You must be signed in to change notification settings - Fork 5.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
请问一下topk算子的sorted参数 #71019
Comments
如果之前本身就是用排序算法实现这里就不需要再乱序了,可以注意一下后续新硬件的文档描述,这里设置sorted参数是在做加强保证,相当于一种"make sure"。 这里存在差别的核心原因就是不同硬件对topk的实现方式不同。cpu上是调用的 |
另外,这段代码产生自对大规模topk的优化,见PR40941,这种优化可能不保证排序,所以又引入了这个参数,这也是为什么只会在这一小段有额外sort操作。新硬件实现的话也需要考虑下之后扩展的情况,建议适当注释一下以供后面扩展。 |
GPU未能保证排序的场景如下,条件为
value_1未保证排序输出,value_2已强制排序。 |
请提出你的问题 Please ask your question
文档中是这样写的:
https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/topk_cn.html
https://www.paddlepaddle.org.cn/documentation/docs/en/develop/api/paddle/topk_en.html
按照上面的说明,我理解是这样:不管这个参数传进来的是true还是false,内部一律当做true处理,即,返回的结果始终是有序的。
但是看代码实现,内部似乎根据sorted这个参数,进行了判断,并不是直接忽略这个参数。
![Image](https://private-user-images.githubusercontent.com/35131887/410271237-d36c5fef-1264-4b5f-929f-2e78cd5b1cc9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDUyOTEsIm5iZiI6MTczOTA0NDk5MSwicGF0aCI6Ii8zNTEzMTg4Ny80MTAyNzEyMzctZDM2YzVmZWYtMTI2NC00YjVmLTkyOWYtMmU3OGNkNWIxY2M5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDIwMDMxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE4Y2M4OGY1ODBmN2MxNjhiZmIzOTU1Zjc0OWZlNTYzMmEyMjY3NWUzZTQ3NTQzNzhlN2E1ODY3YmUwOTJiOTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.2_UwPtAkwIKZPX5SJFtQssMd7wHtluBtTQrTHNw8qu8)
https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/phi/kernels/gpu/top_k_kernel.cu
想问一下这个是符合预期的吗?
我之所以要问这个问题,背景是:我在实现某个硬件设备上的topk算子。当sorted参数为true的时候,语义很明确,排序之后输出即可。但是当sorted参数为false的时候,我应该如何输出呢?是可以仍然按照排序之后的输出,还是必须打乱顺序输出?直观上感觉是,不管是否sorted,都按照排序之后的输出即可。所以想确认一下。
The text was updated successfully, but these errors were encountered: