当前位置: 首页 > news >正文

网站大图分辨率做多大seo是哪个英文的简写

网站大图分辨率做多大,seo是哪个英文的简写,网站的seo 如何优化,用邮箱做网站端午假期安装好了vs c2022,并写了个简单的汇编代码,证明MASM真的可以运行。今天需要搞一个实实在在的C和ASM混合编程的例子,因为用纯汇编的求伯君写WPS的时代一去不复返了。个别关键函数用汇编,充分发挥CPU的特色功能,偶尔还是需要…

端午假期安装好了vs c++2022,并写了个简单的汇编代码,证明MASM真的可以运行。今天需要搞一个实实在在的C++和ASM混合编程的例子,因为用纯汇编的求伯君写WPS的时代一去不复返了。个别关键函数用汇编,充分发挥CPU的特色功能,偶尔还是需要的。

昨天找的随书代码的位置在github上:GitHub - Apress/modern-x86-assembly-language-programming-3e: Source Code for 'Modern X86 Assembly Language Programming' by Daniel Kusswurm

这是第三版,最新的书。又从z-liabrary上下载了这本英文书,导入微信读书,自动翻译为中文,z-libary加微信读书,使我实现了读书ziyou(啥时候财务ziyou,还远)。

这本书的附录A就举了怎样在vs2022环境建立一个C++加ASM的例子,今天咱们就逐步跟着书上学这个例子。

首先创建project

• Create a C++ project• Enable MASM support• Add an assembly language file• Set project properties•Edit the source code• Build and run the project

  1. 启动VS
  2. New Project
  3. Select Console App
  4. Project name:Example1
  5. Solution name:TestSolution
  6. Create
  7. Build>Configuration Manager,choose <Edit...>
  8. select X86, Remove--我的环境是Win32

其次,配置ASM环境的步骤

  1. View>Solution Explorer
  2. rigtht-click Example1 and select Build Denpendencies>Build Customizations
  3. check masm
  4. Add New Item
  5. select .cpp for the file style
  6. Example1_fasm.asm Add

第三步是设置project属性

  1. Example1  and select Properties
  2. All Configurations   All Platforms
  3. C/C++>Code Generation Set to Advanced Vector Extentions(/arch:AVX) or AVX2 or AVX512
  4. C/C++>Output change to Files Assembly Machine and Source Code(/FAcs)
  5. Microsoft Macro Assembler>Listing File  Enable Assembly Generated Code Listing to Yes(/Sg)
  6. Change the Assembled Code Listing File text filed to $(IntDir)\%(filename).lst
  7. Click OK

$(IntDir)\%(filename).lst  --这是1还是L?

最后一步就是写源码了

  1. AppendixA\TestSolution\Example1\Example1.cpp
  2. AppendixA\TestSolution\Example1\Example1_fasm.asm

Example1.cpp

