VS集成SSE

1.包含SSE头文件即可,具体如下:
      mmintrin.h               MMX
      xmmintrin.h           SSE
      emmintrin.h          SSE2
      pmmintrin.h          SSE3
      tmmintrin.h           SSSE3
      intrin.h                    SSE4A
      smmintrin.h          SSE4.1

      nmmintrin.h          SSE4.2


2.工程设置成X64


3.VS设置OpenMP

http://blog.csdn.net/augusdi/article/details/8808226


4.Demo代码

SSE

void CSSETestDlg::ComputeArrayCPlusPlusSSE(  
          float* pArray1,                   // [in] first source array  
          float* pArray2,                   // [in] second source array  
          float* pResult,                   // [out] result array  
          int nSize)                        // [in] size of all arrays  
{  
    int nLoop = nSize/ 4;  
  
    __m128 m1, m2, m3, m4;  
  
    __m128* pSrc1 = (__m128*) pArray1;  
    __m128* pSrc2 = (__m128*) pArray2;  
    __m128* pDest = (__m128*) pResult;  
  
  
    __m128 m0_5 = _mm_set_ps1(0.5f);        // m0_5[0, 1, 2, 3] = 0.5  
  
    for ( int i = 0; i < nLoop; i++ )  
    {  
        m1 = _mm_mul_ps(*pSrc1, *pSrc1);        // m1 = *pSrc1 * *pSrc1  
        m2 = _mm_mul_ps(*pSrc2, *pSrc2);        // m2 = *pSrc2 * *pSrc2  
        m3 = _mm_add_ps(m1, m2);                // m3 = m1 + m2  
        m4 = _mm_sqrt_ps(m3);                   // m4 = sqrt(m3)  
        *pDest = _mm_add_ps(m4, m0_5);          // *pDest = m4 + 0.5  
          
        pSrc1++;  
        pSrc2++;  
        pDest++;  
    }  
}  

SSE汇编

void CSSETestDlg::ComputeArrayAssemblySSE(  
          float* pArray1,                   // [输入] 源数组1  
          float* pArray2,                   // [输入] 源数组2  
          float* pResult,                   // [输出] 用来存放结果的数组  
          int nSize)                        // [输入] 数组的大小  
{  
    int nLoop = nSize/4;  
    float f = 0.5f;  
  
    _asm  
    {  
        movss   xmm2, f                         // xmm2[0] = 0.5  
        shufps  xmm2, xmm2, 0                   // xmm2[1, 2, 3] = xmm2[0]  
  
        mov         esi, pArray1                // 输入的源数组1的地址送往esi  
        mov         edx, pArray2                // 输入的源数组2的地址送往edx  
  
        mov         edi, pResult                // 输出结果数组的地址保存在edi  
        mov         ecx, nLoop                  //循环次数送往ecx  
  
start_loop:  
        movaps      xmm0, [esi]                 // xmm0 = [esi]  
        mulps       xmm0, xmm0                  // xmm0 = xmm0 * xmm0  
  
        movaps      xmm1, [edx]                 // xmm1 = [edx]  
        mulps       xmm1, xmm1                  // xmm1 = xmm1 * xmm1  
  
        addps       xmm0, xmm1                  // xmm0 = xmm0 + xmm1  
        sqrtps      xmm0, xmm0                  // xmm0 = sqrt(xmm0)  
  
        addps       xmm0, xmm2                  // xmm0 = xmm1 + xmm2  
  
        movaps      [edi], xmm0                 // [edi] = xmm0  
  
        add         esi, 16                     // esi += 16  
        add         edx, 16                     // edx += 16  
        add         edi, 16                     // edi += 16  
  
        dec         ecx                         // ecx--  
        jnz         start_loop                //如果不为0则转向start_loop  
    }  
}  


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NestJS是一个为Node.js开发的开源、模块化、TypeScript编写的Web框架,它构建在Express之上,提供了更高级别的抽象和更好的组织结构。而Server-Sent Events (SSE) 是一种实时推送技术,它允许服务器持续地向客户端发送数据,不需要客户端频繁地请求新内容。 在NestJS中,你可以使用`@nestjs/sse`这个官方提供的模块来轻松地集成Server-Sent Events 功能。以下是使用NestJS和`@nestjs/sse`实现SSE的基本步骤: 1. **安装依赖**: ```bash npm install @nestjs/sse ``` 2. **创建SSE服务**: 在服务文件(如`sse.service.ts`)中,创建一个处理事件流的Service,通常会继承`SseStream`接口: ```typescript import { SseStream } from '@nestjs/sse'; export class SseService extends SseStream { async sendData() { this.push({ event: 'data', data: JSON.stringify({ message: 'New data available' }), }); // 可以根据需要定期或按条件发送数据 setTimeout(() => this.sendData(), 5000); // 每隔5秒发送一次数据 } } ``` 3. **在控制器中使用**: 在控制器中注入`SseService`,然后提供一个路由来启动事件流: ```typescript import { Controller, Get, Injectable } from '@nestjs/common'; import { SseService } from './sse.service'; @Injectable() export class SseController { constructor(private readonly sseService: SseService) {} @Get('events') startStreaming(): any { return this.sseService.createEventStream(); } } ``` 4. **客户端订阅**: 客户端可以使用JavaScript的XMLHttpRequest EventSource API来订阅SSE流,当数据到达时,浏览器会自动解析并更新页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值