首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

sse实现向量相减,为何崩溃?该怎么解决

2013-01-25 
sse实现向量相减,为何崩溃?我在vc2010中建了一个控制台工程,想测试一下SSE(就是实现一个向量相减),但程序

sse实现向量相减,为何崩溃?
我在vc2010中建了一个控制台工程,想测试一下SSE(就是实现一个向量相减),但程序老是崩溃,搞不懂什么原因。

// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
#include <xmmintrin.h>//sse
void sub(float *v1,float *v2,float *vrs){
__m128*r=(__m128*)vrs;
*r=_mm_sub_ps(*(__m128*)v1,*(__m128*)v2);

}
int _tmain(int argc, _TCHAR* argv[])
{
float a[4]={1,1,1,1};
float b[4]={1,1,1,1};
float c[4];
sub(a,b,c);
std::cout<<c[0]<<" "<<c[1]<<" "<<c[2]<<std::endl;
return 0;
}


[解决办法]
看起来很高深,希望快点解决。
[解决办法]
是不是想要这样。



#include<iostream>
#include <xmmintrin.h>

struct Vec4
{
union
{
__m128 v;
struct { float x, y, z, w; };
};
};

int main()
{

Vec4 a = {5,6,7,8};
Vec4 b = {1,1,1,1};
Vec4 c;
c.v = _mm_sub_ps(a.v, b.v);
std::cout<<c.x<<" "<<c.y<<" "<<c.z<<" "<<c.w<<std::endl;



return 0;
}

[解决办法]
引用:
实在没办法,只好去学sse汇编,将函数体内的东西全部用汇编写,然后即使开启编译优化也不会产生崩溃了(因为编译优化对内嵌汇编不起作用)。现在只好暂时这么做了。昨天把其它向量计算的函数也改成了汇编。
不过还是想知道为什么。


只把SSE部分用汇编就可以了
不用全部用汇编

热点排行