WebAssembly js 调用c++ 高性能传参

news2024/9/22 21:27:16

WebAssembly js 调用c++ 高性能传参

在这里插入图片描述

通过 Emscripten,你可以直接使用 JavaScript 的 TypedArray 与 C++ 共享内存,
从而避免频繁的数据拷贝操作。TypedArray 是一种高效的二进制数据表示形式,非常适合处理大规模数值数据。

js 调用:

 function processDataPointer(inputArray) {
    // Create a Float32Array in JavaScript
    const data = new Float32Array(inputArray);
    const length = data.length;

    console.time("processDataPointer");
    // Allocate memory in WebAssembly
    const dataPtr = Module._malloc(data.byteLength);
    // Copy data from JavaScript to WebAssembly memory
    Module.HEAPF32.set(data, dataPtr / data.BYTES_PER_ELEMENT);
    console.timeEnd("parper data");
    Module._processDataPointer(dataPtr, length);
    // Free the allocated memory
    Module._free(dataPtr);
    console.timeEnd("processDataPointer");
  }

c++

#include <iostream>
#include <vector>
#include <cmath>
#include <limits>

#include <emscripten/emscripten.h>


int main()
{
  std::cout << "hello" << std::endl;
  return 0;
}

extern "C"
{
  EMSCRIPTEN_KEEPALIVE
  void processDataPointer(float *data, int length)
  {
    double x{};
    double y{};
    double z{};

    // 假设输入的长度总是 3 的倍数
    for (int i = 0; i < length; i += 3)
    {
      x += data[i + 0];
      y += data[i + 1];
      z += data[i + 2];
    }
  }
}

cmakeList:

cmake_minimum_required(VERSION 3.19)
project(obb)

# 默认是Release,如果需要Debug环境,可以在生成时指定 -DCMAKE_BUILD_TYPE=Debug
if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE Release)
endif()
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")

set(CMAKE_CXX_STANDARD 11)

# include_directories(./include/)

