Intel OneAPI黑客松记录

news2024/11/26 22:37:18

题目:

生成2048*2048个随机单精度实数;

实现两维Real to complex FFT参考代码;

使用OneMKL计算两维Real to complex FFT;

对两维FFT输出数据进行全数据比对;

平均性能数据比对,输出FFT参考代码平均运行时间和oneMKL FFT平均运行时间。

代码:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<fftw3.h>
#include<mkl.h>
#include"mkl_vsl.h"
#include"mkl_service.h"
#include"mkl_dfti.h"

int oneMKL_Plan(float *input,MKL_Complex8 *output,int N)
{
	int time;
	MKL_LONG sizeN[2]={N,N};
	MKL_LONG rs[3]={0,N,1};
    	MKL_LONG cs[3]={0,N/2+1,1};
	DFTI_DESCRIPTOR_HANDLE handle=NULL;
	DftiCreateDescriptor(&handle,DFTI_SINGLE,DFTI_REAL,2,sizeN);
	DftiSetValue(handle,DFTI_PLACEMENT,DFTI_NOT_INPLACE);
    	DftiSetValue(handle,DFTI_CONJUGATE_EVEN_STORAGE,DFTI_COMPLEX_COMPLEX);
    	DftiSetValue(handle,DFTI_INPUT_STRIDES,rs);
    	DftiSetValue(handle,DFTI_OUTPUT_STRIDES,cs);
	DftiCommitDescriptor(handle);
	clock_t start,end;
	start=clock();
	DftiComputeForward(handle,input,output);
	end=clock();
	printf(" Times==1\n");
	printf(" oneMKL use %f\n",(double)(end-start)/CLOCKS_PER_SEC);
	start=clock();
	for(time=0;time<1000;time++) DftiComputeForward(handle,input,output);
	end=clock();
	printf(" Times==1000\n");
	printf(" oneMKL use %f\n",(double)(end-start)/CLOCKS_PER_SEC);
	DftiFreeDescriptor(&handle);
	return 0;
}

int FFTW3_Plan(float *input,fftwf_complex *output,int N)
{
	int time;
	fftw_plan flag;
	clock_t start,end;
	flag=fftwf_plan_dft_r2c_2d(N,N,input,output,FFTW_MEASURE);
	start=clock();
	fftwf_execute(flag);
	end=clock();
	printf(" Times==1\n");
	printf(" FFTW3  use %f\n",(double)(end-start)/CLOCKS_PER_SEC);
	start=clock();
	for(time=0;time<1000;time++) fftwf_execute(flag);
	end=clock();
	printf(" Times==1000\n");
	printf(" FFTW3  use %f\n",(double)(end-start)/CLOCKS_PER_SEC);
	//fftwf_destory_plan(plan);
	return 0;
}

int main()
{
	static const int N=2048;
	float *input=(float *)malloc(sizeof(float)*N*N);
	VSLStreamStatePtr stream;
    	vslNewStream(&stream,VSL_BRNG_MT19937,1);
    	vsRngUniform(VSL_RNG_METHOD_UNIFORM_STD,stream,N*N,input,0.0f,1.0f);
//FFTW
	fftwf_complex *outputfftw=(fftwf_complex *)fftwf_malloc(sizeof(fftwf_complex)*N*(N/2+1));
	oneMKL_Plan(input,outputfftw,N);
//oneMKL
	MKL_Complex8 *outputmkl=(MKL_Complex8 *)malloc(sizeof(MKL_Complex8)*N*(N/2+1));
	FFTW3_Plan(input,outputmkl,N);

	float part_real,part_imag,flag;
	flag=0;
	for(int i=0;i<(N+2)/2*N;i++)
	{
		part_real=fabs(outputfftw[i][0]-outputmkl[i].real);
		part_imag=fabs(outputfftw[i][1]-outputmkl[i].imag);
		if(part_real>0.00001 || part_imag>0.000001) flag=1;
	}

	if(flag==0) printf(" Residual < 0.000001 , Match\n\n");
	else printf(" Residual < 0.000001 , Don't Match\n\n");

	free(input);
	free(outputmkl);
	fftwf_free(outputfftw);

	return 0;
}

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/978407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

