摘要:
1. 介绍: (1) 用CUDA计算 pow(sin(id),2)+ pow(cos(id),2)的结果 (2) 对比单流(同步传输、异步传输)、多流深度优先调度、多流广度优先调度的效率(包含数据传输和计算) 核心代码 1. 用CUDA计算 pow(sin(id),2)+ pow(cos(id),2 阅读全文
摘要:
1. 目标:对 16384*16384 规模的矩阵进行加法运算,对比 CPU 和 GPU 计算的效率,还有不同线程块大小规模下对效率的影响;并做可能的优化测试。 2. 核心代码 /* 用GPU对二维矩阵做加法,分析不同线程块规模下的性能变化 */ #include <stdio.h> #includ 阅读全文
摘要:
1. 目标:使用CPU和GPU对一千万数量级的一维信号进行均值滤波,并且根据GPU存储模型对数据存储进行优化,最终对比计算结果并计算加速比。 2. 代码 /* cuda实现对一维信号卷积平滑滤波处理,并于串行计算对比结果和加速比,卷积核大小为5 */ #include <stdio.h> #incl 阅读全文
摘要:
1. GPU的内存模型 GPU编程数据需要从CPU主存拷贝到GPU全局存储器,所有线程共享全局存储。开辟的全局存储器空间指针在CPU代码中不能解引用使用,应在计算完结果后再拷贝回CPU主存空间。线程块内共享存储。 (1) 线程私有的存储有寄存器、本地内存 (2) 线程块内有块内线程共享的共享内存,在 阅读全文
摘要:
1. 简介 (1) Intel® Integrated Performance Primitives,即英特尔集成性能基元(简称IPP),为信号、数据和图像处理特定应用领域,提供simd优化的一组全面的函数库。 (2) 本项目将对 exp、cos、sin、tone、Triangle函数用NEON向量 阅读全文
摘要:
1. 源码为对粒子移动状态模拟的项目。要求使用多种优化方法,对比串行优化、多线程优化、全部优化下的加速比。 2. 代码 项目代码地址:https://github.com/libo-0379/StellarSim_Optimize 以下为核心优化代码及分析 #include <stdlib.h> # 阅读全文
摘要:
1. 目标:使用 NEON intrinsic 函数,对512*512 png 四通道图像顺时针旋转90度。 思路: 像素分块,对块内转置;再水平镜像。图像库使用 stb img 2. 代码 #include <stdio.h> #include <arm_neon.h> #include <std 阅读全文
摘要:
1. 对寄存器数据重排 /* 两个向量,每两个通道一组,第一个向量每组的后一个元素与第二个向量每组的第一个元素一次彼此交换 */ #include <stdio.h> #include <arm_neon.h> void main() { int arrc[8]={0}; int arrd[4]={ 阅读全文
摘要:
1. 目标:矩阵向量乘法 y = A * x (列向量 = 矩阵 *列向量),进行串行,循环展开+simd, simd+omp的效率对比。 2. 源码 #include <iostream> #include <ctime> #include <arm_neon.h> #include <omp.h 阅读全文
摘要:
1. 这是一个对图像通道 bgra 转换为 rgb的示例程序。转换方式有普通写法、openmp-simd编译指导语句、neon intrinsic函数三种实现方式 2. 源码 #include <stdio.h> #include <stdlib.h> #include <iostream> #in 阅读全文
摘要:
1. 目标 对数组求和,对比ARM(neon)向量化优化(SIMD)和循环展开,还有 O0 O1优化的效率对比。 2. 测试代码 #include <arm_neon.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #defin 阅读全文
摘要:
1. 目标:分析循环分块优化技术,并分析cache 命中情况 假设每个cacheline可以存储b个数据元素。 2. 源代码分析 for( int i=0;i<N;i++) { for(int j=0;j<M;j++) { A[i] += B[j]; } } cache miss分析: 对A总访问次 阅读全文
摘要:
1. 目标:使用openmp实现图像滤波算法 给定一个输入图像,你的任务是将其划分为多个块,并使用多个进程对每个块进行滤波操作。 要求: 1、使用分段并行结构和指令section来并行执行不同的计算步骤。 2、使用单线程指令single或master确保某些代码段只在单个线程中执行。 3、使用线程同 阅读全文
摘要:
1. 目标:探究嵌套循环 for 和 collapse 编程 2. 内容 (1). for 并行区默认对最近外层的循环控制变量私有,并对其划分并行,不必指明 private,内层循环体入口的循环控制变量声明及或定义[ for (int i=0;)]默认私有;如果在并行区外声明或定义的内层循环控制变量 阅读全文
摘要:
1. 目标 设计一个程序,使用OpenMP并行化实现矩阵乘法。给定两个矩阵 A 和 B,矩阵大小均为1024*1024,你的任务是计算它们的乘积 C。 要求: (1)、使用循环结构体的知识点,包括for循环体并行化、变量规约属性与子句reduction、循环调度策略与子句schedule以及嵌套循环 阅读全文
摘要:
1. 背景介绍 L1 L2 cache是单核独享,L3是多核共享。如果多线程访问共享一维数组的连续元素,先读入第一个线程的L1 缓存中,其他线程访问缓存不命中需要加载,并且数据的更改后,标记为脏数据,其他线程访问cacheline中相邻地址需要先写回内存,再读入目标L1 cache,效率低。使用三份 阅读全文
摘要:
1. 目标: 矩阵A(MK) 矩阵B(KN)相乘,计算结果 C(M*N);本测试将使用不同的数据分块方式、MPI通信接口、数据循环模型,测试通信及计算效率,计算耗时为程序用户态和核心态的占用cpu时间之和。 问题1: 如何对数据分块,初始化本进程数据。有以下两种模型 模型一. 一维分块,对A行分块, 阅读全文
摘要:
#include <stdio.h> #include <mpi.h> #include <unistd.h> #include <stdlib.h> #define S 4 //分块方阵的大小 #define RB 8 //行方向分块维数 #define B RB*RB //并行进程数 #defi 阅读全文
摘要:
源代码 /* 问题:用蒙特卡洛算法估计π的值。在边长为r的正方形中画内切圆, 随机N个点,用圆内的点占正方形内所有点数量的比例估计圆的面积, 计算估计的π的值。 */ #include <stdio.h> #include <time.h> #include <math.h> #include <m 阅读全文
摘要:
雅可比算法原理:如下图对方阵非边界元素求上下左右元素的均值,全部计算元素的数值计算完成后更新矩阵,进行下一次迭代。 测试目标:用MPI实现对8*8方阵雅可比算法迭代并行计算,用重复非阻塞的通信方式 #include <stdio.h> #include <mpi.h> #include <unist 阅读全文