cuda - Cuda 高效矩阵加法
问题描述
我是 cuda 和学习 GPU 编程的新手。我想添加两个 nxm 矩阵(float* A 和 float* B)并将结果存储在内核中的 float* C 中。目标是获得最快的实施。我有以下问题:
我想知道如何排列块和网格以获得最佳性能(对于小型和大型 n 和 m)
最好为矩阵的每个元素分配一个线程。但是,对于较大的 n 和 m,这是不可能的。那么最好的选择是什么?
矩阵填充如何提高性能?
解决方案
1:一个简单的方法是将矩阵存储为一个向量/浮点数组,其中行被连接。然后,您可以只使用每个块的大量线程和最少的必要块数。这是一个内核看起来如何的示例。
2:你基本上可以拥有无限数量的线程,只要矩阵的大小不超过你 GPU 上的可用内存。它们不会同时执行,但驱动程序会为您安排它们,您不必关心它。
每个元素一个线程通常效果很好,如果您想尝试另一种方式,请查看Grid Stride Loops,这是一种可扩展的方法,可以在更少的线程中组织您的元素。
3:我看不出填充将如何提高性能,因为您需要复制和计算更多元素,但我不是这方面的专家。
推荐阅读
- javascript - 在 React Native 中使用 readAsStringAsync 将图像数组转换为 base64
- r - 用多列中的多个值替换多个字符?R
- angular - Angular Guards:防止手动访问 URL 但授权刷新
- java - Java中的计算器,显示错误的功能。网豆
- regex - Notepad++ 中的 RegEx 查找管道少于或多于 n 个的行
- python - 根据文件名填充 NaN
- laravel - 如何在基本构造函数中判断页面是否为 404?
- c# - “空白”通用类型参数 - 用例和解释
- c++ - 如何使用协程调试程序
- python - 递减或递增列表