太极图形学——高级数据结构——稠密

news2024/7/31 5:09:32

太极是一个面向数据的编程语言

在并行计算的框架下,在计算上花费的时间反而是少数,大量的时间都花在了数据获取(也就是访问内存)上面,这一点在之前的games103课程上也有简单的提及

cpu的计算能力非常强大,而gpu则不同,gpu的优势在于计算的同时进行,我们要提高gpu 的运算效率需要的是如何高效的访问内存

太极语言的快速性提现在两个方面,第一自然就是并行运算,第二则是数据获取的预缓存机制

例如上面这个例子,首先定义了shape之后,在写入数据时并行处理,若是四线程的GPU处理,每一个单位填完第一个数字后(这个数字是从内存中取过来的),还会预缓存一段相邻的数字,这样填后面的数字是直接从缓存中直接取得,访问自然也就变快了

如果是多维数据呢?

首先在内存中数据存储永远是一维的

然而数据访问的模式确是不确定的

我们要将访问数据和内存数据联系起来,我们想要做的是数据访问友好化

那么应该怎么存储数据呢,在C++中我们可以定义不同主序列的矩阵,如下所显示的逻辑,但这样做其实很不方便,需要人工记忆,很容易造成错误

那么在taichi的做法是这样的

x = ti.Vector.field(3,ti.f32,shape=16)#这是定义了一个场,这个场中是16个(1,3)的向量

#ti.root
x = ti.Vector.field(3,ti.f32) #先不给其shape
ti.root.dense(ti.i,16).place(x)#给x定义一个shape

 格式为这样

#转换例子
x = ti.field(ti.f32,shape=())
x = ti.field(ti.f32)
ti.root.place(x)

x = ti.field(ti.f32,shape=3)
x = ti.field(ti.f32)
ti.root.dense(ti.i,3).place(x)

x = ti.field(ti.f32,shape=(3,4))
x = ti.field(ti.f32)
ti.root.dense(ti.ij,(3,4)).place(x)

x = ti.Matrix.field(2,2,ti.f32,shape = 5)
x = ti.Matrix.field(2,2,ti.f32)
ti.root.dense(ti.i,5).place(x)

root出发,挂载的是dense,dense描述的形状,在dense后面挂着的就是那个没定义shape 的field

                          

这样做的好处是可以更进一步的设计数据的结构

例如之前提出的那种矩阵形式的数据,就可以按下面的方式来存贮

这样我们就可以这样定义一个行主序列的field

数据定义好之后,访问反而就很简单了,直接使用for语句就可以了

#以行为主序的field的定义
x = ti.field(ti.f32)
ti.root.dense(ti.i,4).dense(ti.j,4).place(x)

@ti.kernel
def fill():
    for i,j in x:
        x[i,j] = i*10+j

层级式的数据布局

这主要使用在层级定义的方法,仍然可以用一维的方式去访问,但存储反而像是以二维的方式存储

这个数据结构在插值等这种需要访问自己邻居的算法

soa存贮方式和aos存贮方式

更改数据结构过后,后面的代码都不需要改

例如之间的数据

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

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

相关文章

Qwen学习笔记3:Qwen模型调用外部API实现模型增强(openai的形式)

前言 本文记录了使用本地部署的Qwen模型,调用外部API实现模型的功能增强,非常的易用,大家用于开发自己的应用,只需要作简单的修改就可以进行使用了。 本文的代码来源视频教程: Qwen大模型变强了,通过API…

【SQL】SQL常见面试题总结(2)

目录 1、增删改操作1.1、插入记录(一)1.2、插入记录(二)1.3、插入记录(三)1.4、更新记录(一)1.5、更新记录(二)1.6、删除记录(一)1.7、…

【文末附gpt升级方案】腾讯混元文生图大模型开源:中文原生Sora同款DiT架构引领新潮流

在人工智能与计算机视觉技术迅猛发展的今天,腾讯再次引领行业潮流,宣布其旗下的混元文生图大模型全面升级并对外开源。这次开源的模型不仅具备强大的文生图能力,更采用了业内首个中文原生的Sora同款DiT架构,为中文世界的视觉生成领…

NodeJS V8引擎内存和垃圾回收器

关于max_old_space_size max_old_space_size参数用于指定V8引擎的老生代内存的最大大小。通过增加max_old_space_size参数的值,我们可以提供更多的内存给V8引擎,从而提高应用程序的性能和稳定性。 既然提到了老生代,就不得不提下什么是垃圾&…

IDEA 每次启动都显示选择项目页面

IDEA版本:2021.3.3 打开 Settings > Appearance & Behavior > System Settings 取消勾选 Reopen projects on startup 然后下次启动 IDEA 会显示选择项目页面

论文阅读 - Anatomy of an AI-powered malicious social botnet