12 - 多线程之锁优化(上):深入了解Synchronized同步锁的优化方法

在并发编程中&#xff0c;多个线程访问同一个共享资源时&#xff0c;我们必须考虑如何维护数据的原子性。在 JDK1.5 之前&#xff0c;Java 是依靠 Synchronized 关键字实现锁功能来做到这点的。Synchronized 是 JVM 实现的一种内置锁&#xff0c;锁的获取和释放是由 JVM 隐式实…

序列化二叉树

解题思路一&#xff1a; import java.util.*; /* public class TreeNode {int val 0;TreeNode left null;TreeNode right null;public TreeNode(int val) {this.val val;}} */ public class Solution {int index -1;String Serialize(TreeNode root) {StringBuffer resul…

Jenkins介绍

Jenkins介绍 持续集成、持续部署的工具很多&#xff0c;其中Jenkins是一个开源的持续集成平台。 Jenkins涉及到将编写完毕的代码发布到测试环境和生产环境的任务&#xff0c;并且还涉及到了构建项目等任务。 Jenkins需要大量的插件保证工作&#xff0c;安装成本较高&#xff0…

FreeRTOS源码分析-14 操作系统多任务核心

1 列表及列表项概念及其应用 1.1 freeRTOS列表介绍 任务调度列表介绍 其他组件列表介绍 1.2 列表及列表项的定义 双向链表结构 1&#xff1a;插入与删除效率高&#xff0c;只要操作一次就能完成 2&#xff1a;对数据的管理更加灵活与便捷&#xff0c;有利于编写逻辑清晰的…

MyBatisPlus入门篇2 - 条件查询、查询投影、查询条件、id生成策略、多记录操作、逻辑删除

目录 1.条件查询、多条件查询 MyBatisPlus将书写复杂的SQL查询条件进行了封装&#xff0c;使用编程的形式完成查询条件的组合。 Test void testGetByCondition() {// 方式一&#xff1a;按条件查询QueryWrapper<User> qw new QueryWrapper<User>();qw.lt("…

解决虚拟机克隆后IP和命名冲突问题

目录 解决IP冲突问题 解决命名冲突 解决IP冲突问题 克隆后的虚拟机和硬件地址和ip和我们原虚拟机的相同&#xff0c;我们需要重新生成硬件地址和定义ip&#xff0c;步骤如下&#xff1a; &#xff08;1&#xff09;进入 /etc/sysconfig/network-scripts/ifcfg-ens33 配置文件…

【MySQL】7、MHA高可用配置及故障切换

MHA概述 MHA&#xff08;Master High Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA用来解决MySQL单点故障问题&#xff1b; MySQL故障切换过程中&#xff0c;能30秒内自动完成故障切换&#xff0c;并保证数据的一致性&#xff0c;实…

远程工作面试:特殊情况下的面试技巧

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Python批处理(一)提取txt中数据存入excel

Python批处理&#xff08;一&#xff09;提取txt中数据存入excel 问题描述 现从冠层分析软件中保存了叶面积指数分析的结果&#xff0c;然而软件保存格式为txt&#xff0c;且在不同的文件夹中&#xff0c;每个文件夹的txt文件数量不固定&#xff0c;但是txt文件格式固定。现需…

Java多线程父线程向子线程传值解决方案

目录 1 背景2 ThreadLocalTaskDecorator3 RequestContextHolderTaskDecorator4 MDCTaskDecorator5 InheritableThreadLocal5.1 源码分析5.2 InheritableThreadLocal存在的问题 6 TransmittableThreadLocal 1 背景 在实际开发过程中我们需要父子之间传递一些数据&#xff0c;比…

zemax非序列文件转为序列文件

