php中输出每一层的平方数,打印本页 - 求复矩阵的每一个元素的模的平方
标题: 求复矩阵的每一个元素的模的平方
作者: LibAndLab 于 九月 07, 2018, 12:58:41 pm
假如有一个复矩阵H,大小为1024*2048,要求abs(H).^2,下面是我使用的代码,感觉没有问题但是就是计算结果不对,请各位指教N = 1024
circle = 2
tcol = 1024
size_t pitch;
cuComplex *d_trf;
cudaMallocPitch((void **)&d_trf, &pitch, sizeof(cuComplex)*N*circle, tcol)
pitch = pitch / sizeof(cuComplex);
__global__ void abs_Kernel(cuComplex *abs_trf, size_t pitch)
{
int tid = threadIdx.x;
int bidx = blockIdx.x;
int bidy = blockIdx.y;
abs_trf[tid * pitch + bidx * gridDim.y + bidy].x = \
abs_trf[tid * pitch + bidx * gridDim.y + bidy].x * \
abs_trf[tid * pitch + bidx * gridDim.y + bidy].x + \
abs_trf[tid * pitch + bidx * gridDim.y + bidy].y * \
abs_trf[tid * pitch + bidx * gridDim.y + bidy].y;
}
abs_Kernel << > >(d_trf, pitch);
标题:
作者: 屠戮人神 于 九月 10, 2018, 03:05:24 pm
Lib and Lab:
代码可能存在诸多方面的问题:
(1)正常人的访存写法是尽量连续合并的读写的。像是楼主这样的大跨步的跳跃式的读写(用threadIdx.x乘以一个大pitch),比较诡异。虽然这只是效率上的问题。但如果给出了错误的pitch值(例如你混淆了元素单位和字节单位),则可能出错或者kernel挂掉。因为并不知道这里Lib and Lab妹子你这样写的原因,所以请回头仔细检查一下。
(2)楼主你没有进行任何越界检查,虽然对于规整的形状(例如你这里的1024和2048元素,pitch往往总是等于行宽或者行元素数量),但可能会导致潜伏的BUG,并在形状变化的时候暴露。这里也建议进行检查。或者你可以直接使用cuda-memcheck 加上你的可执行文件的名字的方式, 进行快速检测。
(3)正常这种求平方计算不应当使用单独的kernel的,而应该集成在实际使用的kernel中(例如需要使用|A|^2的代码中,就地计算),单独开个kernel进行一次读取+一次写入来得到这个值,在目前你能找到的所有GPU卡中,都是不合算的。(这条对于只有1/32的double性能的卡, 在只使用double计算的情况下除外,但你不应该做这种卡上使用double的)。这条只是增强性建议。
请妹子仔细阅读,并进行实验和反馈。
PS: 大部分从matlab来的人都会弄错横向和纵向。
感谢来访。
标题:
作者: LibAndLab 于 九月 10, 2018, 07:22:35 pm
Lib and Lab:
代码可能存在诸多方面的问题:
在我将abs_Kernel << > >(d_trf, pitch);这个改为
abs_Kernel << > >(d_trf, pitch);之后结果就对了,不知道这是什么原因呢。还有就是我这里单独开一个核函数的原因是之前运行了cuFFT才得到的这个结果,所以只能分开写。我要那个样子访问其实是因为数据量起始会编程1024*1024*N,通俗的说我想把数据按照1024*1024这样的多个矩阵横着排在一起,所以我按照这个思维方式来做的,Pitch其实是我cudaMallocPitch得到的Pitch,如果我想要让这个核函数加速的话我应该怎么做呢,目前我测时间的话这个核函数需要大量的时间。
标题:
作者: LibAndLab 于 九月 10, 2018, 08:06:53 pm
Lib and Lab:
代码可能存在诸多方面的问题:
我的问题其实是这样的,要对1024*1024*N个复数数据进行FFT,然后再求模的平方,我的思路是将这1024*1024*N个数据横着排列,即1024*1024作为一个矩阵,然后这N个矩阵横着排列,即一共有1024行,1024*N列,而我用cuFFTplanmany这个API对每一列(一列1024个数据)做FFT,做完之后就开始求每一个数据的平方和,这时我把行数1024对应Threadx,列数N中1024对应BlockIdx.x,N对应BlockIdx.y,这样来索引每一个数据
标题:
作者: LibAndLab 于 九月 11, 2018, 10:01:56 am
Lib and Lab:
代码可能存在诸多方面的问题:
我又优化了一下程序,访问数据采用合并内存访问,之后平方采用访问shared memory方式,现在用时少了很多,但是我还不太清楚到底能到多少,就是这个标准该怎们计算,下面是我的程序
__global__ void abs_Kernel(cuComplex *abs_trf, size_t pitch)
{
int tid = threadIdx.x;//映射为一行里面的1024 这样才可以提高内存访问效率
int bidx = blockIdx.x;//映射为1024*circle里面的circle,即一行有circle个1024数据
int bidy = blockIdx.y;//映射为列里面的1024即一列1024个数据,或者是一共有1024行
__shared__ float trfx;
__shared__ float trfy;
trfx = abs_trf[bidy* pitch + bidx * gridDim.y + tid].x;
trfy = abs_trf[bidy*pitch + bidx * gridDim.y + tid].y;
abs_trf[bidy*pitch + bidx * gridDim.y + tid].x = trfx*trfx + trfy*trfy;
}
目前我的问题主要有四个:
1)为什么和函数调用的时候abs_Kernel << > >(d_trf, pitch);会不对,而abs_Kernel << > >(d_trf, pitch);就计算对了,我的显卡每个Block最大线程数是1024
2)我的程序还有什么可优化空间吗?目前对1024*10240的复矩阵每一列做cuFFT的时间为0.02,之后求平方和耗时为0.01,我目前能想到的是把相乘换成求平方的API,不知道可以不可以
3)对于cuFFT,一次性做和分开循环做即每次做1024个数据的cuFFT循环做10240次,耗时时间差别大吗?
4)有没有一个标准,来比较我这个处理时间目前的程度是怎样的?根据我目前的显卡的型号怎么能估算出一个标准
php中输出每一层的平方数,打印本页 - 求复矩阵的每一个元素的模的平方相关推荐
- C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。
)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出. [输入] 第一行包含一个整数n,表示数组的大小. 第二行包含n个整数,表示数组的元素,整数之间以一个 ...
- n个数中输出前m大的数
描述 n个数,要求输出其中的m个最大数 想法1 开辟辅助数组,用插入排序,将前m最大数插入到辅助数组中,时间复杂度O(n*m) 想法2 类似快速排序的想法,将前m大的数都聚到最左边,再进行一次排序输出 ...
- 四平方数和定理(leetcode 279 python)
四平方数定理:(theorem on the sum of foursquares)亦称拉格朗日四平方数和定理.四平方数和问题是著名的数论问题.由拉格朗日(La-grange, J.-L.)最终解决, ...
- c语言给定n个十六进制正整数,给定n个十六进制正整数,输出它们对应的八进制数。...
问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转 ...
- 7.11 C语言练习(厘米换算英尺英寸:在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。)
[练习] 题目要求:如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048.现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘 ...
- python平方数迭代器_对python中的高效迭代器函数详解
python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...
- html怎么显示平方,崔自信 的日志-在html页面中,通过div展示1-20的平方数和立方数...
数字 平方数 立方数 Title *{ padding: 0px; margin: 0px; } .d{ border: 1px solid red; width: 306px; height: ...
- C#刷遍Leetcode面试题系列连载(4): No.633 - 平方数之和
点击蓝字"dotNET匠人"关注我哟 加个"星标★",每日 7:15,好文必达! 前文传送门: 上篇文章中一道数学问题 - 自除数,今天我们接着分析 LeetC ...
- leetcode题解279-完全平方数
问题描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, -)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 给你一个整数 n ,返回和为 n 的完全平方数的 最少 ...
最新文章
- golang中的指针
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(一)
- 直播预告 | AAAI 2022论文解读:对称的语义感知的妆容迁移与移除网络
- Linux系统MySQL开启远程连接
- 观察者模式的应用场景
- Swift3.0中如何完成不同View Controller之间的切换
- Python FastApi:快速建立docker容器/挂载共享文件夹/导入导出
- 从分布式锁角度理解Java的synchronized关键字
- Java设计模式(2 / 23):观察者模式
- 信息学奥赛一本通 2059:【例3.11】买笔
- PHP版本李白打酒算法
- Superset集成到iframe 跨域 无需账号登录
- iOS ASI--文件下载
- vue播放flv格式视频
- 47、backtrader的一些基本概念---技术指标(indicator)的使用教程
- 前端读取mysql数据库_Servlet读取MySQL数据库并在前端调用
- JVM运行时内存结构学习
- (转)LiveUpdate 错误LU1814的解决方法之我见
- CSDN算法刷题地址
- 使用python爬取猫眼电影、房王、股吧论坛、百度翻译、有道翻译、高德天气、华夏基金、扇贝单词、糗事百科(股吧论坛)