并行程序设计这门课程的课程实验要求我分别使用串行, 并行+分块算法, 并行+分块+SSE指令集加速, CUDA等四种方法来计算矩阵乘法.

还真别说收获蛮大的.

我的配置是i5 3470+GTX660Ti

下面的表格是各种算法下的情况.

矩阵规模 串行 多线程+分块 多线程+分块+SSE CUDA
512 572.2(ms) 169.7(ms) 21.8(ms) 351.5(ms)
1024 11295.9(ms) 1367.1(ms) 134.5(ms) 395.5(ms)
2048 142193.0(ms) 10445.7(ms) 1118.3(ms) 1051.4(ms)
4096 1213014.6(ms) 81608.3(ms) 8737.2(ms) 6197.3(ms)

从图中明显可以看出, 这个分块之后cache利用效率大大提高,本来如果普通多线程相对于串行来说不过 4倍,但是这里速度达到了10倍多. 也就是说CPU Cache的合理利用非常有用.

SSE的加速效果就非常厉害了, 相对于分块又提高了10倍的速度.不过 SSE的浮点数运算准确度好低啊!!!!! 误差超级大. 但是矩阵的每个点误差又只有1点几. 但是每个点都有1点几, 结果矩阵的所有点的误差之和就看起来简直不堪入目.

CUDA的效果简直非常拔群. 而且时间还包括了传输数据到显卡的时间.

哦,说些闲话.

CUDA的设备变量的地址是分配在操作系统的kernel层的,直接访问会导致memory access violate错误.

比如

     Matrix A{ int w;int h; float *d;};Matrix * A;cudaMalloc((void**)&A,sizeof(Matrix));A->w = 16;   //这里会出错.!!!

还有,在运行CUDA程序时, Win 8 会有显卡超时设置,如果你的CUDA程序时间运行太久,显卡会失去响应,然后windows就自动对显卡重置. 你的屏幕右下角会出现说,显卡驱动已停止响应,自动恢复的错误. 你的CUDA程序会返回编号为30的UnkownError类型.

需要在注册表里 设置 关闭windows TDR 或者加长延时上限.

具体参考

http://stackoverflow.com/questions/13177214/disabling-tdr-for-cuda-in-windows-8

http://msdn.microsoft.com/en-us/Library/Windows/Hardware/ff569918(v=vs.85).aspx

代码地址 http://files.cnblogs.com/tlm1992/matrix_product.zip

转载于:https://www.cnblogs.com/tlm1992/p/3650214.html

使用各种方法加速大型矩阵运算的效率对比相关推荐

  1. java 数组效率_java数组复制的四种方法效率对比

    有关数组的基础知识,有很多方面,比方说初始化,引用,遍历,以及一维数组和二维数组,今天我们先看看数组复制的有关内容. 来源于牛客网的一道选择题: JAVA语言的下面几种数组复制方法中,哪个效率最高? ...

  2. 借鉴丰田方法对大型软件组织进行敏捷改造 (上)

    借鉴丰田方法对大型软件组织进行敏捷改造 (上) 本文以 ThoughtWorks 中国公司与 某大型 电 信 设备 提供商 合作的 咨询项目 案例 为 背景 , 介 绍 如何采用丰田倡 导 的精益生 ...

  3. php遍历数组哪个效率高,PHP遍历数组的三种方法及效率对比分析

    PHP遍历数组的三种方法及效率对比分析 发布于 2015-03-04 21:55:27 | 129 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...

  4. 数组常见的遍历循环方法、数组的循环遍历的效率对比

    1 遍历数组的方法 1-1.for / while 最普通的循环 效率最高 兼容ie6 tips:for循环更适用于循环的开始和结束已知,循环次数固定的场合:while循环更适合于条件不确定的场合 1 ...

  5. python最快的循环方法_【转】【Python效率】五种Pandas循环方法效率对比

    [Python效率]五种Pandas循环方法效率对比 - 文兄的文章 - 知乎 https://zhuanlan.zhihu.com/p/80880493 正文: 如果你使用过Python及Panda ...

  6. 循环下标_【转】【Python效率】五种Pandas循环方法效率对比

    [Python效率]五种Pandas循环方法效率对比 - 文兄的文章 - 知乎 https://zhuanlan.zhihu.com/p/80880493 正文: 如果你使用过Python及Panda ...

  7. mybatis批量更新数据三种方法效率对比

    探讨批量更新数据三种写法的效率问题. 实现方式有三种, 1> 用for循环通过循环传过来的参数集合,循环出N条sql,需要在db链接url后面带一个参数  &allowMultiQuer ...

  8. Python读取图像方法及效率对比

    最近的工作中遇到了大量的图像读取(图片->array)的操作,如果每次读取的效率都快一些的话,便可以大量节约数据处理方面所耗费的时间.下面主要介绍在Python中经常使用的图像转array的方法 ...

  9. php遍历数组哪个效率高,PHP遍历数组的三种方法及效率对比分析_php技巧

    本文实例分析了PHP遍历数组的三种方法及效率对比.分享给大家供大家参考.具体分析如下: 今天有个朋友问我一个问题php遍历数组的方法,告诉她了几个.顺便写个文章总结下,如果总结不全还请朋友们指出 第一 ...

最新文章

  1. django-admin 设计User外键,设计model
  2. 10个强大的Javascript表单验证插件推荐
  3. Python3 实现用户登陆,输入三次密码
  4. setup.s 解读——Linux-0.11 剖析笔记(三)
  5. linux可以打开浏览器嘛,Linux下怎样可以打开浏览器
  6. vue项目中遇到的一些问题
  7. java中的10的算法,Java中10个常用的排序算法
  8. A10 平板开发一硬件平台搭建
  9. 12个职场信条让你的工作不可替代
  10. 自定义VB程序加密方案
  11. VSCode Latex Workshop 设置 XeLatex 编译
  12. 搭建Vgg16训练CIFAR10数据集
  13. 基于STM32的简易交通灯设计
  14. 计算机网络工具软件包括,计算机网络常用工具软件
  15. win7桌面运行html,Win7桌面ie浏览器图标无法打开的原因及解决方法
  16. 手游服务器技术的选择
  17. linux中audit服务,linux下的audit服务
  18. template和template
  19. Java常用技巧和常见错误扫雷
  20. 2021年电工(初级)考试题及电工(初级)最新解析

热门文章

  1. 一个对象的属性_【前端冷知识】如何判断一个对象的某个属性是可写的?
  2. python知识:@classmethod和@staticmethod的异同
  3. dhcp服务器由谁维护,DHCP服务器管理维护的心得
  4. java 中文怎么截取,java String 中文 字符串 截取
  5. c 获取char*的长度_最大的 String 字符长度是多少?
  6. 2021-04-28 Python可视化图表生成-Matplotlib绘图
  7. 微软 python_微软推出 Pylance,改善 VS Code 中的 Python 体验
  8. HAAR、LBP分类器训练
  9. ubuntu13.10上交叉编译win32运行的vlc2.0.3总结
  10. 事务457——事务的七个传播行为