打开系统内部的一个参考案例&#xff1a; 添加一个新面在最前面&#xff0c;设置为孔径光阑&#xff1a; 转换&#xff1a; 此时的3D外形图&#xff1a; 删去不必要的&#xff0c;保留透镜&#xff1a; 加入椭圆光源&#xff1a; 插入探测器&#xff1a; 执行光线追迹&#xff…

day 47 | ● 392.判断子序列 ● 115.不同的子序列

392.判断子序列 如果用dp判断true or false无法满足&#xff0c;所以dp用来表示以下标i-1为结尾的字符串s&#xff0c;和以下标j-1为结尾的字符串t&#xff0c;相同子序列的长度 func isSubsequence(s string, t string) bool {dp : make([][]int, len(s) 1)for i : 0; i &…

用户端APP自动化测试_L2

目录&#xff1a; appium server 环境安装capability 进阶用法元素定位工具高级定位技巧-xpath 定位高级定位技巧-css 定位与原生定位特殊控件 toast 识别显式等待高级使用高级控件交互方法设备交互api模拟器控制雪球财经app股票详情功能点自动化测试实战 1.appium server 环…

Web自动化测试进阶 —— Selenium模拟鼠标操作

鼠标操作事件 在实际的web产品测试中&#xff0c;对于鼠标的操作&#xff0c;不单单只有click()&#xff0c;有时候还要用到右击、双击、拖动等操作&#xff0c;这些操作包含在ActionChains类中。 ActionChains类中鼠标操作常用方法&#xff1a; 首先导入ActionChains类&…

typecho 反序列化漏洞复现

环境搭建 下载typecho14.10.10 https://github.com/typecho/typecho/tags 安装&#xff0c;这里需要安装数据库 PHPINFO POC.php <?php class Typecho_Feed { const RSS1 RSS 1.0; const RSS2 RSS 2.0; const ATOM1 ATOM 1.0; const DATE_RFC822 r; const DATE_W3…

企业宣传片和传统纸媒相关优劣

在当今数字化时代&#xff0c;传统纸媒和宣传片成为了企业和组织宣传推广的两种主要方式。然而&#xff0c;面对有限的资源和日益竞争的市场环境&#xff0c;我们需要仔细权衡选择哪种方式更加适合。接下来由深圳企业宣传片制作公司老友记小编从以下几个方面浅析一下它们的优势…

易语言特征码的应用

一、本章概要 注&#xff1a;搜特征码一定要从代码段的开始搜索&#xff0c;防止别人加了壳之后你不知道怎么搞&#xff0c;然后ctrlb把特征码&#xff08;比如ff55fc5f5e&#xff09;粘贴进去 搜到test edx,3往上面看有没有上面三句&#xff0c;有就是易语言的特征码 按钮事…

档案数字化加工扫描软件的作用有哪些方面?

档案数字化加工扫描软件是在技术进步和需求驱动的双重作用下产生的&#xff0c;以满足纸质档案转化为数字形式、数字化档案管理和利用的需求&#xff0c;它们不断演进和改进&#xff0c;并推动着档案工作的现代化和数字化发展。 档案数字化加工扫描软件的作用有哪些方面&#x…

算法笔记:哈夫曼树、哈夫曼编码

1 字符的机内表示 2 前缀编码 字符只放在叶结点中字符编码可以有不同的长度由于字符只放在叶结点中&#xff0c;所以每个字符的编码都不可能是其他字符编码的前缀前缀编码可被惟一解码 3 哈夫曼树 哈夫曼树是一棵最小代价的二叉树&#xff0c;在这棵树上&#xff0c;所有的字…

计算机网络的故事——确保Web安全的Https

确保Web安全的Https 文章目录 确保Web安全的Https一、HTTP 的缺点二、HTTP 加密 认证 完整性保护 HTTPS 一、HTTP 的缺点 1、明文传输 通信加密&#xff0c;HTTP协议中没有加密机制&#xff0c;但是可以通过SSL(Secure Socket Layer&#xff0c;安全套接字层)或TLE(Transpor…