标题: 求复矩阵的每一个元素的模的平方

作者: 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中输出每一层的平方数,打印本页 - 求复矩阵的每一个元素的模的平方相关推荐

  1. C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。

    )输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出. [输入] 第一行包含一个整数n,表示数组的大小. 第二行包含n个整数,表示数组的元素,整数之间以一个 ...

  2. n个数中输出前m大的数

    描述 n个数,要求输出其中的m个最大数 想法1 开辟辅助数组,用插入排序,将前m最大数插入到辅助数组中,时间复杂度O(n*m) 想法2 类似快速排序的想法,将前m大的数都聚到最左边,再进行一次排序输出 ...

  3. 四平方数和定理(leetcode 279 python)

    四平方数定理:(theorem on the sum of foursquares)亦称拉格朗日四平方数和定理.四平方数和问题是著名的数论问题.由拉格朗日(La-grange, J.-L.)最终解决, ...

  4. c语言给定n个十六进制正整数,给定n个十六进制正整数,输出它们对应的八进制数。...

    问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转 ...

  5. 7.11 C语言练习(厘米换算英尺英寸:在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。)

    [练习] 题目要求:如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048.现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘 ...

  6. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  7. html怎么显示平方,崔自信 的日志-在html页面中,通过div展示1-20的平方数和立方数...

    数字  平方数  立方数 Title *{ padding: 0px; margin: 0px; } .d{ border: 1px solid red; width: 306px; height: ...

  8. C#刷遍Leetcode面试题系列连载(4): No.633 - 平方数之和

    点击蓝字"dotNET匠人"关注我哟 加个"星标★",每日 7:15,好文必达! 前文传送门: 上篇文章中一道数学问题 - 自除数,今天我们接着分析 LeetC ...

  9. leetcode题解279-完全平方数

    问题描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, -)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 给你一个整数 n ,返回和为 n 的完全平方数的 最少 ...

最新文章

  1. golang中的指针
  2. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(一)
  3. 直播预告 | AAAI 2022论文解读:对称的语义感知的妆容迁移与移除网络
  4. Linux系统MySQL开启远程连接
  5. 观察者模式的应用场景
  6. Swift3.0中如何完成不同View Controller之间的切换
  7. Python FastApi:快速建立docker容器/挂载共享文件夹/导入导出
  8. 从分布式锁角度理解Java的synchronized关键字
  9. Java设计模式(2 / 23):观察者模式
  10. 信息学奥赛一本通 2059:【例3.11】买笔
  11. PHP版本李白打酒算法
  12. Superset集成到iframe 跨域 无需账号登录
  13. iOS ASI--文件下载
  14. vue播放flv格式视频
  15. 47、backtrader的一些基本概念---技术指标(indicator)的使用教程
  16. 前端读取mysql数据库_Servlet读取MySQL数据库并在前端调用
  17. JVM运行时内存结构学习
  18. (转)LiveUpdate 错误LU1814的解决方法之我见
  19. CSDN算法刷题地址
  20. 使用python爬取猫眼电影、房王、股吧论坛、百度翻译、有道翻译、高德天气、华夏基金、扇贝单词、糗事百科(股吧论坛)

热门文章

  1. CleanMyMac X2023Mac电脑系统清理内存教程
  2. Python+Vue计算机毕业设计影楼管理系统tym07(源码+程序+LW+部署)
  3. SSTI-payload和各种绕过方法
  4. kali开启两张网卡的配置
  5. STM8L051 GPIO PC0 PC1无法上拉的问题
  6. 角蜂鸟AI视觉套件:(四)ROS下订阅并处理图像
  7. php获取商品订单号,php根据订单号 跟踪物流
  8. shell ss命令
  9. 自定义组件开发五 阴影、 渐变和位图运算
  10. redis - shard