3d展示源码 3D展示

源码大全 a1561571580 发布时间:2025-02-07 浏览:

3d展示源码 3D展示

四款源代码扫描工具

1. Veracode

Veracode是一款在全球范围内被广泛采用的静态代码分析工具。它以其3D可视化功能,能够清晰地展示安全漏洞的攻击路径,帮助开发者迅速定位和分析问题。这一特性极大地提高了软件的安全性。

2. Fortify SCA

Fortify SCA是一款专注于静态代码分析的强大工具,支持多种编程语言和主流框架。它的定制化能力可以满足不同项目的需求,确保代码质量与企业标准相符。

3. Checkmarx

Checkmarx以其全面的扫描管理能力而闻名。它的服务独立性使得无论是团队协作、自动化任务还是云服务,都能无缝对接。这不仅降低了使用成本,还不会影响开发进度。

4.端玛DMSCA

端玛DMSCA是一款企业级解决方案,它的操作系统和编译器都是独立的。它提供的扫描具有低误报率和高准确性,几乎可以忽略不计的误报率节省了大量的审计时间和成本。此外,它还能够深入业务逻辑和架构,动态地查找潜在风险。

3d稀疏卷积——spconv源码剖析(三)

构建Rulebook

下面看ops.get_indice_pairs,位于:spconv/ops.py

构建Rulebook由ops.get_indice_pairs接口完成

get_indice_pairs函数具体实现:

主要就是完成了一些参数的校验和预处理。首先,对于3d普通稀疏卷积,根据输入shape大小,kernel size,stride等参数计算出输出输出shape,子流行稀疏卷积就不必计算了,输出shape和输入shape一样大小

准备好参数之后就进入最核心的get_indice_pairs函数。因为spconv通过torch.ops.load_library加载.so文件注册,所以这里通torch.ops.spconv.get_indice_pairs这种方式来调用该函数。

算子注册:在src/spconv/all.cc文件中通过Pytorch提供的OP Register(算子注册的方式)对底层c++ api进行了注册,可以python接口形式调用c++算子

同C++ extension方式一样,OP Register也是Pytorch提供的一种底层扩展算子注册的方式。注册的算子可以通过 torch.xxx或者 tensor.xxx的方式进行调用,该方式同样与pytorch源码解耦,增加和修改算子不需要重新编译pytorch源码。用该方式注册一个新的算子,流程非常简单:先编写C++相关的算子实现,然后通过pytorch底层的注册接口(torch::RegisterOperators),将该算子注册即可。

构建Rulebook实际通过python接口get_indice_pairs调用src/spconv/spconv_ops.cc文件种的getIndicePairs函数

代码位于:src/spconv/spconv_ops.cc

分析getIndicePairs直接将重心锁定在GPU逻辑部分,并且子流行3d稀疏卷积和正常3d稀疏卷积分开讨论,优先子流行3d稀疏卷积。

代码中最重要的3个变量分别为:indicePairs,indiceNum和gridOut,其建立过程如下:

indicePairs代表了稀疏卷积输入输出的映射规则,即Input Hash Table和 Output Hash Table。这里分配理论最大的内存,它的shape为{2,kernelVolume,numAct},2表示输入和输出两个方向,kernelVolume为卷积核的volume size。例如一个3x3x3的卷积核,其volume size就是27(3*3*3)。numAct表示输入有效(active)特征的数量。indiceNum用于保存卷积核每一个位置上的总的计算的次数,indiceNum对应图片中的count

代码中关于gpu建立rulebook调用create_submconv_indice_pair_cuda函数来完成,下面具体分析下create_submconv_indice_pair_cuda函数

子流线稀疏卷积

子流线稀疏卷积是调用create_submconv_indice_pair_cuda函数来构建rulebook

在create_submconv_indice_pair_cuda大可不必深究以下动态分发机制的运行原理。

直接将重心锁定在核函数:

prepareSubMGridKernel核函数中grid_size和block_size实则都是用的整形变量。其中block_size为tv::cuda::CUDA_NUM_THREADS,在include/tensorview/cuda_utils.h文件中定义,大小为1024。而grid_size大小通过tv::cuda::getBlocks(numActIn)计算得到,其中numActIn表示有效(active)输入数据的数量。

prepareSubMGridKernel作用:建立输出张量坐标(通过index表示)到输出序号之间的一张哈希表

见:include/spconv/indice.cu.h

这里计算index换了一种模板加递归的写法,看起来比较复杂而已。令:new_indicesIn= indicesIn.data(),可以推导得出index为:

ArrayIndexRowMajor位于include/tensorview/tensorview.h,其递归调用写法如下:

接着看核函数getSubMIndicePairsKernel3:

位于:include/spconv/indice.cu.h

看:

上述写法类似我们函数中常见的循环的写法,具体可以查看include/tensorview/kernel_utils.h

NumILP按默认值等于1的话,其stride也是gridDim.x*blockDim.x。索引最大值要小于该线程块的线程上限索引blockDim.x* gridDim.x,功能与下面代码类似:

参考: blog.csdn.net/ChuiGeDaQ...

Cesium专栏-裁剪效果(基于3dtiles模型,附源码下载)

Cesium是一款全球领先的JavaScript开源产品,专为构建高质量三维地球与地图的Web应用而设计。借助Cesium提供的JavaScript开发包,开发者能轻松创建无需插件的虚拟地球应用,且确保在性能、精度、渲染质量以及多平台兼容性与易用性方面达到高标准。

探讨裁剪功能,这一概念在图像处理领域并不陌生。在三维场景中,Cesium能够实现类似PS中的裁剪效果,即动态调整视图区域,突出展示用户感兴趣的三维模型部分。本文重点介绍如何基于3dtiles模型实现这一功能。

实现动态裁剪模型效果,需要遵循以下步骤:

1.初始化地球模型,并启用深度测试功能,确保场景中的元素正确排序,提升视觉效果。

2.创建一个切面平面对象,用以定义裁剪区域的边界。

3.加载3dtiles模型,并将裁剪平面应用到模型上,实现动态调整视图区域的功能。

对于想要实践这一效果的开发者,我们提供了源码下载。只需点击下方链接,即可获取实现动态裁剪模型功能所需的Cesium源码。

在线咨询

点击这里给我发消息QQ客服

在线咨询

免费通话

24h咨询:


如您有问题,可以咨询我们的24H咨询电话!

免费通话

微信扫一扫

微信联系
返回顶部