提速算法
1. 加速比的加速比的计算公式
Sp=T1/Tp
Sp是加速比,T1是单处理器下的运行时间,Tp是在有P个处理器并行系统中的运行时间。
当Sp=P时,此加速比被称为线性加速比(linear speep),又名“理想加速比”。
如果T1是在单处理器环境中效率最高的算法下的运行时间(即最适合单处理器的算法),则此加速比被称为绝对加速比(absolute speep)。
如果T1是在单处理器环境中还用和并行系统中一样的算法,则此加速比被称为相对加速比(relative speep)。
同样,我们可求得另一个用于衡量并行系统的标准-效率(efficiency),简写为Ep
Ep=Sp/P
P为并行计算机中处理器的个数
另有“超线性加速比”(superlinear speep),即加速比比处理器数更大的情况。超线性加速比很少出现。超线性加速比有几种可能的成因,如现代计算机的存储层次不同所带来的“高速缓存效概念,具体来说,较之顺序计算,在并行计算中,不仅参与计算的处理器数量更多,不同处理器的高速缓存也集合使用。而有鉴于此,集合的缓存便足以提供计算所需的存储量,算法执行时便不必使用速度较慢的内存,因而存储器读些时间便能大幅降低,这便对实际计算产生了额外的加速效果。
2. 关于数学速算法
较快的加减乘除的速算推荐珠心算。当然也取决教的老师和学习者的个人领悟能力。
3. c语言gsensor急加速算法
1、加速度传感器又叫G-sensor,返回x、y、z三轴的加速度数值。
该数值包含地心引力的影响,单位是m/s^2。
将手机平放在桌面上,x轴默认为0,y轴默认0,z轴默认9.81。
将手机朝下放在桌面上,z轴为-9.81。
将手机向左倾斜,x轴为正值。
将手机向右倾斜,x轴为负值。
将手机向上倾斜,y轴为负值。
将手机向下倾斜,y轴为正值。
加速度传感器可能是最为成熟的一种mems产品,市场上的加速度传感器种类很多。
手机中常用的加速度传感器有BOSCH(博世)的BMA系列,AMK的897X系列,ST的LIS3X系列等。
这些传感器一般提供±2G至±16G的加速度测量范围,采用I2C或SPI接口和MCU相连,数据精度小于16bit。
2、例程:
java">{
privatestaticfinalStringTAG=MainActivity.class.getSimpleName();
;
privateSensormSensor;
privateTextViewtextviewX;
privateTextViewtextviewY;
privateTextViewtextviewZ;
privateTextViewtextviewF;
privateintmX,mY,mZ;
privatelonglasttimestamp=0;
CalendarmCalendar;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textviewX=(TextView)findViewById(R.id.textView1);
textviewY=(TextView)findViewById(R.id.textView3);
textviewZ=(TextView)findViewById(R.id.textView4);
textviewF=(TextView)findViewById(R.id.textView2);
mSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
mSensor=mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//TYPE_GRAVITY
if(null==mSensorManager){
Log.d(TAG,"");
}
//参数三,检测的精准度
mSensorManager.registerListener(this,mSensor,
SensorManager.SENSOR_DELAY_NORMAL);//SENSOR_DELAY_GAME
}
@Override
publicvoidonAccuracyChanged(Sensorsensor,intaccuracy){
}
@Override
publicvoidonSensorChanged(SensorEventevent){
if(event.sensor==null){
return;
}
if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
intx=(int)event.values[0];
inty=(int)event.values[1];
intz=(int)event.values[2];
mCalendar=Calendar.getInstance();
longstamp=mCalendar.getTimeInMillis()/1000l;//1393844912
textviewX.setText(String.valueOf(x));
textviewY.setText(String.valueOf(y));
textviewZ.setText(String.valueOf(z));
intsecond=mCalendar.get(Calendar.SECOND);//53
intpx=Math.abs(mX-x);
intpy=Math.abs(mY-y);
intpz=Math.abs(mZ-z);
Log.d(TAG,"pX:"+px+"pY:"+py+"pZ:"+pz+"stamp:"
+stamp+"second:"+second);
intmaxvalue=getMaxValue(px,py,pz);
if(maxvalue>2&&(stamp-lasttimestamp)>30){
lasttimestamp=stamp;
Log.d(TAG,"sensorisMoveorchanged....");
textviewF.setText("检测手机在移动..");
}
mX=x;
mY=y;
mZ=z;
}
}
/**
*获取一个最大值
*
*@parampx
*@parampy
*@parampz
*@return
*/
publicintgetMaxValue(intpx,intpy,intpz){
intmax=0;
if(px>py&&px>pz){
max=px;
}elseif(py>px&&py>pz){
max=py;
}elseif(pz>px&&pz>py){
max=pz;
}
returnmax;
}
}