file(GLOB SOURCE_FILES src/main.cpp)
file(GLOB HEADER_FILES src/*.h)


add_executable(${CMAKE_PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES})

target_link_libraries(${CMAKE_PROJECT_NAME})


if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0")  # 关闭优化
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s WASM=1 -g -s MODULARIZE=1 -s EXPORT_NAME=createModule -s EXPORTED_FUNCTIONS=_processDataPointer,_malloc,_free -s INITIAL_MEMORY=128MB")
endif()

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

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

相关文章

二手书回收小程序搭建,体会阅读的魅力

在全民阅读的市场下&#xff0c;书籍的更新速度非常快&#xff0c;也产生了大量闲置书籍&#xff0c;为减少浪费&#xff0c;旧书回收成为了一个两全其美的方式。并且与新书对比&#xff0c;二手书的性价比非常高&#xff0c;大众可以低价购买到喜欢的书。因此&#xff0c;二手…

redis的基础数据结构-list列表

文章目录 1. redis的list数据结构1.1. list结构的特性1.2. 常用命令 2. 常见业务场景2.1 消息队列案例讲解背景优势解决方案代码实现 2.2 排行榜案例讲解背景优势解决方案代码实现 3. 注意事项&#xff1a; 1. redis的list数据结构 参考链接&#xff1a;https://mp.weixin.qq.…

SprinBoot+Vue小区车辆管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

国内智能运维厂商月度动态 202408

作为市场人员&#xff0c;虽然也添加了各类行业媒体、同行厂商的关注&#xff0c;但被同事问起业内动向时&#xff0c;常常也是记忆模糊、拍破脑袋也说不完整一件事。 所以找机会翻看了一下各大厂商的公号&#xff0c;先做个简单的8月汇总。 格式暂时是这样的&#xff1a; 整…

SpringBoot2:请求处理原理分析-利用内容协商功能实现接口的两种数据格式(JSON、XML)

文章目录 一、功能说明二、案例实现1、基于请求头实现2、基于请求参数实现 一、功能说明 我们知道&#xff0c;用ResponseBody注解标注的接口&#xff0c;默认返回给页面的是json数据。 其实&#xff0c;也可以返回xml结构的数据给页面。 这一篇就来实现一下这个小功能。 二、…

【GoMate框架案例】讯飞大模型RAG智能问答挑战赛top10 Baseline

【RAG框架】GoMate&#xff1a;RAG Framework within Reliable input,Trusted output 【项目链接】&#xff1a;https://github.com/gomate-community/GoMate 一、赛题背景 RAG&#xff08;检索增强生成&#xff09;是一种结合了检索模型和生成模型的技术&#xff0c;它通过检…

电竞社交平台

#计算机项目设计#vue项目实战 #java项目 #计算机项目 #电竞 #支付宝沙箱支付 #邮件发送 电竞社交平台 技术栈 开发工具&#xff1a;IDEA , VsCod 程序框架&#xff1a;SpringBoot、Mybatis、Vue 运行环境&#xff1a;Windows 数 据 库&#xff1a;MySQL 8.0.32 支付宝沙箱and邮…

2024最新FL Studio24.1.1.4285破解版中文安装包百度云网盘下载地址

大家好&#xff0c;今天我要给大家介绍一款音乐制作神器——FL Studio 24.1.1.4285中文版。这款软件可是音乐制作界的翘楚&#xff0c;无论是专业人士还是音乐爱好者&#xff0c;都会为它的强大功能和易用性所折服。 我们来看看FL Studio的特点。 这是一款全能型的音乐工作站&…

你的个人敏感信息是怎么泄露的?

你肯定经历过各种骚扰电话&#xff0c;房产中介、信用卡中心、贷款等等&#xff0c;在你不胜其烦挂断这些电话的同时&#xff0c;你有没有想过一个问题&#xff1a;这些骚扰电话都是怎么来的 &#xff1f; 举个例子&#xff0c;著名的万豪酒店&#xff0c;在 2018 年发生了一次…

Leetcode 只出现一次的元素

题目要求我们找到数组中只出现了一次的元素&#xff0c;而其他元素都出现了两次。 解题思路&#xff1a; 我们可以使用位运算中的异或操作&#xff08;XOR&#xff09;。异或操作有以下两个特性&#xff1a; 相同的两个数字异或结果为0&#xff0c;例如&#xff1a;a ^ a 0…

使用Flask框架构建RESTful API:从基础到实践

随着移动设备和Web应用的普及&#xff0c;API&#xff08;应用程序接口&#xff09;的重要性日益凸显。RESTful API因其简洁的设计和广泛的支持成为构建现代Web服务的标准。Flask是一个轻量级且灵活的Python Web框架&#xff0c;非常适合用来快速搭建RESTful API。本文将详细介…

亿发:信息化智能化需求大幅提升,企业信息化建设又迈出关键一步

在全球数字经济蓬勃发展的背景下&#xff0c;企业信息化建设正成为推动生产力提升、增强市场竞争力的关键引擎。随着企业对信息化和智能化的需求大幅提升&#xff0c;越来越多的企业加速了数字化转型的步伐&#xff0c;通过信息技术优化业务流程、提高运营效率、增强客户体验。…

官网下载easyx压缩包,如何在devc++配置easyx

视频教程 官网下载easyx压缩包&#xff0c;如何在devc配置easyx EasyX Graphics Library for C 安装指南 1. 访问官网 官网 2. 下载 EasyX 在官网上找到下载区域&#xff0c;点击下载按钮以获取 EasyX 安装包。 3. 访问更多下载选项 点击页面上的“more”链接&#xff0…

伟易特发布全新一代便携式反无人机装备

伟易特电子便携式反无人机系统突破技术创新&#xff0c;在大量实战应用中获得广泛好评&#xff0c;获得广大用户认可发布全新一代便携式反无人机装备

路径规划——D*算法

路径规划——D*算法 D Star算法是一种用于动态环境下的算法&#xff0c;它可以在环境变化时快速更新路径。 算法原理 D Star算法是一种反向增量式搜索算法&#xff0c;反向即算法从目标点开始向起点逐步搜索&#xff1b;增量式搜索&#xff0c;即算法在搜索过程中会计算每一…

锋哥写一套前后端分离Python权限系统 基于Django5+DRF+Vue3.2+Element Plus+Jwt 视频教程 ,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【前后端分离Python权限系统 基于Django5DRFVue3.2Element PlusJwt 】视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。 视频在线地址&#xff1a; 打造前后端分离Python权…

Java超详细知识点——I/O流(字节流和字符流)

File类&#xff1a; Java API&#xff1a;java.io.File 类 是用来操作文件或文件夹的&#xff0c;无法用来读写 1.首先创建一下file的对象&#xff1a; 里面可以写相对路径或者绝对路径 File file new File("CCC.java"); 也可以使用其他构造方法 //String path …

【计算机网络】电路交换、报文交换和分组交换——三种交换方式性能分析以及计算机网络的分类

【计算机网络】电路交换、电报交换、分组交换 目录 【计算机网络】电路交换、电报交换、分组交换1. 电路交换2. 电报交换3. 分组交换4. 基于分组交换~“虚电路交换”技术 【计算机网络】电路交换、报文交换和分组交换——三种交换方式性能分析电路交换性能分析报文交换性能分析…

在AD域中恢复被删除的账户(LDP.EXE)

在域账户被不小心删除后&#xff0c;客户端使用域账号登陆会失败&#xff0c;账号不存在&#xff1b; 为了客户端登陆回原来账户文件下面&#xff0c;重新创建一个相同账户&#xff0c;域中此新账号的ID是新的&#xff0c;客户端登陆也会按新用户生成用户文件&#xff1b;同样复…

只用一个 HTML 元素可以写出多少形状?——动画篇

为期一个多月&#xff0c;我们针对只用一个 div 元素一共可以写出多少种形状的话题&#xff0c;通过六个篇章&#xff08;分了八篇文章&#xff09;进行了详细的展开。 其中&#xff0c;前三个篇章&#xff0c;我们主要围绕欧几里得几何中的基本形状做的展开&#xff0c;其中蕴…