C++ 嵌入汇编程序提高计算效率

由于汇编语言比C++更接近硬件底层,所以在性能要求高的程序中往往可以采取在C++代码中嵌入汇编的方式来给程序提速。

在VC中可以简单的通过

__asm
{
//在这里添加汇编代码
}

来实现。下面通过一个非常简单的例子来看汇编交叉编译和直接的C++代码之间的性能差距,代码和运行结果如下:

#include <stdio.h>
#include "time.h"
#define NumberOfCalculation 10000000
void main()
{
	long gettime = clock();
	unsigned int i = NumberOfCalculation;
	unsigned int a1 = 1, b1 = 2;
	unsigned int a2 = 1, b2 = 2;
	while (i--)
	{
		//c
		a1 = a1 + b1;
		b1 = a1 + b1;
	}
	printf("a:%d b:%d\n", a1, b1);
	printf("普通c++程序花费时间%dms\n", clock() - gettime);
	i = NumberOfCalculation;
	gettime = clock();
	while (i--)
	{
		//汇编
		__asm
		{
			mov eax, a2;
			mov ebx, b2;
			add eax, ebx
			mov a2, eax;
			add ebx, eax
			mov b2, ebx;
		}
	}
	printf("a:%d b:%d\n", a2, b2);
	printf("汇编交叉编译程序花费时间%dms\n", clock() - gettime);
	getchar();
}

如果是复杂的程序中,则性能的差异将更加明显可见。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-28 22:06:26

C++ 嵌入汇编程序提高计算效率的相关文章

VS2012下X64平台嵌入汇编程序

VS2012在win32平台编译的时候可以很好的支持汇编语言的嵌入.建立一个控制台应用程序,选择空项目.项目建立好之后添加一个.cpp文件.在cpp文件中写入如下代码: [cpp] view plain copy print? #include <iostream> using namespace std; int  Add(int num1, int num2) { __asm { mov eax,num1 mov ecx,num2 add eax,ecx } } void main() {

如何提高分布式机器学习系统的执行效率?

翻译自http://weibo.com/p/1001603913581535062112,作者是CMU邢波教授的高徒. 目前有很多开源的分布式机器学习和深度学习系统,例如DMLC,Spark,MLlib,Petuum,parameter server,Caffe,Torch,Theano和TensorFlow等等.然而,如何在集群上高效的执行分布式机器学习过程呢? 这要从机器学习算法的特点说起,机器学习算法与排序或数据库查询等算法不同,它是基于爬山(hill-climbing)的算法,通过多个计

KEIL C51程序中如何嵌入汇编

模块内接口:使用如下标志符:#pragma asm汇编语句#pragma endasm注意:如果在c51程序中使用了汇编语言,注意在Keil编译器中需要激活Properties中的“Generate Assembler SRC File” 和“Assembler SRC File ”两个选项1.把"xx.c"加入工程中,右击"xx.c"选择“options for file"xx.c" 选择“Generate Assembler SRC File

什么阻碍了强人工智能的发展

版本:0.1 当今科学虽然非常发达了,但还是没能很好的理解和解释我们的世界.三个基本问题仍然困扰着我们:最小的是什么,最大的是什么和意识是什么.所谓最小,即最小的物质是什么.虽然我们证明了上帝粒子,快要证明各种粒子的统一和完备性了.但再往小了看呢,这些基本粒子又是什么组成的?这一层一层分析下去,是否有尽头?我们还要不断的了解更小粒子.逼近真理.所谓最大,我们可视的宇宙之外是什么?我们可视的宇宙之内,看不见的暗物质.暗能量是什么?是否有我们的世界和其完全没有作用力的黑物质和能量存在?最大和最小的问

Laxcus大数据管理系统2.0(8)- 第六章 网络通信

第六章 网络通信 Laxcus大数据管理系统网络建立在TCP/IP网络之上,从2.0版本开始,同时支持IPv4和IPv6两种网络地址.网络通信是Laxcus体系里最基础和重要的一环,为了能够利用有限的网络资源,获得最大化的使用效率,我们根据大数据网络环境的特点,设计了一套专属网络通信协议,以及在此协议基础上实现的多套网络通信方案,它们共同组成了Laxcus集群的网络通信基础.本章将以TCP/IP协议为起点,介绍与网络通信有关的各个组成部分. 6.1 FIXP协议 Laxcus采用FIXP协议通信

R语言调用C++

R语言跨界调用C++ R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器.随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长.现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言. 要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域.让我们

[转] iOS OpenGL ES Guide

OpenGL ES 小结 概述 OpenGL ES (Open Graphics Library for Embedded Systems)是访问类似 iPhone 和 iPad 的现代嵌入式系统的 2D 和 3D 图形加速硬件的标准. 把程序提供的几何数据转换为屏幕上的图像的过程叫做渲染. GPU 控制的缓存是高效渲染的关键.容纳几何数据的缓存定义了要渲染的点.线段和三角形. OpenGL ES 3D 的默认坐标系.顶点和矢量为几何数据的描述提供了数学基础. 渲染的结果通常保存在帧缓存中.有两

简介Kafka Stream

原创文章,转载请务必将下面这段话置于文章开头处.本文转发自技术世界,原文链接 http://www.jasongj.com/kafka/kafka_stream/ Kafka Stream背景 Kafka Stream是什么 Kafka Stream是Apache Kafka从0.10版本引入的一个新Feature.它是提供了对存储于Kafka内的数据进行流式处理和分析的功能. Kafka Stream的特点如下: Kafka Stream提供了一个非常简单而轻量的Library,它可以非常方便

AI繁荣下的隐忧——Google Tensorflow安全风险剖析

本文由云+社区发表 作者:[ Tencent Blade Team ] Cradmin 我们身处一个巨变的时代,各种新技术层出不穷,人工智能作为一个诞生于上世纪50年代的概念,近两年出现井喷式发展,得到各行各业的追捧,这背后来自于各种力量的推动,诸如深度学习算法的突破.硬件计算能力的提升.不断增长的大数据分析需求等.从2017年的迅猛发展,到2018年的持续火爆,国内外各个巨头公司如腾讯.阿里.百度.Google.微软.Facebook等均开始在人工智能领域投下重兵,毫无疑问,这一技术未来将会深