社区
C语言
帖子详情
问几个底层函数的使用!!
afgkidy
2006-11-29 03:59:04
1. _mm_prefetch
2. _mm_stream_pi
上面2个函数谁知道他作用是什么呢,能说明下吗?急!!
谢谢!!!!!!!!!!!!!!!!!!!
...全文
182
2
打赏
收藏
问几个底层函数的使用!!
1. _mm_prefetch 2. _mm_stream_pi 上面2个函数谁知道他作用是什么呢,能说明下吗?急!! 谢谢!!!!!!!!!!!!!!!!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
凌殿Y_ST
2006-11-29
打赏
举报
回复
http://www.gameres.com/Articles/Program/Other/SSEjianjie.htm 上面的文章,可以看看...
====================================================================================
prefetch 指令的主要目的,是提前讓 CPU 載入稍後運算所需要的資料。通常是在對目前的資料進行運算之前,告訴 CPU 載入下一筆資料。這樣就可以讓目前的運算,和載入下一筆資料的動作,可以同時進行。如果運算的複雜度夠高的話,這樣可以完全消除讀取主記憶體的 latency。不同的 prefetch 指令則是告訴 CPU 將資料載入不同層次的 cache。不過,最常用的還是 prefetchnta,這個指令會把資料載入到離 CPU 最近的 cache 中(通常是 L1 cache 或 L2 cache),適用於資料在短時間內就會用到的情形。
另外 prefetch 指令不會產生任何 exception。它本質上只是一個 hint,CPU 並不一定會真的進行載入的動作。所以,即使 prefetch 一個不合法的記憶體位址,也不會產生錯誤。這讓程式可以不用處理討厭的邊界問題。
除了 prefetch 之外,另一個指令是 movntps,它的 intrinsics 是 _mm_stream_ps。這個指令的用途,是要求 CPU 在寫入資料的時候,不要把資料寫到 cache 中,而是直接將資料寫到主記憶體中。實際上它以 write combining 的方式寫入的。為什麼要這樣做呢?這是因為,很多時候計算的結果並不是立刻需要用到的,通常是很久以後才會用到。所以,這些資料如果被放在 cache 中,完全是浪費空間。而且,更糟的是,它們可能會把 cache 中有用的資料擠掉,而使得這些資料常常需要重新從主記憶體中載入。因此,如果讓這些資料不要被放在 cache 中,就可以避免這種問題。
對上面的程式,加上適當的 prefetch,並利用 movntps 指令,可以修改成類似下面的程式片斷:
__m128 x1 = _mm_load_ps(vec1_x);
__m128 y1 = _mm_load_ps(vec1_y);
__m128 z1 = _mm_load_ps(vec1_z);
__m128 x2 = _mm_load_ps(vec2_x);
__m128 y2 = _mm_load_ps(vec2_y);
__m128 z2 = _mm_load_ps(vec2_z);
_mm_prefetch((const char*)(vec1_x + next), _MM_HINT_NTA);
_mm_prefetch((const char*)(vec1_y + next), _MM_HINT_NTA);
_mm_prefetch((const char*)(vec1_z + next), _MM_HINT_NTA);
_mm_prefetch((const char*)(vec2_x + next), _MM_HINT_NTA);
_mm_prefetch((const char*)(vec2_y + next), _MM_HINT_NTA);
_mm_prefetch((const char*)(vec2_z + next), _MM_HINT_NTA);
__m128 t1 = _mm_mul_ps(x1, x2);
__m128 t2 = _mm_mul_ps(y1, y2);
t1 = _mm_add_ps(t1, t2);
t2 = _mm_mul_ps(z1, z2);
t1 = _mm_add_ps(t1, t2);
_mm_stream_ps(output, t1);
hailongchang
2006-11-29
打赏
举报
回复
http://www.csie.ntu.edu.tw/~r89004/hive/sse/page_7.html
作为程序员,你一定要知道
函数
底层
运行机制!!!
大家好,我是一个
函数
,一个又累,又苦,又被广大开发者
使用
的反派角色。 自从世界各大语言诞生的时候,我也随之诞生。虽然经常出现在人们的眼前,但是我的出生环境和身世却很少被人所知。今天不得不借助鹿哥的平台...
Flink:
底层
函数
与计时器
在
底层
函数
中
使用
定时器 计时器 计时器合并 普通
函数
类、富
函数
类、
底层
函数
类三者的区别 普通转换
函数
:仅能获取当前元素和聚合结果。 富
函数
:在普通
函数
之上还有生命周期方法以及运行时上下文对象,能进行...
C++虚
函数
的
底层
实现原理详解
虚
函数
的
底层
实现原理详解C/C++杂记:虚
函数
的
底层
实现原理虚
函数
的实现的基本原理深入虚表结构运行时类型识别(RTTI)与动态类型转换原理 C/C++杂记:虚
函数
的
底层
实现原理 虚
函数
的实现的基本原理 1. 概述 简单地...
C语言
函数
调用的
底层
实现
最近在阅读大名鼎鼎的《深入理解计算机系统》,读到第三章,介绍了
函数
的
底层
实现。对
底层
的实现有了一些了解。 为了理解,我就用书上的例子,如果在中途有出现的术语,我会就近解释。 1. 背景 全文将会围绕下面...
C语言的
底层
逻辑剖析
函数
篇(其一),0基础搞定
函数
,超详解
C语言的
底层
逻辑剖析
函数
篇(其一),0基础搞定
函数
,超详解
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章