#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>extern "C" void CalcZ_avx(float* z, const float* x, const float* y, size_t n);static void CalcZ_cpp(float* z, const float* x, const float* y, size_t n)
{for (size_t i = 0; i < n; i++)z[i] = x[i] + y[i];
}int main(void)
{constexpr size_t n = 20;float x[n], y[n], z1[n], z2[n];// Initialize the data arraysfor (size_t i = 0; i < n; i++){x[i] = i * 10.0f + 10.0f;y[i] = i * 1000.0f + 1000.0f;z1[i] = z2[i] = 0.0f;}// Exercise the calculating functionsCalcZ_cpp(z1, x, y, n);CalcZ_avx(z2, x, y, n);// Display the resultsconstexpr char nl = '\n';constexpr size_t w = 10;constexpr float eps = 1.0e-6f;std::cout << std::fixed << std::setprecision(1);std::cout << std::setw(w) << "i";std::cout << std::setw(w) << "x";std::cout << std::setw(w) << "y";std::cout << std::setw(w) << "z1";std::cout << std::setw(w) << "z2" << nl;std::cout << std::string(50, '-') << nl;for (size_t i = 0; i < n; i++){std::cout << std::setw(w) << i;std::cout << std::setw(w) << x[i];std::cout << std::setw(w) << y[i];std::cout << std::setw(w) << z1[i];std::cout << std::setw(w) << z2[i] << nl;if (fabs(z1[i] - z2[i]) > eps){std::cout << "Compare error!\n";break;}}}

Example1_fasm.asm

;------------------------------------------------------------------------------
; Example1_fasm.asm
;------------------------------------------------------------------------------;------------------------------------------------------------------------------
; void CalcZ_avx(float* z, const float* x, const float* x, size_t n);
;------------------------------------------------------------------------------NSE     equ 8                                   ;num_simd_elements
SF      equ 4                                   ;scale factor for F32.code
CalcZ_avx proc; Validate argumentstest r9,r9                              ;n == 0?jz Done                                 ;jump if yes; Initializemov rax,-SF                             ;rax = array offset (Loop2)cmp r9,NSE                              ;n < NSE?jb Loop2                                ;jump if yesmov rax,-NSE*SF                         ;rax = array offset (Loop1); Calculate z[i:i+7] = x[i:i+7] + y[i:i+7]
Loop1:  add rax,NSE*SF                          ;update array offsetvmovups ymm0,ymmword ptr [rdx+rax]      ;ymm0 = x[i:i+7]vmovups ymm1,ymmword ptr [r8+rax]       ;ymm1 = y[i:i+7]vaddps ymm2,ymm0,ymm1                   ;z[i:i+7] = x[i:i+7] + y[i:i+7]vmovups ymmword ptr [rcx+rax],ymm2      ;save z[i:i+7]sub r9,NSE                              ;n -= NSEcmp r9,NSE                              ;n >= NSE?jae Loop1                               ;jump if yestest r9,r9                              ;n == 0?jz Done                                 ;jump if yesadd rax,NSE*SF-SF                       ;adjust array offset for Loop2; Calculate z[i] = x[i] + y[i] for remaining elements
Loop2:  add rax,SF                              ;update array offsetvmovss xmm0,real4 ptr [rdx+rax]         ;xmm0 = x[i]vmovss xmm1,real4 ptr [r8+rax]          ;xmm1 = y[i]vaddss xmm2,xmm0,xmm1                   ;z[i] = x[i] + y[i]vmovss real4 ptr [rcx+rax],xmm2         ;save z[i]sub r9,1                                ;n -= 1jnz Loop2                               ;repeat until doneDone:   vzeroupperret                                     ;return to caller
CalcZ_avx endpend

最终构建运行即可

代码有点高大上,估计是用了AVX,两个loop同时运行。慢慢看书了解含义吧,还挺复杂的。

这个例子太高深了,再举个简单的例子,把数组倒序输出。

http://www.mmbaike.com/news/49861.html

相关文章:

  • 怎样做像绿色和平组织类似的网站业务推广方案怎么写
  • 无忧网站建设多少钱做网站公司
  • 制作营销网站北京做的好的seo公司
  • 站内优化包括哪些十大放黄不登录不收费
  • 有没有帮别人做创意的网站网页优化最为重要的内容是
  • 包头哪里做网站win7优化大师官网
  • 上海网站建设口碑最好的公司营销推广型网站
  • 六安网站制作金狮怎样做推广营销
  • 做外贸一般总浏览的网站新网站seo
  • 深圳三站合一网站建设seo属于运营还是技术
  • 重庆网站建设红衫搜索引擎大全
  • 网站建设优秀公司已矣seo排名点击软件
  • 做图片推广的网站吗二十条优化措施全文
  • 个人简历制作免费模板seo编辑招聘
  • 做生存曲线的网站湘潭seo优化
  • 上海网站建设网页制福州百度推广排名
  • 网站图片左右滚动线上推广方案
  • 长沙百度网站优化今天的热搜榜
  • 做一个小网站需要多少钱怎么做好销售
  • seo推广有哪些公司四川seo
  • 汽车行业网站建设比较好北京seo公司网站
  • sw网站建设市场营销策划ppt
  • 个人网站静态网页模板东莞网站建设方案外包
  • 深圳做外贸网站哪家好网络推广员要怎么做
  • 做家居建材出口网站有哪些安年软文网
  • 怎么建设一个网站国内搜索引擎排名2022
  • 视频网站怎样做网络营销优化培训
  • 怎么找人做网站郑州网站排名优化公司
  • 网站建设色彩万网域名查询
  • 那些企业网站做的漂亮营销策划方案ppt范文