论文链接: https://arxiv.org/pdf/2307.16336.pdf 目录 摘要 1引言 2 相关工作 2.1 LLM驱动的网络威胁 2.2 LLM生成的内容检测 2.3 社交机器人检测 2.4 由 LLM 增强的机器人 3 Fox8僵尸网络的识别 4 特性 4.1 配置文件 4.2 社交网络 4.3内容类型 4.4放…

全新多语言海外抢单刷单系统源码 订单自动匹配 支持分组 代理后台

安装教程 测试环境:Nginx PHP7.0 MySQL5.6 config/database 修改数据库 设置运行目录public 伪静态thinkphp 后台登录地址:/admin 账号admin 密码admin123 前端出现报错 删除runtime文件夹得缓存文件即可 源码免费下载地址抄笔记 (chaobiji.cn)

数据结构——冒泡排序

懒猫老师-数据结构-(63)冒泡排序(起泡排序)_哔哩哔哩_bilibili 交换排序的一类 基本思想 两两比较相邻记录的关键码,如果反序则交换,直到没有反序的记录为止。 过程 有序区不断扩大,无序区不断减小

vllm docker部署qwen等大模型推理;api post调用访问

参考: https://docs.vllm.ai/en/latest/serving/deploying_with_docker.html https://hub.docker.com/r/vllm/vllm-openai https://blog.csdn.net/weixin_42357472/article/details/136165481 下载镜像: docker pull vllm/vllm-openai 镜像默认最后一层就是python -m vllm.…

ModuleNotFoundError: No module named ‘sklearn‘

ModuleNotFoundError: No module named sklearn 解决办法: pip install scikit-learn

在win10折腾Flowise:部署和尝试

Flowise 是一种低代码/无代码拖放工具,旨在让人们轻松可视化和构建 LLM 应用程序。 本地部署 操作系统: win10 由于网络、操作系统等各种未知问题,使用npm install -g flowise的方式,尝试了很多次,都没有部署成功&am…

Python 白底黑字图片去除红色水印

Python 白底黑字图片去除红色水印 import os from PIL import Imagedef remove_color(image_path, new_image_path):"""初始化:param image_path: 图片路径:param new_image_path: 新图片路径"""# 打开图片并转换为RGBA格式img Image.open(imag…

C语言例题42、打印金字塔

#include <stdio.h>void main() {int i, j;for (i 0; i < 5; i) {for (j 4; j > i; j--) {//输出空格printf(" ");}for (j 0; j < 2 * i 1; j) {//输出星号printf("* ");}printf("\n");} }运行结果&#xff1a; 本章C语言经…

【智能算法】清道夫优化算法(CFO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;W Zhang受到清道夫自然行为启发&#xff0c;提出了清道夫优化算法&#xff08;Cleaner Fish Optimization Algorithm, CFO&#xff09;。 2.算法原理 2.1算法思想 CF…

【JAVA SE】初识JAVA

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;JAVA 个人主页&#xff1a;Celias blog~ 目录 ​编辑 一、关于JAVA 1.1 JAVA语言简介 1.2 语言优势 1…

【Shell】shell编程之数组

目录 一、数组的概念 二、数组定义方法 三、数组 1.获取数组长度 2.获取数组数据列表 3.获取数组下标列表 4.读取某下标赋值 5.数组遍历 6.数组切片 7.数组替换 8.数组删除 四、数组追加元素 五、向函数传数组参数 ​编辑六、数组排序算法 1.冒泡排序 2.直接选…

Vue的学习 —— <路由与网络请求>

目录 前言 正文 一、初识路由 二、初识Vue Router 1、安装Vue Router 2、Vue Router基本使用 三、路由重定向 四、嵌套路由 前言 在之前的学习中了解到单页Web应用通常只有一个HTML页面&#xff0c;所有的组件展示和切换都在这个页面上完成。虽然我们可以通过动态组件…

数据密码机独特的安全性能

数据密码机&#xff0c;作为一种专用的信息安全设备&#xff0c;在现代社会的各个领域中都发挥着至关重要的作用。它以其独特的加密技术和安全性能&#xff0c;为数据的传输和存储提供了坚实的保护屏障。 首先&#xff0c;数据密码机的工作原理是基于复杂的加密算法。这些算法能…

【Javaer学习Python】2、Django的MVT设计模式,完成CRUD小应用

系列文章&#xff1a;学习Python Django的MVT设计模式由Model(模型), View(视图) 和Template(模板)三部分组成&#xff0c;分别对应单个app目录下的models.py, views.py和templates文件夹。它们看似与MVC设计模式不太一致&#xff0c;其实本质是相同的&#xff1b; 实践是检验学…

Leetcode2391. 收集垃圾的最少总时间

Every day a Leetcode 题目来源&#xff1a;2391. 收集垃圾的最少总时间 解法1&#xff1a;前缀和 收集垃圾的时间分为两部分&#xff1a; 垃圾车收拾垃圾的时间&#xff1a;垃圾车收拾一单位的任何一种垃圾都需要花费 1 分钟。三辆垃圾车行驶的时间&#xff1a;每辆垃圾车…