Quantcast
Channel: Статьи Intel Developer Zone
Viewing all 357 articles
Browse latest View live

Разработка приложений, использующих датчики, для телефонов и планшетных ПК на базе процессоров Intel® Atom™ и под управлением ОС Android*

$
0
0

Разработка приложений, использующих датчики, для телефонов и планшетных ПК на базе процессоров Intel® Atom™ и под управлением ОС Android*


Это руководство предназначено для разработчиков приложений и в нем содержится обзор инфраструктуры датчиков, поддерживаемых ОС Android, а также обсуждается использование некоторых датчиков, которые, как правило, присутствуют в телефонах и планшетных ПК на базе процессоров Intel® Atom™. Здесь обсуждаются датчики движения, положения и окружающей среды. Хотя компоненты GPS не считаются датчиками в инфраструктуре Android, сервис определения местоположения на основе GPS также обсуждается в этом руководстве. Все присутствующие в данном руководстве темы относятся к ОС Android 4.2 Jelly Bean.

Датчики на телефонах и планшетных ПК на базе процессоров Intel® Atom™


В телефонах и планшетных ПК на базе процессоров Intel Atom под управлением ОС Android могут использоваться различные аппаратные датчики. Все они применяются для обнаружения движений, местоположения и сбора данных, характеризующих окружающую среду. На рисунке 1 представлена схема возможной конфигурации датчиков на обычном устройстве на базе процессора Intel Atom под управлением ОС Android.


Рисунок 1.  Датчики в системе Android на базе процессора Intel® Atom™

С учетом сообщаемых данных датчики Android могут разделяться на классы и типы, представленные в таблице 1.

Датчики движенияАкселерометр
(TYPE_ACCELEROMETER)
Измеряет ускорение устройства в м/с2Обнаружение движения
Гироскоп
(TYPE_GYROSCOPE)
Измеряет скорости вращения устройстваОбнаружение вращения
Датчики определения положенияМагнитометр
(TYPE_MAGNETIC_FIELD)
Измеряет силу геомагнитного поля Земли в мкТлКомпас
Приближение
(TYPE_PROXIMITY)
Измеряет близость объекта в см.Обнаружение ближайшего объекта
GPS
(не тип android.hardware.Sensor)
Получает данные о точном географическом местоположении устройстваОбнаружение точного географического местоположения
Датчики окружающей среды ALS
(TYPE_LIGHT)
Измеряет уровень освещенности в люксахАвтоматическое управление яркостью экрана
БарометрИзмеряет давление окружающего воздуха в миллибарахОпределение высоты

Таблица 1.  Типы датчиков, поддерживаемые платформой Android
 

Инфраструктура датчиков Android


Инфраструктура датчиков Android предлагает механизмы доступа к датчикам и их данным, за исключением GPS, доступ к которому осуществляется с помощью сервисов определения местоположения ОС Android. Они также будут обсуждаться в этой статье. Инфраструктура датчиков является частью пакета android.hardware. В таблице 2 перечислены классы и интерфейсы инфраструктуры датчиков.

ИмяТипОписание
SensorManagerКлассИспользуется для создания экземпляра сервиса датчика. Предоставляет различные методы доступа к датчикам, возможности регистрации и отмены регистрации приемников событий датчиков и т.д.
ДатчикКлассИспользуется для создания экземпляра конкретного датчика.
SensorEventКлассИспользуются системой для публикации данных датчика. Сюда относятся исходные значения данных датчика, тип датчика, точность данных и штамп времени.
SensorEventListenerИнтерфейсПредоставляет методы вызова для получения оповещений от класса SensorManager после изменения данных или точности показаний датчика.

Таблица 2. Инфраструктура датчиков на платформе Android

Получение конфигурации датчиков

Производители устройств индивидуально принимают решения о том, какие датчики будут доступны на устройстве. Вы должны выяснить, какие датчики доступны во время выполнения, вызывая для этого метод getSensorList() инфраструктуры датчиков SensorManager с параметром “Sensor.TYPE_ALL”. В примере кода 1 представлен список доступных датчиков, поставщик, энергопотребление и информация о точности каждого датчика.

package com.intel.deviceinfo;
	
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Fragment;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
	
public class SensorInfoFragment extends Fragment {
	
    private View mContentView;
	
    private ListView mSensorInfoList;	
    SimpleAdapter mSensorInfoListAdapter;
	
    private List<sensor> mSensorList;

    private SensorManager mSensorManager;
	
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }
	
    @Override
    public void onPause() 
    { 
        super.onPause();
    }
	
    @Override
    public void onResume() 
    {
        super.onResume();
    }
	
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        mContentView = inflater.inflate(R.layout.content_sensorinfo_main, null);
        mContentView.setDrawingCacheEnabled(false);
	
        mSensorManager = (SensorManager)getActivity().getSystemService(Context.SENSOR_SERVICE);
	
        mSensorInfoList = (ListView)mContentView.findViewById(R.id.listSensorInfo);
		
        mSensorInfoList.setOnItemClickListener( new OnItemClickListener() {
			
            @Override
            public void onItemClick(AdapterView<?> arg0, View view, int index, long arg3) {
				
                // with the index, figure out what sensor was pressed
                Sensor sensor = mSensorList.get(index);
				
                // pass the sensor to the dialog.
                SensorDialog dialog = new SensorDialog(getActivity(), sensor);

                dialog.setContentView(R.layout.sensor_display);
                dialog.setTitle("Sensor Data");
                dialog.show();
            }
        });
		
        return mContentView;
    }
	
    void updateContent(int category, int position) {
        mSensorInfoListAdapter = new SimpleAdapter(getActivity(), 
	    getData() , android.R.layout.simple_list_item_2,
	    new String[] {
	        "NAME",
	        "VALUE"
	    },
	    new int[] { android.R.id.text1, android.R.id.text2 });
	mSensorInfoList.setAdapter(mSensorInfoListAdapter);
    }
	
	
    protected void addItem(List<Map<String, String>> data, String name, String value)   {
        Map<String, String> temp = new HashMap<String, String>();
        temp.put("NAME", name);
        temp.put("VALUE", value);
        data.add(temp);
    }
	
	
    private List<? extends Map<String, ?>> getData() {
        List<Map<String, String>> myData = new ArrayList<Map<String, String>>();
        mSensorList = mSensorManager.getSensorList(Sensor.TYPE_ALL);
		
        for (Sensor sensor : mSensorList ) {
            addItem(myData, sensor.getName(),  "Vendor: " + sensor.getVendor() + ", min. delay: " + sensor.getMinDelay() +", power while in use: " + sensor.getPower() + "mA, maximum range: " + sensor.getMaximumRange() + ", resolution: " + sensor.getResolution());
        }
        return myData;
    }
}

Пример кода 1. Фрагмент, который представляет список датчиков**

Система координат датчика

Инфраструктура датчиков представляет данные датчика, используя стандартную 3-осевую систему координат, где X, Y и Z соответственно представлены значениями values[0], values[1] и values[2] в объекте SensorEvent.

Некоторые датчики, такие как датчики света, температуры, приближения и давления, возвращают только одиночные значения. Для этих датчиков используются только значения объекта SensorEvent – values[0].

Другие датчики представляют данные в стандартной 3-осевой системе координат. Далее приведен список таких датчиков:

  • Акселерометр
  • Датчик гравитации
  • Гироскоп
  • Датчик геомагнитного поля

3-осевая система координат датчика выбирается относительно экрана устройства в его обычной (по умолчанию) ориентации. Для телефона ориентация по умолчанию – портретная; для планшетного ПК – альбомная. Когда устройство удерживается в своем обычном положении, ось х направлена по горизонтали и указывает вправо, ось у направлена вертикально вверх, а ось z указывает за пределы экрана (навстречу смотрящему). На рисунке 2 показана система координат датчика для телефона, а на рисунке 3 – для планшетного ПК


Рисунок 2. Система координат датчика для телефона


Рисунок 3.  Система координат датчика для планшетного ПК

Наиболее важным моментом для системы координат датчика является тот факт, что эта система никогда не меняется, когда устройство перемещается или меняется его ориентация.

Мониторинг событий датчиков

Инфраструктура датчиков представляет данные датчика вместе с объектами SensorEvent. Класс может управлять данными конкретного датчика с помощью интерфейса SensorEventListener и регистрации SensorManager для данного датчика. Инфраструктура датчиков информирует класс об изменениях состояния значений датчика с помощью двух следующих методов вызова SensorEventListener, используемых классом:

 

onAccuracyChanged()

 

и

 

onSensorChanged()

 

В примере кода 2 представлен SensorDialog, используемый в примере SensorInfoFragment, который обсуждался в разделе "Получение конфигурации датчиков".

package com.intel.deviceinfo;

import android.app.Dialog;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;

public class SensorDialog extends Dialog implements SensorEventListener {
    Sensor mSensor;
    TextView mDataTxt;
    private SensorManager mSensorManager;

    public SensorDialog(Context ctx, Sensor sensor) {
        this(ctx);
        mSensor = sensor;
    }
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mDataTxt = (TextView) findViewById(R.id.sensorDataTxt);
        mDataTxt.setText("...");
        setTitle(mSensor.getName());
    }
	
    @Override
    protected void onStart() {
        super.onStart();
        mSensorManager.registerListener(this, mSensor,  SensorManager.SENSOR_DELAY_FASTEST);
    }
		
    @Override
    protected void onStop() {
        super.onStop();
        mSensorManager.unregisterListener(this, mSensor);
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() != mSensor.getType()) {
            return;
        }
        StringBuilder dataStrBuilder = new StringBuilder();
        if ((event.sensor.getType() == Sensor.TYPE_LIGHT)||
            (event.sensor.getType() == Sensor.TYPE_TEMPERATURE)||
            (event.sensor.getType() == Sensor.TYPE_PRESSURE)) {
            dataStrBuilder.append(String.format("Data: %.3fn", event.values[0]));
        }
        else{         
            dataStrBuilder.append( 
                String.format("Data: %.3f, %.3f, %.3fn", 
                event.values[0], event.values[1], event.values[2] ));
        }
        mDataTxt.setText(dataStrBuilder.toString());
    }
}

Пример кода 2.Диалог, в котором представлены значения датчика**

Датчики движения

Датчики движения используются для мониторинга движений устройства, таких как тряска, поворот, качание или наклон. Акселерометр и гироскоп представляют собой два датчика движения, которые доступны на многих планшетных ПК и телефонах.

Датчики движения представляют данные, используя систему координат, где три значения в объекте SensorEvent это значения values[0], values[1] b values[2], представляющие данные по соответствующим им осям координат x, y и z.

Чтобы получить представление о датчиках движения и использовать их данные в приложении, необходимо применять некоторые физические формулы, связанные с силой, массой, ускорением на основании законов Ньютона, и отношениями между некоторыми из этих данных во времени. Чтобы получить информацию об этих физических формулах, обратитесь к вашим любимым учебникам по физике или популярным сайтам в Интернете.

Акселерометр

Акселерометр измеряет ускорение, которое прилагается к устройству. Его свойства приведены в таблице 3.

 
ДатчикТип SensorEvent
Данные (м/с2)
Описание
АкселерометрTYPE_ACCELEROMETER values[0]
values[1]
 values[2]
Ускорение по оси x
Ускорение по оси y
Ускорение по оси z

Таблица 3. Акселерометр

Концепция акселерометра основана на действии второго закона Ньютона:

a = F/m

Ускорением объекта является результат приложения к нему внешней силы. В число внешних сил входит и сила тяжести, которая прилагается ко всем объектам на Земле. Она пропорциональна силе F, приложенной к объекту и обратно пропорциональна массе m объекта.

В нашем коде вместо прямого использования приведенного выше уравнения мы рассматриваем результат ускорения в течение периода времени относительно его скорости и местоположения. Следующее уравнение описывает связь скорости объекта v1 с его первоначальной скоростью v0, ускорением aи временем t:

v1 = v0 + at

Для определения смещения объекта sмы используем следующее уравнение:

s = v0t + (1/2)at2

Во многих случаях мы начинаем с условием v0, равным 0 (перед тем, как устройство начинает двигаться), что упрощает уравнение до:

s = at2/2

Из-за действующей силы тяжести ускорение свободного падения, представленное символом g, применяется ко всем объектам на Земле. Не завися от массы объекта, gзависит только от широты местоположения объекта со значением в диапазоне от 9,78 до 9,82 (м/с2). Мы принимаем традиционное стандартное значение, используемое для g:

g = 9.80665 (m/s2)

Поскольку акселерометр представляет значения с использованием многомерной системы координат устройства, в нашем коде мы можем рассчитать расстояние по осям x, y и z, используя следующие уравнения:

Sx = AxT2/2
Sy=AyT2/2
Sz=AzT2/2

Где Sx, Syи Szявляются смещениями по осям х, у и z соответственно, а Ax, Ayи Azявляются ускорениями по осям х, у и z, соответственно. T– это время периода измерения

public class SensorDialog extends Dialog implements SensorEventListener {
    …	
    private Sensor mSensor;
    private SensorManager mSensorManager;
	
    public SensorDialog(Context context) {
        super(context);
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    …
}

Пример кода 3. Использование акселерометра**

Иногда мы не используем все три значения данных. В других случаях, возможно, потребуется принять во внимание ориентацию устройства. Например, для приложения Лабиринт мы используем только данные силы тяжести для оси х и оси y при вычислении направлений и расстояний движения шара на основании данных ориентации устройства. Следующий фрагмент кода (пример кода 4) представляет логику.

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) {
        return;
    } 
float accelX, accelY;
…
//detect the current rotation currentRotation from its “natural orientation”
//using the WindowManager
    switch (currentRotation) {
        case Surface.ROTATION_0:
            accelX = event.values[0];
            accelY = event.values[1];
            break;
        case Surface.ROTATION_90:
            accelX = -event.values[0];
            accelY = event.values[1];
            break;
        case Surface.ROTATION_180:
            accelX = -event.values[0];
            accelY = -event.values[1];
            break;
        case Surface.ROTATION_270:
            accelX = event.values[0];
            accelY = -event.values[1];
            break;
    }
    //calculate the ball’s moving distances along x, and y using accelX, accelY and the time delta
        …
    }
}

Пример кода 4.Определение ориентации устройства с использованием данных акселерометра в игре Лабиринт**

Гироскоп


Гироскоп измеряет скорость вращения устройства вокруг осей x, y и z, как это показано в таблице 4. Значения данных гироскопа могут быть положительными или отрицательными. Исторически принято, что вращение вокруг оси против часовой стрелки считается положительным, а вращение вокруг оси по часовой стрелке – отрицательным. Мы также можем определить направление значения гироскопа, используя "правило правой руки", показанное на рисунке 4.


Рисунок 4.  Использование правила "правой руки"для определения положительного направления вращения

ДатчикТипSensorEvent
Данные (рад/с)
Описание
ГироскопTYPE_GYROSCOPE values[0]
 values[1]
 values[2]
Скорость вращения вокруг оси x
Скорость вращения вокруг оси y
Скорость вращения вокруг оси z

Таблица 4. Гироскоп

В примере кода 5 показано, как конструировать образец гироскопа.

public class SensorDialog extends Dialog implements SensorEventListener {
    …	
    private Sensor mGyro;
    private SensorManager mSensorManager;
	
    public SensorDialog(Context context) {
        super(context);
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mGyro = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
    …
}

Пример кода 5. Использование гироскопа**

Датчики положения

Многие планшетные ПК Android имеют два датчика положения: магнитометр и датчик приближения. Магнитометр измеряет силу магнитного поля Земли по осям х, у и z, а датчик приближения определяет расстояние от устройства до другого объекта.

Магнитометр

Наиболее важным назначением магнитометра (представлено в таблице 5) в системах Android является реализация функций компаса.

ДатчикТипSensorEvent
 Данные (мкТл)
Описание
МагнитометрTYPE_MAGNETIC_FIELD values[0]
 values[1]
 values[2]
Сила магнитного поля Земли по оси x
Сила магнитного поля Земли по оси y
Сила магнитного поля Земли по оси z

Таблица 5. Магнитометр

В примере кода 6 показано, как конструировать образец магнитометра.

public class SensorDialog extends Dialog implements SensorEventListener {
    …	
    private Sensor mMagnetometer;
    private SensorManager mSensorManager;
	
    public SensorDialog(Context context) {
        super(context);
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
    …
}

Пример кода 6.Использование магнитометра**

Приближение

Датчик приближения измеряет расстояние между устройством и другим объектом. Устройство может использовать его для обнаружения того, насколько близко оно находится к пользователю (см. таблицу 6), определяя тем самым, если пользователь говорит по телефону, и отключая экран на время разговора.

Таблица 6: Датчик приближения
ДатчикТипSensorEvent
Данные
Описание
ПриближениеTYPE_PROXIMITY values[0]Расстояние до объекта в см. Некоторые датчики приближения могут лишь сообщать логическое значение для указания, что объект находится достаточно близко.

В примере кода 7 показано использование датчика приближения.

public class SensorDialog extends Dialog implements SensorEventListener {
    …	
    private Sensor mProximity;
    private SensorManager mSensorManager;
	
    public SensorDialog(Context context) {
        super(context);
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
    …
}

Пример кода 7.Использование датчика приближения**

Датчики окружающей среды

Датчики окружающей среды используются для обнаружения и представления характеристик окружающей устройства среды, таких как свет, температура, давление или влажность. Датчик освещенности (ALS) и датчик давления (барометр) доступны на многих планшетных ПК с ОС Android.

Датчик освещенности (ALS)

Датчик освещенности, представленный в таблице 7, используется в системе для определения освещенности окружающей среды и автоматической регулировки яркости экрана.

Таблица 7: Датчик освещенности
ДатчикТип SensorEvent
Данные (люкс)
Описание
 ALSTYPE_LIGHT values[0]Освещение вокруг устройства

В примере кода 8 показано использование датчика освещенности.

…	
    private Sensor mALS;
    private SensorManager mSensorManager;

    …	
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mALS = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
    …

Пример кода 8.Использование датчика освещенности**

Барометр

Приложения могут использовать датчик атмосферного давления (барометр), представленный в таблице 8, для вычисления высоты текущего местоположения устройства.

Таблица 8: Датчик атмосферного давления
ДатчикТип SensorEvent
Данные (люкс)
Описание
БарометрTYPE_PRESSURE values[0]Давление окружающего воздуха в миллибарах.

В примере кода 9 показано использование барометра

…	
    private Sensor mBarometer;
    private SensorManager mSensorManager;

    …	
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mBarometer = mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
    …

Пример кода 9.  Использование барометра**

Принципы настройки производительности и оптимизации датчиков

Чтобы использовать датчики в приложениях, вы должны выполнять следующие рекомендации:

  • Проверяйте доступность конкретного датчика перед его использованием
    Платформа Android не требует включения или исключения определенного датчика на устройстве. Перед использованием датчика в вашем приложении нужно сначала проверить его действительную доступность.
  • Всегда отменяйте регистрацию приемников датчиков
     Если операция, использующая приемник датчика, станет невидимой или диалог будет остановлен, нужно отменить регистрацию приемника датчика. Это может быть сделано с помощью метода операции OnPause() или в методе диалога OnStop(). Иначе датчик будет продолжать сбор данных и, в результате, разряжать батарею.
  • Не блокируйте метод onSensorChanged()
     Метод onSensorChanged() часто вызывается системой для представления данных датчика. Для этого метода требуется совсем немного логики. Сложные вычисления с данными датчиков должны быть вынесены за пределы этого метода.
  • Всегда тестируйте свои приложения, работающие с датчиками, на реальных устройствах
    Все датчики, описанные в этом разделе, являются аппаратными датчиками. Эмулятор ОС Android может быть не в состоянии имитировать конкретные функции и определить производительность датчика.

GPS и местоположение


GPS (Global Positioning System) является системой, основанной на получении спутниковых данных, которая выдает точную информацию о географическом положении по всему миру. Коммуникации GPS доступны на многих телефонах и планшетных ПК с ОС Android. Во многих случаях устройство GPS работает также как датчик положения. Оно может предоставлять точные данные о местоположении для работающих на устройстве приложений. На платформе Android устройство GPS не управляется непосредственно инфраструктурой датчиков. Вместо этого сервис определения местоположения Android взаимодействует и передает данные GPS в приложения через вызовы приемника местоположения.

В этом разделе рассматриваются только сервисы GPS и определение местоположения, как если бы это был аппаратный датчик. Обычно объем стратегий определения местоположения, используемые в ОС Android 4.2 в аппаратных платформах телефонов и планшетных ПК на базе процессоров Intel Atom, значительно больше, и данная тема и выходит за рамки настоящей статьи.

Сервисы определения местоположения Android

Использование GPS не является единственным способом получения информации о местоположении устройства Android. Система также может использовать Wi-Fi*, сотовые или другие беспроводные сети, чтобы получить данные о текущем местоположении устройства. GPS и беспроводные сети (включая Wi-Fi и сотовые сети) выступают в качестве "поставщиков данных определения местоположения"для сервисов Android. В таблице 9 перечислены основные классы и интерфейсы, используемые для доступа к сервисам определения местоположения в ОС Android.

Таблица 9. Сервисы определения местоположения платформы Android
ИмяТипОписание
LocationManagerКлассИспользуется для доступа к сервисам определения местоположения. Предоставляет различные методы для запроса периодических обновлений данных местоположения для приложения или для отправки предупреждений о приближении
LocationProviderАбстрактный классАбстрактный супер-класс для поставщиков определения местоположения
МестоположениеКлассИспользуется поставщиками данных местоположения для инкапсуляции географических данных
LocationListenerИнтерфейсИспользуется для получения оповещений о местоположении из LocationManager

Получение обновлений данных GPS о местоположении

По аналогии с механизмом использования инфраструктуры датчиков для получения данных датчиков, приложение использует несколько методов вызовов, определенных в интерфейсе LocationListener для сбора обновлений данных GPS о местоположении. LocationManager отправляет в приложение оповещения об обновлениях данных GPS с помощью этих вызовов (правило – "Не звоните нам, мы сами обратимся к вам").

Для получения данных GPS о местоположении в приложении нужно запросить разрешение на получение точной информации о местоположении в вашем файле манифеста Android (пример кода 10).

<manifest …>
…
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
…  
</manifest>

Пример кода 10.Запрос разрешения на получение точной информации о местоположении в файле манифеста**

В примере кода 11 представлено, как получать обновления данных GPS и отображать координаты широты и долготы в текстовом диалоге.

package com.intel.deviceinfo;

import android.app.Dialog;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;

public class GpsDialog extends Dialog implements LocationListener {
    TextView mDataTxt;
    private LocationManager mLocationManager;
	
    public GpsDialog(Context context) {
        super(context);
        mLocationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
	       mDataTxt = (TextView) findViewById(R.id.sensorDataTxt);
          mDataTxt.setText("...");
		
        setTitle("Gps Data");
    }
	
    @Override
    protected void onStart() {
        super.onStart();
        mLocationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 0, 0, this);
    }
		
    @Override
    protected void onStop() {
        super.onStop();
        mLocationManager.removeUpdates(this);
    }

    @Override
    public void onStatusChanged(String provider, int status, 
        Bundle extras) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    @Override
    public void onLocationChanged(Location location) {
        StringBuilder dataStrBuilder = new StringBuilder();
        dataStrBuilder.append(String.format("Latitude: %.3f,   Logitude%.3fn", location.getLatitude(), location.getLongitude()));
        mDataTxt.setText(dataStrBuilder.toString());
		
    }
}

Пример кода 11.  Диалог, отображающий данные GPS о местоположении**

Принципы настройки и оптимизации производительности сервисов GPS и определения местоположения

Сервис GPS предлагает наиболее точную информацию о местоположении устройства. С другой стороны, являясь аппаратным компонентом, он потребляет дополнительную энергию. Также требуется время, чтобы сервис GPS мог получить первые данные о местоположении. Далее приведено несколько рекомендаций, которые вы должны учитывать при разработке приложений с сервисами GPS и определения местоположения:

  • Используйте всех доступных поставщиков данных о местоположении
    В дополнение к сервису GPS_PROVIDER есть сервис NETWORK_PROVIDER. Если приложению нужно получить лишь грубые данные о местоположении, вы можете использовать только сервис NETWORK_PROVIDER.
  • Используйте кэшированные местоположения
    Требуется время, чтобы сервис GPS мог получить первые данные о местоположении. Когда ваше приложение ожидает данные от сервиса GPS, чтобы получить их точное обновление, для выполнения части работы вы можете сначала использовать местоположения, предоставляемые методом getlastKnownLocation() в классе LocationManager.
  • Минимизируйте количество и продолжительность запросов для обновления данных о местоположении
    Вы должны запрашивать обновления данных о местоположении только в случае необходимости и оперативно отменять регистрацию менеджера местоположений, как только данные сервисы более не будут нужны.

Заключение


Платформа Android предлагает разработчикам прикладные программные интерфейсы для обеспечения доступа к встроенным датчикам устройств. Эти датчики способны предоставлять исходные данные о текущем перемещении, положении устройства, а также о состоянии окружающей среды с высокой степенью точности и достоверности. При разработке приложений, использующих датчики, вы должны следовать признанным рекомендациям для повышения производительности и эффективности энергопотребления.

Об авторе

    Мао Вэй (Miao Wei) трудится инженером-программистом в подразделении программного обеспечения и услуг корпорации Intel. В настоящее время он работает в проектах по расширению сфер применения процессоров Intel® Atom™    .



 

 

 

© Корпорация Intel, 2013 г. Все права защищены.
*Другие наименования и товарные знаки являются собственностью своих законных владельцев.

**Этот пример исходного кода опубликован на условиях лицензионного соглашения о примерах исходного кода корпорации Intel


Intel® Hardware Accelerated Execution Manager

$
0
0

Последнее обновление: 5 ноября, 2013 г.

Intel Hardware Accelerated Execution Manager (Intel® HAXM) - это приложение с поддержкой аппаратной виртуализации (гипервизор), которое использует технологию виртуализации Intel для ускорения эмуляции приложений Android на компьютере для разработки. В сочетании с эмулятором образов Android x86, предоставляемым Intel, и официальным комплектом Android SDK Manager, ПО HAXM позволяет ускорить эмуляцию приложений Android на системах с технологией виртуализации Intel.

ПО Intel HAXM поддерживает следующие платформы:

Microsoft Windows*
Windows 8 (32/64-разрядная), Windows 7 (32/64-разрядная), Windows Vista* (32/64-разрядная), Windows XP (только 32-разрядная)

Руководство по установке и системные требования - Windows

haxm-windows_r04.zip (1.0.8)
Описание:
Системный драйвер
(15 апреля 2014 г.)
Размер: 1.93 МБ
Контрольные суммы:
(MD5)
dbec9d4145a2a7acdf19cb10eb7a9539
(SHA-1)
cc72b38962fc53823f969d4fb9155f9efa3558b8

Mac OS* X
ПК MAC на базе платформ Intel с Mac OS X 10.6 и более поздними (32/64-разрядная)

Руководство по установке и системные требования - Mac OS X

haxm-macosx_r04.zip (1.0.8)
Описание:
Системный драйвер
(15 апреля 2014 г.)
Размер: 245 КБ
Контрольные суммы:
(MD5)
a34986b66a55a4bebbc939927339b54a
(SHA-1)
e3d68c7d59f0f8b289cdc38e203d0952917bf2cb

Linux
Ubuntu (64-разрядная)

Руководство по установке и системные требования - Linux

Партнерство с корпорацией Intel - изменения

$
0
0

Партнерство с корпорацией Intel - изменения.

В качестве части наших изменений Intel Developer Zone мы приняли решение упростить отношения партнеров с корпорацией Intel. Для совершенствования наших отношений мы собираемся упростить процесс регистрации, отменить систему начисления баллов, заменив ее 3-мя различными типами групп:

Участники со статусом Premier Elite

Партнеры, отдельно выбранные менеджером по работе с клиентами для утверждения статуса и формирования маркетинговых инициатив.

Участники со статусом Premier

Партнеры, предоставившие информацию о своей компании и программном обеспечении.

Участники программ Intel® DZ

Зарегистрированные посетители веб-сайта IDZ.

Вопросы и ответы

Что это значит для бывших партнеров со статусом Premier Elite, не имеющих менеджера по работе с клиентами?
Ваш статус партнера будет изменен на статус "Premier".

Что это значит для лишь зарегистрированных партнеров, имеющих профиль программного обеспечения и компании?
Ваш статус партнера будет изменен на статус "Premier".

Как получить статус Premier Elite?
Получение статуса Premier Elite будет теперь доступно только по приглашению, однако мы всегда стремимся находить интересные компании и приложения, поэтому призываем вас уже сейчас заполнить свой профиль программного обеспечения и компании, и возможно, мы свяжемся с вами.

Добавление поддержки мультисенсорного ввода в игры Unity* для Microsoft Windows* 7 и классического интерфейса Windows* 8

$
0
0

By Steve Hughes

Загрузка


Adding Multi-Touch Support to Unity* Games on Microsoft Windows* 7 and Windows* 8 Desktop [Eng., PDF 299.45 KB]
Check1.cs [ZIP 3.52 KB]
DLLMain.cpp [ZIP 8.21 KB]

Аннотация


В настоящее время Unity не обрабатывает сообщения касания в приложениях, работающих под управлением Windows 7 и классического интерфейса Windows 8. Мы предлагаем решение, с помощью которого разработчики могут получить доступ к доступным событиям мультисенсорного ввода в приложениях Unity, работающих под управлением Windows. Это решение выполнено в виде подключаемого модуля, использующего различные API-интерфейсы Windows для перехвата сообщений касания, отправляемых приложению. Мы обрабатываем информацию из этих сообщений касания, а затем создаем простой набор данных, доступ к которому возможен с помощью C# из сценария в приложении Unity.

1. Обработка сообщений касания в Windows

Процесс обработки сообщений касания хорошо задокументирован в сети MSDN и в других местах, но мы упомянем определенные моменты, имеющие отношение к обсуждаемому вопросу. WNDPROC активного окна получает сообщение WM_TOUCH, когда происходит событие касания. После получения сообщения приложение вызывает GetTouchInputInfo() для заполнения массива структур PTOUCHINPUT по одной для каждой точки касания на поверхности. Нижнее слово параметра wParam, переданного WNDPROC, содержит количество записей PTOUCHINPUT в массиве.

В этом случае нас особо интересует член dwID структур PTOUCHINPUT. Этот идентификатор связывает определенную запись PTOUCHINPUT с записями, предоставленными прежним вызовам GetTouchInputInfo(). Это обеспечивает временную продолжительность точки касания. Многие приложения пытаются найти предыдущую точку касания как можно ближе к новой точке и предполагают, что они совпадают. Это не всегда верно. Например, множество касаний могут приходиться близко друг от друга или пересекаться друг с другом на экране.

Данные касания можно связать с информацией о точке касания после ее получения из прежних вызовов GetTouchInputInfo(). После этого данные соответственным образом обрабатываются приложением. В приложениях Unity требуются дополнительные действия для образования информации о касаниях в сценариях C#, управляющих работой приложения.

2. Использование подключаемых модулей в Unity

Подключаемые модули Unity компилируются в виде DLL-библиотек, механизм экспорта хорошо задокументирован. «Экспортированные функции» остаются такими же в подключаемых модулях Unity, какими они являются в любых других DLL-библиотеках. Подключаемый модуль может быть написан на любом языке, если компилятор способен создать выходной файл DLL, а экспортированные функции всегда можно вызвать из сценария C# в Unity.

Экспортированные функции можно вызвать напрямую из сценария C# после загрузки подключаемого модуля Unity. В C# для доступа к экспортированным функциям достаточно просто объявить их в сценарии C# как extern. Например, предположим, что экспортированная функция из DLL-библиотеки C++ с именем MyPlugin имеет следующий заголовок:

__declspec(dllexport) int __cdecl Init(int p);

Для доступа к ней из C# объявим ссылку типа extern на нее.

[dllimport (“MyPlugin”)] private static extern int Init(int p);

Затем вызовем функцию Init (int) в сценарии.

3. Реализация интерфейса касаний с помощью подключаемого модуля

Для успешного получения сообщений касания Windows, направленных для приложения Unity, нужно выполнить несколько действий. Сначала мы опишем действия, а затем завершим процесс с помощью комментариев в исходном коде.

Процедура настройки для подключаемого модуля включает присоединение обработчика с помощью SetWindowsHookEx() для получения сообщений WM_TOUCH для приложения Unity. Для этого требуются две вещи: дескриптор модуля DLL и идентификатор потока, создавшего окно Unity, имеющее фокус. Для получения идентификатора потока, создавшего окно Unity, нужно сначала найти его дескриптор. Запись DLLMain() в DLL покажет дескриптор модуля. Самый простой способ найти дескриптор окна Unity — передать имя окна Unity из C# в подключаемый модуль, а затем перечислить все окна рабочего стола в подключаемом модуле с помощью EnumDesktopWindows(), чтобы найти дескриптор. Когда окно будет найдено, можно получить его дескриптор. Имея дескриптор окна, вызовите GetWindowThreadProcessID() для получения идентификатора потока, необходимого для вызова SetWindowsHookEx().

В коде видно, что SetWindowsHookEx() вызывается дважды; установлено два обработчика: один присоединен к WH_GETMESSAGE, другой к WH_CALLWNDPROC. Дело в том, что сообщения WN_TOUCH прибывают в WNDPROC в Windows 7 не так, как в Windows 8. В Windows 7 сообщения публикуются в очередь. В Windows 8 они напрямую вставляются в WNDPROC. Не забудьте высвободить обработчики Windows по завершении работы, поскольку они являются ограниченным ресурсом в ОС.

AПо умолчанию приложения не поддерживают касания. Чтобы приложение Unity могло получать сообщения касаний, подключаемый модуль должен вызвать RegisterTouchWindow(), чтобы включить эти сообщения. Для этого вызова потребуется предварительно получить обработчик окон.

По завершении наши обратные вызовы будут вызываться всякий раз при отправке сообщений окну Unity. Остается всего лишь отслеживать сообщения касания, а остальные сообщения возвращать в Unity.

4. Обработка данных касания

Для доступа к данным касания, полученным из подключаемого модуля, предусмотрены две экспортированные функции. Их можно изменить, если целесообразнее использовать другой интерфейс. Давайте уточним, как происходит использование данных.

Int GetTouchPointCount() возвращает целое число, представляющее количество контактных точек, активных в данный момент на экране.

Void GetTouchPoint(int ID, tTouchData Data) возвращает активную точку касания с идентификатором индекса из подключаемого модуля.

Как мы упомянули выше, для данных, предоставляемых вызовом метода GetTouchPoint(), требуется точность для поддержания временной согласованности при обработке точек касания в Unity. Подключаемый модуль поддерживает внутренний список активных точек и старается соблюдать идентификаторы, назначенные операционной системой Windows. Идентификаторы Windows не совпадают с идентификатором, предоставленным экспортированной функции GetTouchPoint(). Опросите структуру tTouchData для выяснения фактического идентификатора точки касания, чтобы поддерживать временную целостность между кадрами.

5. Заключение

Хотя движок Unity сам по себе не обрабатывает сообщения касания в приложениях для Windows 7 и классического интерфейса Windows 8, можно зарегистрировать окно Unity для получения касаний от подключаемого модуля. После регистрации окна определенные приемы предоставляют нам доступ к сообщениям касания в сценарии приложения Unity. Многие разработчики ценят Unity, поскольку это интуитивно понятное и гибкое средство, позволяющее быстро разрабатывать весьма привлекательные и мощные игры. Доступ к сенсорному вводу в Unity значительно расширит ваши возможности по созданию динамичных игр и приложений мультимедиа для современных сенсорных устройств под управлением Windows.

Ресурсы


 

Intel и эмблема Intel являются товарными знаками корпорации Intel в США и в других странах.
© Intel Corporation, 2013. Все права защищены.
*Прочие наименования и товарные знаки могут быть собственностью третьих лиц.

Обработка сенсорного ввода в приложениях Windows* 8

$
0
0

Cкачать статью

Скачать Handling touch input in Windows* 8 Applications [Eng., PDF 745KB]

Поскольку все больше устройств поддерживает сенсорный ввод, обработка сенсорных методов взаимодействия в приложениях становится все более важной.

Стандартные элементы управления и шаблоны Windows* 8 идеально обрабатывают сенсорный ввод,поэтому, если вы пользуетесь только ими, вам нет необходимости разбираться в технических подробностях.

Если же вы работаете с классическим приложением или хотите разработать собственные элементы управления (например, для игры), то вы должны знать, как правильно обрабатывать сенсорный ввод.

При этом приложения, которые работали под управлением Windows 7, продолжат работать:

  • Если ваше приложение обрабатывает только события мыши, то события касания будут сведены к ним (не будет только события наведения указателя мыши).
  • Если ваше приложение использует события касания Windows 7 (API-интерфейсы WM_TOUCH/WM_GESTURE), то все в порядке, эти API по-прежнему доступны.

В обоих случаях можно подумать над доработкой приложения с использованием новых API ввода Windows 8, поскольку они помогут обеспечить однородность с другими приложениями и в целом повысить удобство для пользователей.

Если ваше приложение изначально не было предназначено для обработки сенсорного ввода, вам также может потребоваться доработать пользовательский интерфейс, чтобы сделать его более пригодным для сенсорного управления: увеличить размер элементов управления, убрать лишние элементы и т. п. Советы по проектированию интерфейсов для сенсорного управления см. здесь: Designing for Ultrabook™ Devices and Touch-enabled Desktop Applications

Разработка для сенсорного управления без сенсорного устройства

Если у вас нет сенсорных устройств, можно опробовать ваше классическое приложение или приложение для Магазина Windows в имитаторе Windows 8, который входит в состав Visual Studio* 2012 на платформе Windows 8.

Эта программа находится в папке C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Simulator\11.0\Microsoft.Windows.Simulator.exe.

В нем можно запускать любое приложение, как в обычном сеансе работы:

Приложения для Магазина Windows 8 также можно запускать напрямую в имитаторе из Visual Studio:

Затем в правой части окна имитатора можно выбрать режим взаимодействия по умолчанию. По умолчанию используется мышь, но нас интересуют три других режима: одиночное касание, сведение для масштабирования и режимы вращения.

Для режимов двойного касания используется щелчок левой кнопкой мыши и колесико мыши для масштабирования или поворота.

Сенсорное взаимодействие в Windows 8

Чтобы ваше приложение было удобным для пользователей, используемые в нем жесты должны совпадать со стандартными жестами в ОС:

Источник: //build/ 2011 - APP-391T

Принцип ввода указателя

Общие сведения

Обработка в приложениях сразу нескольких методов ввода может сильно все усложнить. К счастью, в Windows 8 корпорация Microsoft внедрила объединенный ввод с помощью элемента Pointer (Указатель):

Метод ввода Pointer объединяет методы ввода мышью, пером и касаниями и является абстракцией этих методов ввода. Кодирование для указателей дает возможность обрабатывать все эти методы ввода, написав код всего один раз.

События указателя — самое простое, с чем вы столкнетесь. Вы можете получить их для любого элемента пользовательского интерфейса Windows 8 XAML, а также для ICoreWindow. Со стороны HTML5 эти элементы доступны, но их имена несколько отличаются. Они имеют префикс MS: MSPointerDown, MSPointerMove, MSPointerUp.

Эквивалентами событий указателя в Win32* являются сообщения WM_POINTERXXX, которые можно получать в функции обратного вызова окна Win32. По умолчанию в приложениях Win32 сообщения WM_POINTERXXX не включают сообщения мыши. Чтобы получать действительно объединенные сообщения указателя, нужно сначала вызвать EnableMouseInPointer(true).

События указателя (XAML / JS / Win32)

Объекты более высокого уровня, такие как элементы пользовательского интерфейса XAML, предоставляют события жестов и манипуляций напрямую:

События жестов

  • Tapped
  • DoubleTapped
  • RightTapped: длительное касание, равноценное щелчку правой кнопкой мыши.
  • Holding / MSGestureHold: срабатывает перед высвобождением указателя.

События манипуляции

События манипуляции также могут предоставлять информацию о масштабировании, повороте и прокрутке. Кроме того, они предоставляют данные инерции. Их можно настроить с помощью ManipulationModeдля переключения инерции. Можно разрешить только определенные виды взаимодействия/добавить ограничения (например, направляющие для преобразования в движение по осям X/Y).

В приложениях для Магазина Windows Windows 8, написанных на HTML5/JavaScript*, можно использовать метод WinRT GestureRecognizerдля доступа к этим событиям.

Если приложение также должно работать в IE10 (т. е. без WinJS), можно использовать объект MSGesture. Он будет переключать следующие события, равноценные событиям манипуляции: MSGestureStart, MSGestureEnd, MSInertiaStart и MSManipulationStateChanged, а также следующим событиям жестов: MSGestureTap, MSGestureHold.

Примечание. События манипуляции также доступны для классических приложений C#/WPF 4.x в том виде, как они работали под управлением Windows 7, без ManipulationMode.

Обзор API-интерфейсов Windows 8

Если объект, с которым вы работаете, не переключает события жестов, можно отправить события указателя интерфейсу GestureRecognizer. GestureRecognizer переключит выбранные события жестов и манипуляций, а также события перетаскивания и поперечной прокрутки.

InteractionContext в Win32 является эквивалентом GestureRecognizer в API Windows Runtime. Объект Interaction Contextпереключает INTERACTION_CONTEXT_OUTPUT_CALLBACK, связанный с другими жестами и манипуляциями.

Кроме того, в сенсорное приложение можно встроить интерфейс InkRecognizer. Он позволяет распознавать рукописный ввод в классических приложениях и в приложениях для Магазина Windows 8.

Также можно внедрять события касания из классических приложений с помощью API Touch Injection API.

Сводка по способам интеграции возможностей сенсорного управления в приложения

Вот краткая сводка по способам обработки сенсорного ввода в зависимости от объектов и типов приложений, с которыми вы работаете:

Application TypeObjectMethod

Win32*

Window

WM_POINTERXXX

WM_TOUCHHITTESTING 

Desktop C#/WPF apps

UIElement

OnManipulationXXX(…)и OnTouchXXX(…)

JS/HTML (Windows* Store или IE10)

HTML elements

События MSPointerXXX

События MSGestureXXX (требуется объект MSGesture для переключения)

Windows Store – C#/C++

ICoreWindow

PointerXXX

События TouchHitTesting

Windows Store - XAML

UIElement

PointerXXX

ManipulationXXX

События XXXTapped

Windows Store – XAML

Control

OnPointerXXX(…)

OnManipulationXXX(…)

OnXXXTapped(…)

Windows Store (XAML & JS/HTML)

ListView, FlipView, ScrollViewer и пр.

Seamless

Образцы кода

Win32* touch/Interaction Context sample – Intel

Windows* 8 gestures C#/JS sample – MSDN

DirectX* Touch input C++ sample – MSDN

 

InkRecognizer JS sample – MSDN

 

Intel, эмблема Intel и Ultrabook являются товарными знаками корпорации Intel в США и в других странах.

© Intel Corporation, 2012. Все права защищены.

*Прочие наименования и товарные знаки могут быть собственностью третьих лиц.

Положения и условия, касающиеся получения статусов участия «Партнер-разработчик ПО Intel®» и «Мастер программирования, черный пояс Intel®»

$
0
0

Ваш вклад в деятельность сообщества Intel® Developer Zone оценивается посредством присвоения титула программы «Мастер программирования, черный пояс Intel®». Наряду с участием в сообществах Intel® Developer Zone ваша компания может получить статус «Партнера-разработчика ПО Intel®».

Статус программы «Мастер программирования, черный пояс Intel®» представляет собой систему признания и рейтингов, которая призвана оценивать качество и объем вклада и участия членов программы.

Дополнительные положения Intel® Developer Zone
Политика конфиденциальности Intel®
Условия использования Intel®

Индивидуальный вклад и признание

1. Корпорация Intel создает учетные записи, которые используются для оценки вклада и регистрации баллов, набранных каждым участником программы. Участник может зарабатывать баллы, внося свой вклад в деятельность сообществ Intel Developer Zone. Для регистрации баллов участники должны выполнить вход в Intel Developer Zone.

2. Вы сможете зарабатывать баллы в соответствии со своим участием в сообществах Intel Developer Zone и посредством регистрации программного кода, предназначенного для совершенствования платформ Intel, представляя свои приложения, данные, профиль, примеры кода, видеоролики, статьи, технические документы, сообщения, блоги, комментарии, рейтинги и конкурсные работы в течение срока участия в программе.

3. Вы должны набрать определенное количество баллов для достижения определенного статуса и различных уровней признания и получения наград. Каждый из данных факторов может в любое время измениться, и тогда мы предложим вам иные или более конкретные условия, которые в каждом случае будут соответствовать присваиваемым баллам, а также статусам и наградам.

4. Баллы будут начисляться и накапливаться за различные виды участия, например, за примеры программного кода, видеоролики, статьи, технические материалы, сообщения, блоги, комментарии, рейтинги, конкурсные работы в соответствии с информацией, представленной на странице часто задаваемых вопросов программы «Мастер программирования, черный пояс Intel» по адресу: http://software.intel.com/ru-ru/blackbelt.

5. Уровни участия и призы: статус «Мастер программирования, черный пояс Intel®» имеет четыре различных уровня участия со следующими требованиями правомочности и преимуществами:

5.1. Мастер программирования, зеленый пояс Intel.
Преимущество:титул «Мастер программирования, зеленый пояс Intel» предоставляется за регулярное участие в жизни сообществ Intel Developer Zone с отображением в профиле пользователя соответствующего значка. Данный титул предоставляется на 12 календарных месяцев.
Требование:участник должен набрать не менее 50 баллов в течение 12 месяцев.
Подтверждение квалификации:участник должен набрать не менее 50 баллов в течение 12 месяцев с даты получения статуса «Мастер программирования, зеленый пояс Intel».

5.2. Мастер программирования, коричневый пояс Intel.
Преимущество:статус «Мастер программирования, коричневый пояс Intel» показывает значимость его владельцев в Intel Developer Zone и их активный вклад в деятельность сообщества. Такие участники имеют значок «Мастер программирования, коричневый пояс Intel®», отображаемый в профиле, а также могут выбрать один из представляемых призов, имеющих розничную цену в размере 50 долл. США. После получения статуса участникам предлагаются различные призы, которые определяются руководством программы Intel «Черный пояс».
Требование:участник должен набрать не менее 500 баллов в течение 12 месяцев.
Подтверждение квалификации:участник должен набрать не менее 500 баллов в течение 12 месяцев с даты получения титула «Мастер программирования, коричневый пояс Intel».

5.3. Мастер программирования, красный пояс Intel.
Преимущество:статус «Мастер программирования, красный пояс Intel» показывает ведущую роль его владельцев в Intel Developer Zone и их активный вклад в деятельность сообщества. Такие участники имеют значок «Мастер программирования, красный пояс Intel®», отображаемый в профиле, а также могут выбрать себе один из представляемых призов, имеющих розничную цену в размере 150 долл. США. (Награждается один раз во время присвоения титула). Доступные призы различны и определяются руководством программы Intel «Черный пояс».
Требование:участник должен набрать не менее 5000 баллов в течение 12 месяцев.
Подтверждение квалификации:участник должен набрать не менее 5000 баллов в течение 12 месяцев с даты получения статуса «Мастер программирования, красный пояс Intel».

5.4. Мастер программирования, черный пояс Intel®.
Титул «Мастер программирования, черный пояс Intel®» присваивается участникам программ Intel Developer Zone, номинированным группой экспертов за качество, объем, знания и технический опыт, который участники привносят в деятельность сообществ Intel.

Преимущество:статус «Черный пояс» является наивысшим уровнем индивидуального признания. Каждый участник, имеющий этот титул, встретится с группой экспертов Intel и получит следующее. Данные преимущества могут быть изменены в любое время без предварительного уведомления.

  • Ценный подарок: куртка ИЛИ сумка для ноутбука с логотипом Intel. (Награждается один раз во время присвоения титула и имеет примерную розничную стоимость 70 долл. США.)
  • Памятная табличка в честь статуса пользователя «Мастер программирования, черный пояс Intel®». (Награждается один раз во время присвоения титула).
  • Один ноутбук на базе высокопроизводительного микропроцессора Intel, который доступен в это время на рынке и приблизительная розничная стоимость которого составляет 1800 долл. США. Этот ноутбук присуждается только один раз во время первой номинации участника на титул, и не присуждается во время повторной квалификации.
  • Бесплатный билет на форум разработчиков Intel (приблизительная розничная стоимость варьируется в зависимости от страны проведения: до 1600 долл.США). (Присуждается каждый год после подтверждения участия в программе).
  • Персональный профиль с занесением на страницу почета «Черный пояс» Intel Developer Zone.
  • Интервью/видео-интервью, опубликованное на сайте Intel Developer Zone.
  • Возможность встретиться с инженерами корпорации Intel на мероприятиях и семинарах (участнику могут быть оплачены командировочные расходы в качестве льгот программы). (Награждается каждый год во время присвоения титула).
  • Возможность ведения собственного блога на сайте Intel Developer Zone.

5.5. Внеочередное присвоение титула «Мастер программирования, черный пояс Intel»:
Это внеочередное признание заслуг участников, которые демонстрируют исключительную поддержку сообщества, показывают приверженность и стремление к инновациям. В настоящее время не существует установленных периодов или обязательств по присуждению этого титула. Призы присуждаются периодически по усмотрению корпорации Intel.

5.6. Участники будут извещаться по электронной почте об изменениях их уровня участия и присужденных призах.

5.7. Баллы будут аннулированы, если соответствующая учетная запись будет закрыта или завершится действие титула программы «Мастер программирования, черный пояс Intel®».

5.8. Если вы более не соответствуете минимальным установленным критериям текущего уровня участия, вы не будете повторно номинированы на получение текущего статуса участия, а ваш титул будет изменен или понижен до уровня соответствующей квалификации без предварительного уведомления. Вы по-прежнему также должны соответствовать требованиям пониженного уровня участия. При этом ваша учетная запись участника будет обновлена соответствующим образом.

5.9. Возможно, вы будете должны подписать освобождающие от ответственности документы, декларации соответствия требованиям и, там где это требуется по закону, согласие на публикацию в течение 5 (пяти) дней после подтвержденного уведомления о признании и награждении. Если с участником не удастся связаться (на условиях этих правил или из-за несоблюдения любых других применимых политик, условий лицензий, правил и предоставления услуг, участник не сможет претендовать на приз, или, если он своевременно не возвратит заполненные и вступившие в силу необходимые документы/соглашения), призы и награды, по усмотрению корпорации Intel, могут быть аннулированы. Материальные призы для победителей будут отправлены разработчикам в течение шести (6) недель от даты отправки извещения по электронной почте или после получения подтверждения почтового адреса награжденного разработчика, или в соответствии с тем, что из указанного выше произойдет ранее.

5.10. Призы и награды предоставляются лично разработчику, внесшему свой вклад и добившемуся определенного уровня участия, и обычно не могут быть переданы другому лицу. Все призы и награды в любой момент могут быть заменены в зависимости от их доступности. Корпорация Intel может заменить присужденные призы и награды на другие, имеющие сопоставимую или большую стоимость.

5.11. Разработчик несет ответственность за уплату всех федеральных, государственных и местных налогов и сборов, связанных с полученными призами и наградами. Разработчик несет полную ответственность за получение всех разрешений и прав на сбор и получение призов в соответствии с законами страны своего проживания. Эта программа недействительна там, где ее условия запрещены или ограничены законодательством и входят в противоречие с действующими федеральными, государственными и местными законами. Если разработчик проживает в одной из стран Латинской Америки, денежные призы по усмотрению корпорации Intel будут заменены на товары и/или услуги равнозначной стоимости.

5.12. Корпорация Intel не предоставляет никаких гарантий в отношении призов и наград. В наивысшей, допустимой законом, степени корпорация Intel отказывается от любых обязательств или гарантий, явных или подразумеваемых в отношении призов и наград, в том числе подразумеваемых гарантий в отношении товарной пригодности или пригодности для конкретных целей и гарантий, возникающих в ходе заключения сделок, или в ходе их выполнения.

5.13. Наши единственные обязательства в отношении программы «Мастер программирования, черный пояс Intel®» изложены в данных правилах, которые действуют в соответствии с законами штата Делавэр. Мы будем нести ответственность только перед участниками, которые получат ущерб в результате нарушения нами этих правил, и в таком случае, наша единственная ответственность будет заключаться в кредитовании вклада соответствующей учетной записи участника, который был ошибочно занижен или должен был быть поощрен, но этого не произошло. Эти положения и условия должны действовать в случае любого конфликта или несоответствия с любыми другими документами, включая рекламные или демонстрационные материалы.

5.14. Если корпорация Intel неправомерно отказывает вам в получении любых призов, наград или баллов, полная ответственность Intel и ваше единственное и исключительное право ограничивается предоставлением эквивалентного количества призов, наград и баллов, как это указано ранее. Участвуя в программе, вы отказываетесь от любых и всех прав на предъявление любых претензий или действий, относящихся к таким вопросам на любом форуме в течение одного (1) года после первого случая такого действия, события, условия или ошибки, на которой был основан состав претензии.

5.15. Если по каким-либо причинам эта программа не будет функционировать так, как планировалось из-за заражения компьютерным вирусом, ошибок, какого-либо ущерба, несанкционированного вмешательства, мошенничества, технических неполадок или по любым другим причинам, не зависящим от корпорации Intel, и которые нарушают и оказывают воздействие на управление, безопасность, справедливое исполнение, честность или надлежащее проведение этой программы, корпорация Intel оставляет за собой право по своему усмотрению дисквалифицировать любое лицо, которое вмешивается в процесс участия или голосование, а также закрыть, прервать, изменить или приостановить действие данной программы.

5.16. Корпорация Intel не несет никакой ответственности за любые ошибки, упущения, прерывание, удаление, дефекты, задержки в работе или ошибки, возникающие при передаче данных, повреждения линий связи, кражу, уничтожение или несанкционированный доступ или искажение данных участников. Корпорация Intel не несет ответственность за любые проблемы или технические неисправности любых телефонных сетей или телефонных линий, онлайновых компьютерных систем, серверов или провайдеров, компьютерного оборудования, программного обеспечения, за ошибки электронной почты или учетных записей, которые будут получены Intel в связи с техническими проблемами, человеческим фактором или чрезмерным трафиком в Интернете или на любом веб-сайте, или в случае любых их комбинаций, включая любые повреждения или неисправности компьютеров разработчиков или любых других лиц, возникшие в связи или в результате участия в этой программе, или после загрузки любых материалов в рамках этой программы.

5.17. Организатором этой программы является корпорация Intel. Программа проводится:
Intel Corporation Software & Services Group - Intel Developer Zone 2111 NE 25th Ave, Hillsboro OR 97124, USA

Вклад организации и ее признание

6. Участие организаций в программе основано на двух уровнях. Квалификационные критерии участия для каждого из этих уровней можно найти по адресу: https://software.intel.com/ru-ru/articles/partnering-with-intel-whats-changed

6.1. Участник программы Intel® Software Partner со статусом Premier Elite

6.2. Участник программы Intel® Software Partner со статусом Premier

7. Терминология, используемая участниками программы

Являясь участником программы Intel Software Partner, вы можете использовать только наименование участника программы Intel Software Partner и уровень участия вашей компании для текстового или устного представления в соответствии с правилами использования товарных знаков, с которыми можно ознакомиться на странице http://software.intel.com/ru-ru/articles/program-terminology

8. ПРОДОЛЖИТЕЛЬНОСТЬ, ИЗМЕНЕНИЕ И ПРЕКРАЩЕНИЕ УЧАСТИЯ

Настоящие положения и условия программы начинают действовать с «Даты вступления в силу». Вы получите от корпорации Intel письменное уведомление в традиционном или электронном виде с указанием даты начала действия вашего участия в программе («Дата вступления в силу»). Ваше участие завершится через четыре (4) полных квартала после Даты вступления в силу, если только участие в программе не будет прекращено досрочно в соответствии с дополнительными условиями Intel® Developer Zone. По истечение четырех (4) полных кварталов после Даты вступления в силу, корпорация Intel рассмотрит ваш текущий статус участия и может продлить его еще на четыре (4) полных квартала при условии, что на текущий момент вы будете удовлетворять соответствующим квалификационным требованиям и связанным с ними условиям участия или, иначе говоря, в соответствии с данными условиями участия.

Krita* Gemini* - Новые возможности на устройствах 2 в 1

$
0
0

Загрузить PDF [Eng]

Почему устройства 2 в 1?

Устройство 2 в 1— это компьютер, который может быть как ноутбуком, так и планшетом. В режиме ноутбука (настольном режиме) основными устройствами ввода являются клавиатура и мышь. В режиме планшета для ввода используется сенсорный экран, то есть применяется касание пальцами или пером. Устройство 2 в 1, как и ультрабук Intel®, обеспечивает точность и управляемость при использовании любых методов ввода: можно печатать на клавиатуре при работе, или управлять касаниями в играх.

Разработчикам приходится рассматривать разные сценарии в своих приложениях, чтобы использовать преимущества нового типа устройств. У некоторых приложений в обоих режимах можно сохранить одинаковое меню и внешний вид. В других программах, таких как Krita Gemini для Windows* 8, функции и элементы интерфейса в разных режимах будут различаться. Krita — это программа для создания набросков и рисования. Это полнофункциональное решение для создания цифровых изображений с нуля. В этой статье описывается, как разработчики Krita реализовали определение режима устройства 2 в 1, включая автоматическое переключение режима и переключение режима пользователем. Кроме того, рассматриваются определенные области, о которых разработчикам следует позаботиться при реализации приложений 2 в 1.

Введение

В ходе многолетнего развития компьютерной техники применялись самые разные методы ввода, от перфокарт и командной строки до указателей, таких как мышь. С появлением сенсорных экранов для выбора объектов на экране можно использовать не только мышь, но также пальцы и перо. В большинстве случаев далеко не все задачи удобно выполнять с сенсорным управлением, но в приложениях с возможность выбора метода ввода, таких как Krita Gemini, в этом и нет нужды. Устройства 2 в 1 позволяют выбрать наиболее удобный режим пользовательского интерфейса на одном устройстве.

Устройство 2 в 1 может переводиться из режима ноутбука в режим планшета и обратно разными способами (Рис. 1 и Рис. 2). Множество примеров доступно на сайте Intel. Устройство можно перевести в режим планшета из режима ноутбука, отсоединив экран от клавиатуры либо отключив клавиатуру и сделав экран основным устройством ввода (например, сложив экран поверх клавиатуры). Производители компьютеров предоставляют информацию о смене режима работы оборудования операционной системе. Событие API Windows* 8 WM_SETTINGCHANGE и текстовый параметр ConvertibleSlateModeсигнализируют об автоматическом переключении в режим планшета и обратно в режим ноутбука. Кроме того, разработчикам рекомендуется для удобства пользователей добавить и кнопку, чтобы можно было переключать режимы вручную.

Устройства 2 в 1 могут переключаться между режимами планшета и ноутбука разными способами; аналогично можно создать и программу таким образом, чтобы она разными способами реагировала на переключение режимов. В некоторых случаях в режиме планшета следует сохранить пользовательский интерфейс как можно более близким к режиму ноутбука; в других случаях можно внести довольно существенные изменения. Корпорация Intel сотрудничает со многими поставщиками, чтобы помочь им реализовать разные режимы работы трансформеров в своих приложениях. Специалисты Intel помогли разработчикам KO GmBH объединить функциональность приложения Krita Touch с популярным приложением для рисования с открытым исходным кодом Krita (для ноутбука) в новом приложении Krita Gemini. Над проектом Krita работает активное сообщество разработчиков, приветствующее новые идеи и предоставляющее высококачественную поддержку. Команда добавила механизмы для гладкого преобразования из режима ноутбука (мышь и клавиатура) в сенсорный интерфейс в режиме планшета. См. преобразование пользовательского интерфейса Krita Gemini в кратком видеоролике на Рис. 3.


Рисунок 3. Видео Преобразование пользовательского интерфейса Krita Gemini UI,щелкните значок для запуска

Intel сотрудничает со множеством производителей ПК, чтобы развивать направление 2 в 1. Intel Developer Zone предоставляет различные ресурсы, чтобы помочь разработчикам в создании приложений. Смотрите раздел Дополнительные ресурсы в конце статьи.

Создание в режиме планшета, улучшение в режиме ноутбука

Разработчики Gemini постарались максимально использовать все возможности интерфейса в обоих режимах работы. На Рис. 4 и Рис. 5 видно, что пользовательский интерфейс в двух режимах отличается очень сильно. Это дает пользователю возможность плавно перейти от рисования «в поле» в режиме планшета к ретушированию и проработке более тонких деталей в режиме ноутбука.


Рисунок 4: Пользовательский интерфейс Krita Gemini в режиме планшета


Рисунок 5: Пользовательский интерфейс Krita Gemini в режиме ноутбука

Существует три основных этапа для реализации в приложении поддержки переключения между двумя режимами работы.

Этап 1 — Поддержка сенсорного управления.Нам повезло: поддержка сенсорного вводаполучила широкое распространение до появления устройств 2 в 1. Обычно для реализации этого механизма требуется значительно больше усилий, чем для переключения между режимами планшета и ноутбука. Корпорация Intel опубликовала статьи о добавлении поддержки сенсорного интерфейса в приложениях для Windows 8.

Этап 2  Поддержка переключения режимов. В первой части видеоролика (Рис. 3) показана автоматическая смена режима на основе срабатывания датчика; в данном случае это поворот (Рис. 6). После этого показана смена режима при нажатии пользователем соответствующей кнопки в приложении (Рис. 7).


Рисунок 6:Переключение приложения по срабатыванию датчика при смене режима


Рисунок 7:Кнопка переключения Switch to Sketch — переключение в режим планшета запускается пользователем

Для автоматического переключения требуется определить состояние датчика, отслеживать его и выполнять соответствующие действия при известном состоянии. Кроме того, для удобства пользователей следует добавить и возможность переключать режимы работы приложения вручную. Пример добавления смены режима на основе датчика можно найти в статье Intel «How to Write a 2 in 1 Aware Application». Код приложения Krita для управления переключениями между режимами можно найти в исходном коде этого приложения, выполнив поиск по слову SlateMode. Программа Krita распространяется на условиях лицензии GNU Public License. Для получения последней информации см. репозиторий исходного кода.

// Snip from Gemini - Define 2-in1 mode hardware states:

#ifdef Q_OS_WIN
#include <shellapi.h>
#define SM_CONVERTIBLESLATEMODE 0x2003
#define SM_SYSTEMDOCKED 0x2004
#endif

Не все компьютеры с сенсорным управлением поддерживают автоматическое переключение, поэтому мы рекомендуем поступить так, как сделали разработчики Krita Gemini, и добавить в приложение кнопку, с помощью которой пользователи могли бы вручную переключать режимы работы приложения. Кнопка Gemini показана на Рис. 7. Смена пользовательского интерфейса по нажатию кнопки происходит так же, как при срабатывании механического датчика. Информация на экране и устройство ввода по умолчанию изменятся с сенсорного экрана и крупных значков в режиме планшета на клавиатуру, мышь и мелкие значки в режиме ноутбука. Тем не менее, поскольку датчик не срабатывал, метод, использующий кнопку, должен сменять параметры экрана, значков и устройства ввода по умолчанию без получения данных о состоянии датчика. Поэтому разработчики должны предоставить пользователю возможность переключения между режимами мышью или касанием вне зависимости от состояния кнопки, если пользователь вдруг выберет не тот режим, который ему нужен.

Определение кнопки Kaction(), ее состояния и действия показаны в коде ниже:

// Snip from Gemini - Define 2-in1 Mode Transition Button:

         toDesktop = new KAction(q);
         toDesktop->setEnabled(false);
         toDesktop->setText(tr("Switch to Desktop"));
SIGNAL(triggered(Qt::MouseButtons,Qt::KeyboardModifiers)), q, SLOT(switchDesktopForced()));
         connect(toDesktop,
SIGNAL(triggered(Qt::MouseButtons,Qt::KeyboardModifiers)), q, SLOT(switchToDesktop()));
sketchView->engine()->rootContext()->setContextProperty("switchToDesktop
sketchView->Action", toDesktop);

Затем разработчики занялись обработкой событий, переключаемых кнопкой. Сначала нужно проверить последнее известное состояние системы, затем идет смена режима:

// Snip from Gemini - Perform 2-in1 Mode Transition via Button:

#ifdef Q_OS_WIN
bool MainWindow::winEvent( MSG * message, long * result ) {
     if (message && message->message == WM_SETTINGCHANGE && message->lParam)
     {
         if (wcscmp(TEXT("ConvertibleSlateMode"), (TCHAR *) message->lParam) == 0)
             d->notifySlateModeChange();
         else if (wcscmp(TEXT("SystemDockMode"), (TCHAR *)
message->lParam) == 0)
             d->notifyDockingModeChange();
         *result = 0;
         return true;
     }
     return false;
}
#endif

void MainWindow::Private::notifySlateModeChange()
{
#ifdef Q_OS_WIN
     bool bSlateMode = (GetSystemMetrics(SM_CONVERTIBLESLATEMODE) == 0);

     if (slateMode != bSlateMode)
     {
         slateMode = bSlateMode;
         emit q->slateModeChanged();
         if (forceSketch || (slateMode && !forceDesktop))
         {
             if (!toSketch || (toSketch && toSketch->isEnabled()))
                 q->switchToSketch();
         }
         else
         {
                 q->switchToDesktop();
         }
         //qDebug() << "Slate mode is now"<< slateMode;
     }
#endif
}

void MainWindow::Private::notifyDockingModeChange()
{
#ifdef Q_OS_WIN
     bool bDocked = (GetSystemMetrics(SM_SYSTEMDOCKED) != 0);

     if (docked != bDocked)
     {
         docked = bDocked;
         //qDebug() << "Docking mode is now"<< docked;
     }
#endif
}

Этап 3 — Тестирование и отладка.Использование палитры при сенсорном управлении или при управлении мышью очень просто, но сама рабочая область должна сохранять фокус и масштабирование согласно ожиданиям пользователей. Поэтому увеличение размера всех объектов было невозможно. Для сенсорного взаимодействия в режиме планшета можно увеличить элементы управления, но самим изображением на экране нужно управлять на другом уровне, чтобы сохранить ожидаемое удобство работы. Обратите внимание на видео (Рис. 3), что изображение в области редактирования сохраняет неизменный размер на экране в обоих режимах. В этой области разработчикам пришлось потрудиться, чтобы сохранить одинаковую площадь пространства экрана. Еще одна проблема состояла в том, что оба пользовательских интерфейса работали одновременно: это сильно влияло на производительность, поскольку оба интерфейса совместно использовали одни и те же графические ресурсы. Оба интерфейса были доработаны таким образом, чтобы использовать разные ресурсы, а приоритет в системе отдавался бы активному интерфейсу.

Заключение

Как видно, добавление поддержки переключения режимов 2 в 1 в приложении — достаточно простой процесс. Нужно тщательно изучить, как пользователи будут взаимодействовать с вашим приложением в каждом из режимов. Прочтите статью Intel «Write Transformational Applications for 2 in 1 Devices Based on Ultrabook™ Designs» для получения дополнительной информации о создании приложений с изменяющимся пользовательским интерфейсом. Для Krita Gemini было принято решение реализовать простые возможности рисования в режиме планшета, а ретушировать и прорабатывать детали рисунков в режиме ноутбука. Что вы можете выделить в вашем приложении, предлагая его пользователям в режиме планшета по сравнению с режимом ноутбука?

Дополнительная информация

  1. Intel.com: Introducing the Intel Developer Zone
  2. Intel.com: 2 in 1 Information
  3. Intel.com: Touch Developer Guide for Ultra Mobile Devices
  4. Intel.com: Developer's Guide for Intel® Processor Graphics for 4th Generation Intel® Core™ Processor
  5. Intel.com: Ultrabook and Tablet Windows* 8 Sensors Development Guide
  6. Intel® Article: Ideum GamePlay: Touch Controls for Your Favorite Games
  7. Intel® Article: Designing for Ultrabook Devices and Touch-enabled Desktop Applications
  8. Intel® Article: How to Write a 2 in 1 Aware Application by Stephan Rogers
  9. Intel® Article: Mixing Stylus and Touch Input on Windows* 8 by Meghana Rao
  10. Intel® Developer Forum 2013 Presentation (PDF): Write Transformational Applications for 2 in 1 Devices Based on Ultrabook™ Designs by Meghana Rao
  11. Krita Gemini*: General Information
  12. Krita Gemini: Executable download (scroll to Krita Gemini link)
  13. Krita Gemini Mode Transition: Source Code Download
  14. KO GmbH Krita Gemini: Source Code and License Repository

Другие статьи Intel

Ultrabook Device and Tablet Windows Touch Developer Guide
All-in-One PC: What are the Developer Possibilities?
Windows 8* Store vs Desktop App Development

Дополнительные ресурсы Intel

Intel® Developer Zone 
Intel® Graphics Performance Analyzers 
Developing Power-Efficient Apps for Ultrabook™ Devices 
Ultrabook™ App Lab 
Windows* 8.1 Preview – What’s New for Developers
Ultrabook™ and Tablet Windows* 8 Sensors Development Guide

Об авторе

Тим Дункан — инженер Intel. Друзья называют его Мистер Гаджет. В настоящее время он помогает разработчикам встраивать новые технологии в создаваемые решения. Тим обладает многолетним опытом работы в отрасли, сфера его профессиональных интересов весьма обширна — от производства микросхем до интеграции систем. Найдите его на сайте Intel® Developer Zone: Tim Duncan (Intel).

Intel и эмблема Intel являются товарными знаками корпорации Intel в США и в других странах.
© Intel Corporation, 2013—2014. Все права защищены.
*Прочие наименования и товарные знаки могут быть собственностью третьих лиц.

Gameplay: Сенсорное управление и поддержка 2 в 1 в игровых приложениях

$
0
0

Загрузить статью [Eng., PDF 632KB]

GestureWorks Gameplay— это новый способ взаимодействия с популярными играми на ПК. Программа Gameplay для Windows 8 позволяет игрокам использовать и создавать собственные виртуальные контроллеры для сенсорного управления, которые можно применять в существующих играх. Каждый виртуальный контроллер добавляет кнопки, жесты и прочие элементы управления, которые сопоставляются с поддерживаемыми игрой средствами управления. Кроме того, игроки могут применять сотни индивидуально настраиваемых жестов для взаимодействия с игрой на экране. Сотрудничество компании Ideum с корпорацией Intel позволило получить доступ к технологиям и инженерным ресурсам, чтобы реализовать возможности сенсорного управления в Gameplay.

Посмотрите этот короткий ролик, поясняющий принцип работы Gameplay.

Виртуальные контроллеры

В отличие от традиционных игровых контроллеров виртуальные контроллеры полностью настраиваются, а игроки могут обмениваться ими с друзьями. Программа Gameplay работает на планшетах с Windows 8, ультрабуках, устройствах 2 в 1, моноблоках и даже мультисенсорных планшетахс большими экранами.


Рисунок 1‒ Программа Gameplay в действии на планшете с процессором Intel Atom

«Виртуальный контроллер реален! Программа Gameplay охватывает сотни игр для ПК, не поддерживающих сенсорное управление, и позволяет играть в них на совершенно новом поколении мобильных устройств, — говорит Джим Спадаччини (Jim Spadaccini), директор компании Ideum, создавшей GestureWorks Gameplay. — Виртуальные контроллеры Gameplay лучше физических контроллеров, поскольку их можно полностью настраивать и изменять. Мы с интересом ожидаем распространения Gameplay среди игроков».


Рисунок 2‒ Главная страница Gameplay

Вместе с GestureWorks Gameplay поставляется несколько десятков уже готовых виртуальных контроллеров для популярных игр для Windows (в настоящее время поддерживается свыше 116 уникальных наименований). В программе Gameplay пользователи также могут настраивать существующие контроллеры и изменять их раскладку. Программа также включает удобное в использовании средство создания виртуальных контроллеров: пользователи могут создавать собственные контроллеры для множества популярных игр для Windows, распространяемых с помощью службы Steam.


Рисунок 3‒ Раскладка виртуального контроллера

Пользователи могут размещать джойстики, переключатели, колесики прокрутки и кнопки в любых местах экрана, изменять размер и прозрачность элементов управления, добавлять цвета и подписи. Также можно создавать несколько представлений разметки и переключаться между ними в любой момент игры. Благодаря этому пользователь может создавать представления для разных действий в игре, например в ролевой игре можно создать одно представление для боя, а другое — для управления снаряжением.


Рисунок 4‒ Глобальное представление жестов виртуального контроллера

Программа Gameplay, в основе которой лежит движок обработки жестов GestureWorks Core, поддерживает свыше 200 глобальных жестов. Простейшие глобальные жесты, такие как касание, перетаскивание, сведение/разведение пальцев и поворот, поддерживаются по умолчанию, но также настраиваются. Это позволяет расширять возможности контроллеров и применять мультисенсорные жесты для дополнительного управления в играх на ПК. Например, определенные действия или боевые приемы в шутерах от первого лица можно активировать одним жестом вместо нажатия нескольких кнопок. Gameplay также включает экспериментальную поддержку акселерометров: в гонках можно поворачивать, наклоняя ультрабук или планшет. Программа обнаруживает переключение устройств 2 в 1 в режим планшета, чтобы при необходимости включить виртуальный контроллер.

Проблемы, возникшие при разработке

Разрабатывать такую удобную программу было непросто. Для воплощения идеи Gameplay в жизнь потребовалось преодолеть ряд технических проблем. Некоторые проблемы удалось решить традиционными методами программирования, для других проблем потребовались более изощренные решения.

Поддержка переключения 2 в 1

Еще в самом начале разработки Gameplay, мы решили добавить поддержку устройств 2 в 1. Идея была в том, что приложение работает постоянно, но отображение контроллеров не происходит в настольном режиме. В случае перехода в режим планшета, контроллер Gameplay начинает отображаться для обеспечения сенсорного управления в приложении. Активируйте поддержку в настройках виртуального контроллера на устройствах 2 в 1.


Рисунок 5Настройки виртуального контроллера

Для тех, кто хочет получить дополнительную информацию о переключении режимов в устройствах 2 в 1, в разделе Ресурсы приведена отличная рекомендация с примерами кода.

Внедрение DLL

Внедрение DLL (DLL injection) — это метод, используемый для выполнения кода внутри адресного пространства другого процесса путем загрузки внешней библиотеки динамической компоновки. Внедрение DLL часто используется внешними программами для вредоносных целей, но эту технологию можно использовать и в «мирных целях», чтобы расширить возможности программы так, как это не было предусмотрено ее авторами. В программе Gameplay нам требовался способ вставки данных в поток входных данных процесса (запущенной игры), чтобы сенсорный ввод можно было преобразовать во входные данные, распознаваемые игрой. Из множества методов реализации внедрения DLL программисты Ideum выбрали вызовы подключения к Windows в API SetWindowsHookEx. В конечном итоге выбрали подключения к определенным процессам вместо глобальных подключений по соображениям производительности.

Запуск игр из сторонней оболочки запуска

Мы изучили два метода подключения к адресному пространству целевых процессов. Приложение может подключиться к адресному пространству запущенного процесса, или же приложение может запустить целевой исполняемый файл в качестве дочернего процесса. Оба метода вполне жизнеспособны. Тем не менее на практике оказалось, что намного проще отслеживать и перехватывать процессы или потоки, созданные целевым процессом, если наше приложение является родительским по отношению к этому целевому процессу.

При этом возникает проблема для клиентов приложений, таких как Steam и UPlay, запускаемых при входе пользователя в систему. В Windows не предоставляется гарантированного порядка запуска процессов, а процесс Gameplay должен быть запущен до этих процессов, чтобы получить возможность подключаться к управлению. Gameplay решает эту проблему путем установки компактной системной службы, которая отслеживает запуск приложений при входе пользователя в систему. Если запускается одно из интересующих нас клиентских приложений, Gameplay может подключиться к ней в качестве родительского процесса, и тогда элементы управления будут отображаться нужным образом.

Полученный опыт

Фильтрация данных мыши

При разработке мы столкнулись с тем, что в некоторых игра неверно обрабатывались входные данные виртуальной мыши, полученные с сенсорного экрана. Эта проблема чаще всего возникала в шутерах от первого лица или в ролевых играх, где при помощи мыши выбирается направление взгляда. Проблема состояла в том, что входные данные мыши, полученные с сенсорного экрана, были абсолютными по отношению к какой-либо точке на экране, а значит, и в игровой среде. Изза этого сенсорный экран был практически бесполезным в качестве устройства для управления направлением взгляда с помощью мыши. Решить эту проблему удалось путем фильтрации входных данных мыши, перехватывая поток входных данных игры. Это дало возможность имитировать входные данные мыши для управления направлением взгляда с помощью такого экранного элемента управления, как джойстик. Потребовалось немало времени и усилий, чтобы настроить чувствительность джойстика и зону нечувствительности, чтобы они по ощущениям совпадали с мышью, но когда это было сделано, все прекрасно заработало. Это исправление можно увидеть в действии в таких играх, как Fallout: New Vegasили The Elder Scrolls: Skyrim.

Отбор игр для сенсорного управления

Разработчики Ideum потратили немало времени, настраивая виртуальные контроллеры для оптимального удобства в играх. Различные элементы игр определяют пригодность игры для Gameplay. Ниже приводятся общие правила, определяющие, какие типы игр хорошо работают с Gameplay.

Удобство использования Gameplay для разных типов игр

Хорошо

Лучше

Отлично

  • Ролевые игры (RPG)
  • Симуляторы
  • Боевые игры
  • Спорт
  • Гонки
  • Головоломки
  • Стратегии в реальном времени (RTS)
  • Шутеры с видом от третьего лица
  • Платформеры
  • Игры с боковой прокруткой
  • Приключенческие игры

Удобство игры — это важный фактор использования или отказа от использования Gameplay для этой игры, но самый важный фактор — это стабильность. Некоторые игры вообще не работают ни с подключением к управлению, ни с внедрением входных данных, ни с наложением. Это может происходить по разным причинам, но чаще всего сама игра отслеживает свое пространство в памяти или поток входных данных, чтобы избежать подмены данных. Программа Gameplay сама по себе является вполне безопасной и разрешенной, но она использует технологии, которые также применяются для вредоносных целей, поэтому, к сожалению, некоторые игры не будут работать с Gameplay, если в них нет встроенной поддержки сенсорного управления.

Отзывы пользователей

Хотя программа Gameplay 1.0 пока находится на довольно ранней стадии разработки, мы получили интересные отзывы пользователей в отношении сенсорного управления играми на ПК. В полученных отзывах уже можно проследить некоторые вполне ясные тенденции. Во-первых, ясно, что всем в целом нравится возможность настраивать сенсорный интерфейс в играх. Остальные отзывы касаются настройки интерфейса в играх в некоторых ключевых областях:

  • Многие виртуальные контроллеры не очень удобны для левшей. Именно это было изменено раньше всего во многих опубликованных виртуальных контроллерах.
  • Чаще всего пользователи изменяют размер кнопок и их расположение, поэтому Ideum рассматривает возможность добавления автоматической калибровки кнопок по размеру руки в будущей версии Gameplay.
  • Многие пользователи предпочитают использовать сенсорную прокрутку, а не дискретное касание и отпускание.

Мы ожидаем, что удастся выявить и другие тенденции по мере увеличения количества созданных виртуальных контроллеров.

Заключение

GestureWorks Gameplay привносит возможности сенсорного управления в ваши любимые игры. Для этого используется сочетание визуального наложения элементов управления и поддерживаются дополнительные способы взаимодействия, такие как жесты, акселерометры и переключение трансформеров в разные режимы работы. Наибольший интерес при работе над этим проектом представляют отзывы пользователей. Люди очень рады возможности играть на ПК с сенсорным управлением. Они с огромным удовольствием наслаждаются своими любимыми играми, применяя сенсорный экран.

Об авторах

Erik Nimeyer работает инженером по программному обеспечению в отделе Software and Solutions Group корпорации Intel. Эрик занимался оптимизацией производительности приложений на микропроцессорах Intel в течение почти 15 лет. Его специализация — разработка новых пользовательских интерфейсов и настройка на уровне микроархитектуры. В свободное от работы время он занимается альпинизмом. Связаться с ним можно по адресу erik.a.niemeyer@intel.com.

Chris Kirkpatrick — инженер по программному обеспечению в отделе Intel Software and Services Group. Он поддерживает графические решения Intel для мобильных платформ в группе Visual & Interactive Computing Engineering. Он является бакалавром компьютерных наук в Университете штата Орегон. Связаться с ним можно по адресу chris.kirkpatrick@intel.com.

Ресурсы

https://gameplay.gestureworks.com/

Дополнительные материалы

How to Write a 2-In-1 Aware Application: /en-us/articles/how-to-write-a-2-in-1aware-application
Krita Gemini Development of a 2-In-1 Aware Application with Dynamic UI for Laptop and Tablet Modes: /en-us/articles/krita-gemini-twice-as-nice-on-a-2-in-1
Detecting 2 in 1 Conversion Events & Screen Orientation in a 2 in 1 Device: /en-us/articles/detecting-slateclamshell-mode-screen-orientation-in-convertible-pc

Видео

Gestureworks Gameplay on an Ideum 46 Inch Multi-Touch Table


Создание приложений с помощью комплекта Android* NDK и библиотек Intel® Integrated Performance Primitives

$
0
0


Библиотеки Intel® Integrated Performance Primitives содержат высоко оптимизированные функции компонентов для обработки изображений, сигналов, данных векторной математики и небольших матричных вычислений. Несколько доменов библиотек Intel Integrated Performance Primitives содержат оптимизированные вручную функции для процессоров Intel® Atom™ и используют при этом команды Intel® Streaming SIMD Extensions. Статическая беспотоковая библиотека Intel Integrated Performance Primitives теперь поддерживает ОС Android* и может использоваться с приложениями для этой платформы.

В этой статье представлен обзор добавления функций библиотек Intel Integrated Performance Primitives в приложения, создаваемые на основе комплекта Android NDK. Библиотеки Intel Integrated Performance Primitives могут использоваться для оптимизации работы конкретных процессоров, и только они могут быть привязаны к оригинальному коду C/C++ ОС Android. Для использования библиотек Intel Integrated Performance Primitives с вашим приложением необходимо включить их функции в исходный код, а также в командную строку во время сборки.

Использование библиотек Intel Integrated Performance Primitives

1. Добавление функций Intel Integrated Performance Primitives в исходный код

  • Включите файлы заголовков Intel Integrated Performance Primitives (ipp.h) в файлы исходного кода.
  • Перед использованием любых других функций библиотек Intel Integrated Performance Primitives вызовите функцию ippInit(). Intel Integrated Performance Primitives обнаружит функции процессора и выберет вариант оптимизации кода для целевых процессоров. Перед вызовом любых других функций Intel Integrated Performance Primitives также вызовите ippInit()для инициализации операций координации работы процессора.
  • Вызовите функции Intel Integrated Performance Primitives в своем исходном коде C/C++.

2. Включение библиотек Intel Integrated Performance Primitives в файлы сборки комплекта Android NDK

  • Скопируйте библиотеки Intel Integrated Performance Primitives и заголовки в папку проекта.
  • Выберите библиотеки Intel, необходимые для приложения: библиотеки Intel Integrated Performance Primitives подразделяются на различные домены. Каждый домен имеет собственную библиотеку, и некоторые библиотеки домена зависит от других библиотек. Домен должен содержать в строке связей все библиотеки и их зависимости. См. статью “Intel IPP Library Dependencies” (Зависимости библиотек Intel Integrated Performance Primitives), чтобы узнать, какие библиотеки необходимы.
  • Добавьте библиотеки Intel Integrated Performance Primitives в файл сценария сборки Android, “jni/Android.mk”:
    Объявите каждую библиотеку Intel Integrated Performance Primitives как предварительно подготовленный двоичный модуль. Например, если приложение использует две библиотеки Intel Integrated Performance Primitives, "libipps.a"и "libippcore.a", добавьте следующее в файл:
               include $(CLEAR_VARS)
               LOCAL_MODULE := ipps
               LOCAL_SRC_FILES := ../ipp/lib/ia32/libipps.a
               include $(PREBUILT_STATIC_LIBRARY)

               include $(CLEAR_VARS)
               LOCAL_MODULE := ippcore
               LOCAL_SRC_FILES := ../ipp/lib/ia32/libippcore.a
               include $(PREBUILT_STATIC_LIBRARY)

Добавьте путь заголовка и библиотеки Intel Integrated Performance Primitives в модули, вызывающие функции Intel Integrated Performance Primitives:

               include $(CLEAR_VARS)
               LOCAL_MODULE := IppAdd
               LOCAL_SRC_FILES := IppAdd.c
               LOCAL_STATIC_LIBRARIES := ipps ippcore
               LOCAL_C_INCLUDES := ./ipp/include
               include $(BUILT_SHARED_LIBRARY)

Сборка одного примера кода

В следующем простом примере представлено использование Intel Integrated Performance Primitives в оригинальном коде Android. Код использует функцию Intel Integrated Performance Primitives ippsAdd_32f()для добавления данных в два массива.

Для проверки использования Intel Integrated Performance Primitives в коде:

  1. Загрузите пример кодаи распакуйте его в папку проекта (<каталог_проекта>).
  2. Рассмотрите использование Intel Integrated Performance Primitives в исходных файлах: в файле "jni/IppAdd.c"представлена реализация одной оригинальной функции NativeIppAdd(). Эта функция вызывает функцию Intel Integrated Performance Primitives ippsAdd_32f(). Файл "src/com/example/testippadd/ArrayAddActivity.java""вызывает оригинальную функцию "NativeIppAdd()"с помощью JNI.
  3. Проверьте файл "jni/Android.mk". Этот файл добавляет необходимые библиотеки Intel Integrated Performance Primitives в сценарий сборки. В примере используется функция ippsAdd_32f(), которая принадлежит к домену обработки сигналов Intel Integrated Performance Primitives. Эта функция зависима от библиотек "libipps.a"и "libippcore.a". Файл "Android.mk"создает для них две подготовленные библиотеки.

Вы можете выполнить сборку примера кода из командной строки комплектов SDK и NDK или с помощью Eclipse* IDE.

Сборка примера из командной строки

>cd <projectdir>><ndkdir>/ndk-build
>cd <projectdir>>android update project -p . -s>ant debug>adb install bin/ArrayAddActivity-debug.apk
  1. Скопируйте заголовки Intel Integrated Performance Primitives и библиотеки в папку вашего проекта (например, <каталог_проекта>/ipp).
  2. Запустите сценарий "ndk-build"из каталога проекта для сборки оригинального кода.
  3. Создайте пакет Android и установите приложение.

Сборка примера с помощью Eclipse* IDE

>cd <projectdir>><ndkdir>/ndk-build
  1. Скопируйте заголовки Intel Integrated Performance Primitives и библиотеки в папку вашего проекта (например, <каталог_проекта>/ipp).
  2. В системе Eclipse щелкните File>> New>> Project...>> Android>> Android Project from Existing Code. В "корневом каталоге"выберите папку, где находится пример кода и нажмите Finish.
  3. Запустите сценарий "ndk-build"в каталоге проекта для сборки оригинального кода:
  4. Выполните сборку приложения в Eclipse IDE и установите файл .apk.

Заключение
В этой статье представлен краткий обзор использования библиотек Intel Integrated Performance Primitives с оригинальными приложениями Android. Для получения дополнительной информации о функциях Intel Integrated Performance Primitives см. руководство по Intel Integrated Performance Primitives.

Инструментальные средства Intel® HTML5 для разработки мобильных приложений

$
0
0

Егор Чураев

Файлы для загрузки


Инструментальные средства Intel® HTML5 для разработки мобильных приложений [PDF 821,98 КБ]
Исходный код iOS [файл .ZIP, 168 КБ]
Результирующий исходный код средств разработки HTML5 [файл .ZIP, 86 КБ]

HTML5 – это новый стандарт HTML. Не так давно корпорация Intel объявила о выпуске комплекта инструментальных средств HTML5 для разработки мобильных приложений. В этой статье представлено использование этих средств для процесса переноса приложения акселерометра Apple iOS* в среду HTML5. Имейте в виду, что код, создаваемый автоматически с помощью комплекта XDK Intel®, может содержать лицензионный код, разработанный на условиях одной или нескольких лицензий, представленных в приложении A к настоящему документу. Пожалуйста, изучите выходные данные комплекта Intel XDK для получения информации о том, какие библиотеки используются для создания вашего приложения.

Средство переноса приложений Intel® HTML5 App Porter


Первое, что мы сделаем, это возьмем приложение акселерометра для iOS и преобразуем его исходный код Objective-C* в формат HTML5. Мы сделаем это с помощью средства переноса приложений Intel® HTML5 App Porter и исходного кода, который можно найти в файле: [iOS_source.zip] (Примечание. Пример кода IOS_source предоставляется на условиях лицензии на примеры кода ПО Intel, которая подробно описывается в приложении B).Вы можете скачать средство Intel HTML5 App Porter на вкладке Tool сайта: http://software.intel.com/ru-ru/html5. После заполнения и отправки формы с вашим адресом электронной почты вы получите ссылки для загрузки этого средства. Инструкции по его использованию можно найти на следующем сайте: http://software.intel.com/ru-ru/html5/articles/tutorial-creating-an-html5-app-from-a-native-ios-project-with-intel-html5-app-porter-tool

Когда вы закончите все действия, вы получите исходный код HTML5.

Intel XDK


Вы можете открыть код HTML5 в любом средстве IDE. Корпорация Intel предлагает для вас удобное средство для разработки приложений HTML5: Intel XDK - комплект разработчика кроссплатформенных приложений (http://software.intel.com/ru-ru/html5/tools). Используя комплект Intel XDK, разработчики могут создавать единый исходный код для установки на многих устройствах. Что особенно удобно, так это отсутствие необходимости установки средства на вашем компьютере. Вы можете установить его в качестве расширения браузера Google Chrome*. Если вы используете другой браузер, вы должны загрузить и запустить файл JavaScript*. Иногда может потребоваться обновить среду Java*.

После установки комплекта Intel XDK вы увидите главное окно:

Если вам нужно выполнить перенос существующего кода, нажмите большую кнопку "Start new".

Если вы создаете новый проект, введите имя проекта и установите флажок "Create your own from scratch", как это показано на следующем снимке экрана.

Установите флажок "Use a blank project". Через некоторое время отобразится сообщение "Application Created Successfully!"

Нажмите "Open project folder".

Удалите все файлы из этой папки и скопируйте перенесенные файлы. На этом перенос приложения акселерометра не закончен. Мы все еще должны написать для него интерфейс. Можно удалить методы, созданные средством Intel HTML5 App Porter. Удалите следующие файлы:

  • todo_api_application__uiaccelerometerdelegate.js
  • todo_api_application_uiacceleration.js
  • todo_api_application_uiaccelerometer.js
  • todo_api_js_c_global.js

Для обновления проекта в Intel XDK перейдите в окно редактора в эмуляторе Windows.

Откройте файл index.htmlи удалите строки слева от включенных файлов.

Откройте файл todo_api_application_appdelegate.jsи примените неназначенное свойство представителя "window".

application.AppDelegate.prototype.setWindow = function(arg1) {
    // ================================================================
    // REFERENCES TO THIS FUNCTION:
    // line(17): C:WorkBloggingechuraevAccelerometerAccelerometerAppDelegate.m
    //    In scope: AppDelegate.application_didFinishLaunchingWithOptions
    //    Actual arguments types: [*js.APT.View]
    //    Expected return type: [unknown type]
    //
    //if (APT.Global.THROW_IF_NOT_IMPLEMENTED)
    //{
        // TODO remove exception handling when implementing this method
       // throw "Not implemented function: application.AppDelegate.setWindow";
    //}
this._window = arg1;
};

application.AppDelegate.prototype.window = function() {
    // ================================================================
    // REFERENCES TO THIS FUNCTION:
    // line(20): C:WorkBloggingechuraevAccelerometerAccelerometerAppDelegate.m
    //    In scope: AppDelegate.application_didFinishLaunchingWithOptions
    //    Actual arguments types: none
    //    Expected return type: [unknown type]
    //
    // line(21): C:WorkBloggingechuraevAccelerometerAccelerometerAppDelegate.m
    //    In scope: AppDelegate.application_didFinishLaunchingWithOptions
    //    Actual arguments types: none
    //    Expected return type: [unknown type]
    //
    //if (APT.Global.THROW_IF_NOT_IMPLEMENTED)
    //{
        // TODO remove exception handling when implementing this method
       // throw "Not implemented function: application.AppDelegate.window";
    //}
return this._window;
};

Откройте файл viewcontroller.js. Удалите все функции, используемые для работы с акселерометром в старом приложении iOS. По завершении мы получим следующий файл:

APT.createNamespace("application");

document.addEventListener("appMobi.device.ready",onDeviceReady,false);

APT.ViewController = Class.$define("APT.ViewController");

application.ViewController = Class.$define("application.ViewController", APT.ViewController, {
    __init__: function() {
        this.$super();
    };>});

В файле ViewController_View_774585933.cssнужно изменить стили цвета элементов с черного на белый для возможности прочтения на черном фоне: color: rgba(0,0,0,1);на color: rgba(256,256,256,1);. В результате мы получим:

div#Label_590244915
{
	left: 20px;
	color: rgba(256,256,256,1);
	height: 21px;
	position: absolute;
	text-align: left;
	width: 320px;
	top: 0px;
	opacity: 1;
}
div#Label_781338720
{
	left: 20px;
	color: rgba(256,256,256,1);
	height: 21px;
	position: absolute;
	text-align: left;
	width: 42px;
	top: 29px;
	opacity: 1;
}
div#Label_463949782
{
	left: 20px;
	color: rgba(256,256,256,1);
	height: 21px;
	position: absolute;
	text-align: left;
	width: 42px;
	top: 51px;
	opacity: 1;
}
div#Label_817497855
{
	left: 20px;
	color: rgba(256,256,256,1);
	height: 21px;
	position: absolute;
	text-align: left;
	width: 42px;
	top: 74px;
	opacity: 1;
}
div#Label_705687206
{
	left: 70px;
	color: rgba(256,256,256,1);
	height: 21px;
	position: absolute;
	text-align: left;
	width: 42px;
	top: 29px;
	opacity: 1;
}
div#Label_782673145
{
	left: 70px;
	color: rgba(256,256,256,1);
	height: 21px;
	position: absolute;
	text-align: left;
	width: 42px;
	top: 51px;
	opacity: 1;
}
div#Label_1067317462
{
	left: 70px;
	color: rgba(256,256,256,1);
	height: 21px;
	position: absolute;
	text-align: left;
	width: 42px;
	top: 74px;
	opacity: 1;
}
div#View_774585933
{
	left: 0px;
	height: 548px;
	position: absolute;
	width: 320px;
	top: 20px;
	opacity: 1;
}

После обновления окна эмулятора вы должны увидеть:

 

Для написания кода функций акселерометра мы должны использовать библиотеку appMobi JavaScript. Документация для этой библиотеки находится здесь. Она устанавливается во время загрузки комплекта Intel XDK.

Откройте файл index.htmlи добавьте следующую строку в список сценариев:

<script type="text/javascript" charset="utf-8" src="http://localhost:58888/_appMobi/appmobi.js"></script>

Откройте файл ViewController_View_774585933.html. Мы должны переименовать поля так, чтобы они имели логически приемлемые имена:

<div data-apt-class="Label" id="Label_705687206">0</div><div data-apt-class="Label" id="Label_782673145">0</div><div data-apt-class="Label" id="Label_1067317462">0</div>

на:

<div data-apt-class="Label" id="accel_x">0</div><div data-apt-class="Label" id="accel_y">0</div><div data-apt-class="Label" id="accel_z">0</div>

То же самое должно быть сделано в файле ViewController_View_774585933.css, где мы должны переименовать имена стилей.

Откройте файл viewcontroller.jsи напишите несколько функций для использования акселерометра.

function suc(a) {
    document.getElementById('accel_x').innerHTML = a.x;
    document.getElementById('accel_y').innerHTML = a.y;
    document.getElementById('accel_z').innerHTML = a.z;
}

var watchAccel = function () {
    var opt = {};
    opt.frequency = 5;
    timer = AppMobi.accelerometer.watchAcceleration(suc, opt);
}

function onDeviceReady() {
    watchAccel();
}
document.addEventListener("appMobi.device.ready",onDeviceReady,false);

Обновите проект, и он будет отображен в окне эмулятора:

Работу акселерометра в среде Intel XDK можно увидеть, используя панель "ACCELEROMETER":

Приложение должно выглядеть следующим образом:

Полный исходный код приложения можно найти здесь.
Приложение A: Лицензионные соглашения для кода комплекта Intel® XDK

Приложение B: Лицензионное соглашение на примеры кода ПО Intel

 

Intel и логотип Intel являются товарными знаками корпорации Intel в США и/или в других странах.
© Корпорация Intel, 2013 г. Все права защищены.
*Другие наименования и товарные знаки являются собственностью своих законных владельцев.

Инструкции по установке ПО Intel® Hardware Accelerated Execution Manager - Microsoft Windows*

$
0
0

Последнее обновление: 15 апреля 2014 г.

Введение

В этом документе содержатся инструкции по установке ПО Intel® Hardware Accelerated Execution Manager (Intel® HAXM), приложения виртуализации с аппаратной поддержкой (гипервизор), которое использует технологию виртуализации Intel® для ускорения разработки приложений Android*.

Предварительные условия

Для работы ПО Intel HAXM необходимо установить комплект Android* SDK (версии 17 или выше). Дополнительную информацию см. на веб-сайте для разработчиков Android*: (http://developer.android.com/sdk/).

Системные требования

Аппаратные требования:

  • Процессор Intel®, поддерживающий технологию виртуализации Intel, EM64T и бит отмены выполнения
  • Не менее 1 ГБ системной памяти

Поддерживаемые операционные системы:

  • Microsoft Windows* 8 и 8.1 (32/64-разрядные)
  • Microsoft Windows* 7 (32/64-разрядная)
  • Microsoft Windows Vista* (32/64-разрядная)

Важно! ПО Intel HAXM не может использоваться на системах без процессора Intel или с процессором Intel, который не поддерживает функции, перечисленные в предыдущем разделе "Аппаратные требования".
<em>Для определения возможностей вашего процессора Intel посетите сайт </em><em> </em><em>http://ark.intel.com/ru/</em>
Кроме того, ПО Intel HAXM может использоваться только с образами эмулятора Android* x86, которые предоставляются Intel.
ПО Intel HAXM не может использоваться с образами эмулятора ARM* Android* или образами эмулятора Android* x86, выпущенного не Intel.

Загрузка ПО Intel® HAXM

Обзор
ПО Intel HAXM может быть установлено либо с помощью приложения Android* SDK Manager (рекомендуется), либо вручную посредством загрузки установщика с веб-сайта Intel.
Примечание.ПО Intel HAXM в настоящее время не выполняет автоматическую проверку наличия обновлений. Для получения новейшей версии ПО загрузите пакет Intel HAXM с помощью приложения Android* SDK Manager (рекомендуется) или с веб-сайта для разработчиков – Intel® Developer Zone Android*.

Загрузка вручную

  1. Перейдите на сайт http://software.intel.com/ru-ru/android.
  2. Выберите пакет установщика ПО Intel HAXM для вашей платформы.
  3. Извлеките программу установщика и следуйте инструкциям по установке для вашей платформы.

Загрузка с помощью Android* SDK Manager

  1. Запустите приложение Android* SDK Manager.
  2. В разделе "Extras" (дополнительно) установите флажок рядом с элементом "Intel x86 Emulator Accelerator (HAXM)".

  3. Нажмите кнопку "Install package..." (установить пакет...).
  4. Ознакомьтесь с лицензионным соглашением корпорации Intel. Если вы принимаете условия, выберите "Accept" (принимаю) и нажмите "Install" (установка).
  5. Приложение SDK Manager загрузит установщик в каталог "extras", который находится в главном каталоге SDK. Даже если приложение SDK Manager сообщит о том, что программное обеспечение установлено (Installed), это в действительности означает, что исполняемый модуль ПО Intel HAXM был загружен. Вам нужно запустить установщик из каталога "extras"для установки.
  6. Извлеките программу установщика в каталоге "extras"и следуйте инструкциям по установке для вашей платформы.

Установка ПО Intel® HAXM в ОС Windows*

Предупреждение. Установка ПО Intel HAXM завершится с ошибкой, если ваша система не удовлетворяет требованиям, включая поддержку функций процессоров Intel, таких как технология виртуализации Intel.

  1. Загрузите пакет установщика с сайта http://software.intel.com/ru-ru/androidили воспользуйтесь приложением SDK Manager.
  2. Запустите установщик (и примите условия функции контроля учетных записей (UAC)).
    1. Если уже установлена предыдущая версия ПО Intel HAXM, вы увидите следующий диалог:


      Нажмите "Да"для обновления ПО Intel HAXM или "Нет"для прекращения установки и сохранения текущей установленной версии Intel HAXM.

    2. Появится следующий экран:

      Примечание. Вы можете в любое время открыть документацию, нажав "Intel HAXM documentation" (документация Intel HAXM ).

  3. Нажмите "Далее"
  4. Вам будет предложено изменить количество системной памяти, выделенное для ПО Intel HAXM:

    Примечание. Установщик может использоваться в качестве программы конфигурации ПО Intel HAXM. Для изменения настроек памяти запустите установщик еще раз.

  5. На следующем экране нужно подтвердить настройки выделения памяти для ПО Intel HAXM:

  6. После завершения установки Intel HAXM нажмите "Готово", чтобы закрыть установщик.
    Теперь ПО Intel HAXM установлено и готово к использованию.

Для проверки активности ПО Intel HAXM откройте окно командной строки и запустите следующую команду: sc query intelhaxm

Если ПО Intel HAXM работает, команда отобразит сообщение о состоянии, содержащее следующую запись: "4 RUNNING".
Для останова или запуска ПО Intel HAXM используйте следующие команды:
Останов:

sc stop intelhaxm

Запуск:

sc start intelhaxm

Настройка выделения памяти для ПО Intel® HAXM

Для изменения объема памяти, выделяемого для ПО Intel HAXM, запустите программу установщика.

Удаление ПО Intel HAXM

Предупреждение. Перед удалением ПО Intel HAXM закройте все экземпляры эмулятора Android* x86. ПО HAXM нельзя удалить, пока оно активно.

Для удаления Intel HAXM запустите установщик или используйте панель управления.

Важно! После удаления ПО Intel HAXM ускорение эмулятора Intel® x86 Android* будет отключено. Существующие виртуальные устройства Android* продолжат работать, но уже без ускорения.

Повторная установка ПО Intel HAXM возобновит ускорение работы эмулятора Android*.

Поиск и устранение неисправностей

Для работы ПО Intel HAXM необходим системный образ Android* x86, который предоставляется Intel. Такие образы можно загрузить с помощью приложения Android* SDK Manager или вручную с веб-сайта Intel® Developer Zone.

Ошибка функции бита отмены выполнения

Во время установки ПО Intel HAXM вы можете получить ошибку поддержки функции бита отмены выполнения.
Эта ошибка может появляться при следующих условиях:

  • Функция бита отмены выполнения не поддерживается процессором компьютера.
  • Функция бита отмены выполнения выключена.

Функция бита отмены выполнения не поддерживается

Для работы ПО Intel HAXM требуется процессор Intel с активной функциональностью бита отмены выполнения. Программное обеспечение не может использоваться на системах, которые не имеют поддержки данной функции. Для определения возможностей вашего процессора Intel посетите сайт http://ark.intel.com/ru/.

Функция бита отмены выполнения выключена

В некоторых случаях функция бита отмены выполнения может быть выключена и ее нужно включить в программе настроек BIOS. Чтобы открыть программу настроек BIOS, необходимо нажать специальную клавишу во время загрузки компьютера. Эта клавиша отлична для разных систем BIOS, но чаще всего используются клавиши F2, Delete или Esc. В программе настроек BIOS функция бита отмены выполнения может быть обнаружена по терминам "XD", "Execute Disable", "No Execute"или "Hardware DEP"– это зависит от используемой программы BIOS.

На компьютерах под управлением ОС Windows* в дополнение к функции бита отмены выполнения может потребоваться включить службу предотвращения выполнения – действия для этого представлены в следующей базе знаний Microsoft*: http://support.microsoft.com/kb/875352?ln=ru.

Для получения конкретной информации о входе в программу настроек BIOS и включении функции бита отмены выполнения, пожалуйста, обращайтесь к производителю вашего компьютера.

Функции технологии виртуализации Intel

Во время установки ПО Intel HAXM вы можете получить ошибку поддержки технологии виртуализации.
Эта ошибка может появляться при следующих условиях:

  • Технология виртуализации не поддерживается процессором вашего компьютера
  • Технология виртуализации Intel выключена

Технология виртуализации Intel не поддерживается

Для работы ПО Intel HAXM требуется процессор Intel с активной функциональностью технологии виртуализации. Данное ПО не может использоваться на системах, которые не имеют поддержки этой функции. Для определения возможностей вашего процессора Intel посетите сайт http://ark.intel.com/ru/.

Технология виртуализации Intel выключена

В некоторых случаях функция технология виртуализации может быть выключена и ее нужно включить в программе настроек BIOS. Чтобы открыть программу настроек BIOS, необходимо нажать специальную клавишу во время загрузки компьютера. Эта клавиша отлична для разных систем BIOS, но чаще всего используются клавиши F2, Delete или Esc. В программе настроек BIOS технология виртуализации Intel может быть обнаружена по терминам "VT", "Virtualization Technology"или "VT-d". Обязательно включите все компоненты технологии виртуализации.

Для получения конкретной информации о входе в программу настроек BIOS и включении функций технологии виртуализации Intel, пожалуйста, обращайтесь к производителю вашего компьютера.

Советы и подсказки

Далее представлены некоторые рекомендации по использованию эмулятора Android* с помощью драйвера Intel HAXM.

  • В приложении AVD Manager включите ускорение GPU для вашего образа. Драйвер HAXM обычным образом выполняет большинство команд ЦП в процессоре с помощью технологии виртуализации Intel, и ускорение GPU облегчает выполнение вызовов OpenGL* в GPU компьютера, содержащего эмулятор.
  • Запустите эмулятор из командной строки для получения подробной информации вывода.
    • Используйте следующую команду для запуска эмулятора:
      emulator-x86 –avd <имя avd> -partition-size 1024 –gpu on -verbose
    • Параметр "partition-size"со значением 1024 обеспечивает 1 ГБ памяти для установки приложения. Он отличен от параметра размера SDCard в приложении AVD Manager, который определяет объем пространства для хранения медиа-файлов в эмуляторе. Настройка GPU обеспечивает более высокую производительность графической системы.
  • Убедитесь в том, что переменная среды "Path"в библиотеках эмуляции GPU установлена в диалоге "Панель управления"> Система > Дополнительные параметры системы > Переменные среды"или она должна устанавливаться вручную при каждом запуске диалога командной строки. Настройка вручную рекомендуется, если используется несколько установок SDK. Следующее <местоположение установки sdk> обычно относится к папке "c:\Users\<ваше имя пользователя>\android-sdk"
    set PATH=%PATH%;<место установки sdk> ools\lib
  • Во время установки ПО Intel HAXM настройте драйвер для использования половины доступной системной памяти (ОЗУ). Например, если в вашей системе установлено 6 ГБ памяти, тогда используйте 3 ГБ для драйвера Intel HAXM. Это обеспечит хороший баланс памяти для драйвера HAXM в соотношении с оставшейся системной памятью.
  • Во время создания образа не рекомендуется устанавливать значение "Device ram size" (размер ОЗУ устройства) более 768 МБ.
  • Иногда во время самой первой загрузки образа процесс может зависнуть на экране загрузки. В действительности процесс загрузки завершен, но главная страница не отображается. Нажмите кнопку главной страницы в эмуляторе, чтобы открыть ее окно.
  • Если вы заметите проблемы производительности ОС Windows 8 и 8.1, рекомендуется отключить использование Hyper-V.
  • Большинство параметров командной строки эмулятора находятся на веб-сайте для разработчиков Android*.

Изменения

  • В этой версии добавлено исправление 1.0.7, и она была проверена на всех поддерживаемых платформах, включая Mac OS X* Mavericks (10.9) и Windows* 8.1.
  • Исправлено несколько ошибок установщика

Обучающие курсы

$
0
0

Получите доступ к библиотеке обучающих курсов

Ищите лекции, демо-версии и другие материалы, созданные профессорами университетов и экспертами Intel в области параллельного программирования, безопасности, встраиваемых систем и др. Используйте эти материалы, чтобы преподавать на семинарах, новых курсах или в качестве дополнительных материалов для существующих курсов. Пожалуйста, оставьте комментарийпосле загрузки этих материалов.

Теперь доступны учебные материалы для мобильных вычислительных систем. Они включают образовательные ресурсы и учебные планы от экспертов по конкретным вопросам и преподавателей со всего мира.

Удаленный доступ к Intel Manycore Testing Lab— это дополнительный образовательный ресурс для ваших студентов

Рекомендуемый курс: введение в параллельное программирование

 

Модуль 1:
Почему параллельное, почему сейчас
PPTВидео

Модуль 2:
Разложение задачи
PPTВидео

Модуль 3:
В поисках параллелизма
PPTВидео

Модуль 4:
Размышления о совместно используемой памяти
PPTВидео

Модуль 5:
OpenMP для доменной декомпозиции
PPTВидео

Модуль 6:
Противостояние условиям «гонки фронтов»
PPTВидео

Модуль 7:
Зависание
PPTВидео

Модуль 8:
OpenMP для декомпозиции задач
PPTВидео

Модуль 9:
Использование декомпозиции задач
PPTВидео

Модуль 10:
Прогнозирование производительности параллельной системы
PPTВидео

Модуль 11:
Повышение производительности параллельных систем
PPTВидео

Модуль 12:
Сокращение параллельных издержек
PPTВидео

Прилагаемые файлы лабораторных работ


 

Академические возможности

Процессоры Intel® Atom™ в академической среде
Узнайте, как можно использовать процессоры Intel Atom в классе.
Обучайте параллельному программированию
Узнайте больше от людей, занимающих ведущее место в области развития и преподавания параллельного программирования.

 


 

Услуги по тестированию приложений Android на устройствах Intel

$
0
0

Все большее число устройств Android имеют марку Intel Inside. Кроме получения устройств Android на базе Intelдля тестирования ваших приложений, а также для обеспечения наилучшего опыта работы ваших пользователей, существуют службы по тестированию ваших приложений на различных аппаратных платформах без необходимости использования большого количества разнообразных физических устройств. Далее представлены рекомендуемые службы.

AppThwack

Среда AppThwack позволяет тестировать приложения в лабораторных условиях на сотнях настоящих физических устройств. Загрузите свой код, запустите тесты и получите отчет, в котором вы найдете любые возникшие проблемы, не допуская их появление для ваших пользователей. Тестирование в среде AppThwack на устройствах Android на базе Intel бесплатно в течение ограниченного времени и предоставлено программой Intel® Developer Zone. Ознакомьтесь с нашим практическим руководствоми начните использовать сайт appthwack.com.

Applause

Applause — это обширное сообщество профессионалов служб контроля качества, которое призвано оказывать помощь при тестировании приложений Android для проверки их работоспособности на устройствах на базе Intel в существующих лабораторных условиях ваших пользователей. Обеспечьте тестирование в удобной для пользователей обстановке и гарантируйте качество проверки ваших приложений Android на устройствах на базе Intel и ARM с использованием различных браузеров, услуг связи и в разнообразных географических местоположениях. Узнайте, как начать пользоваться сайтом applause.com.

Советы по созданию программного кода для сопроцессора Intel® Xeon Phi™

$
0
0

В этой статье содержится большой объем общедоступного или загружаемого исходного кода, который может выполняться на сопроцессорах Intel® Xeon Phi™.

Если контрольный просмотр кода сообщества завершен,опубликуйте поток в форуме по архитектуре Intel® Many Integrated Core, чтобы мы смогли вовремя обновить этот список.

Последние изменения:
30/05/2014 -- Добавлены рекомендации для LAMMPS* для сопроцессора Intel® Xeon Phi™
22/05/2014 -- Добавлены рекомендации для Mathworks* MATLAB
22/05/2014 -- Добавлены рекомендации для GROMACS для сопроцессора Intel® Xeon Phi™
15/05/2014 -- Добавлены рекомендации для вариантов биномной модели ценообразования
14/04/2014 -- Добавлены рекомендации для tHogbom Clean
20/03/2014 -- Добавлены рекомендации для запуска WRF с тестом производительности conus2.5km в симметричной модели

Код (в алфавитном порядке)ОписаниеСегментГде загрузитьСовет по установке (если необходимо)
Варианты биномной модели ценообразованияВарианты биномной модели ценообразования представляют собой обобщенный метод для оценки прибыли отрасли финансовых услуг в количественном выражении.Финансовые услугиВарианты биномной модели ценообразованияВыполните следующие рекомендациидля создания и запуска
EmbreeСозданная Intel коллекция высокопроиз­водительных ядер, отслеживающих направление световых лучейСоздание цифровых данныхhttp://embree. github.ioСм. следующие рекомендации, чтобы узнать, как продемонстрировать перенос модели Crown на архитектуру сопроцессора Intel(R) Xeon Phi(tm)
GEMM, STREAM, LinpackGEMM и Linpack запускают операции с матрицами обычного заполнения, которые предназначены для повышения производительности сопроцессора при выполнении операций с плавающей запятой. STREAM — это тест пропускной способности памяти, предназначенный для повышения производительности памяти GDDR.Образовательные учрежденияЭти показатели могут быть получены с загрузкой средств Intel® MPSS, которые включены в дополнительные пакеты оптимизации производи­тельности и располагаются вместе с документацией в папке /opt/intel/mic/perf для MPSS версии 2.x  или в папке  /usr/share/micperf для MPSS версии 3.1*.

Для пользователей Intel® MPSS 2.1:  следуйте инструкциям главы 5 файла Intel® MPSS Readmeдля установки и конфигурации.

Для пользователей Intel® MPSS 3.1:   следуйте инструкциям главы 4 файла MPSS_Users_ Guide по установке и конфигурации.

STREAM. Если вы выполните загрузку самостоятельно, советы по компиляции и оптимизации можно найти здесь

GROMACS для сопроцессора Intel® Xeon Phi™GROMACS — это удобный пакет для выполнения оценки молекулярной динамики, использующий уравнения движения Ньютона.Эмуляция химических реакцийGROMACSВыполните следующие рекомендации для создания и запуска
GTC-P (Gyrokinetic Toroidal Code (гирокинетический тороидальный код) - Princeton)Гирокинетический тороидальный код (gyrokinetic toroidal code, GTC) представляет собой объемный, использующий параллельные вычисления кода крупных частиц для эмуляции турбулентности в экспериментах с плазмой горения, что является важнейшим этапом изучения энергии плавления. Это двухмерная версия декомпозиции домена для обобщенного гирокинетического кода PIC для GTC при изучении сущности транспорта микротурбулентности.Научное сообществоВы можете отправить вашу заявку для кода здесь.

Выполните следующие инструкции для создания и запуска

LAMMPS* для сопроцессора Intel® Xeon Phi™Широкомасштабный симулятор атомарных/молекулярных параллельных вычислений (LAMMPS*) — это классический код для молекулярной динамики.Молекулярная динамикаLAMMPSВыполните следующие рекомендации для создания и запуска
LBS3DСредства симуляции для многофазных потоков основаны на методе свободной энергии метода решёточных уравнений Больцмана, который очень важен для вычислительной гидродинамики. Данный код позволяет моделировать квази-несжимаемые двухфазные потоки и использует многофазные модели, обеспечивающие большое соотношение плотностей.Производствоmplabs

Следуйте инструкциям по компиляции, которые можно найти здесь

(Также см. следующую статью)

Mantevo MiniFE

Самодостаточное автономное мини-приложение, которое обеспечивает значительные характеристики производительности (поколение, сборка, решение) в методе неявного элемента в приложении на основе кода C++. Физический домен представляет собой трехмерный объект, созданный из шестигранных элементов (иногда называют "кирпичиками"). Объект дискретизируется в виде структурированной сетки, однако рассматривается как неструктурированный. Домен разделяется для параллельного выполнения, используя рекурсивные бисекции координат (RCB).

Образовательные учрежденияmantevo.org> Загрузить

Выполните инструкции данного примера использования MiniFE, чтобы лучше понять какие флаги или параметры необходимо установить для запуска MiniFE на компьютере, сопроцессоре или на обоих сразу

Mathworks* MATLAB*

Интерактивная программа, выполняющая математические расчеты и визуальное отображение

Обработка сигналов и взаимодействие, создание цифровых данных, финансовые услуги, вычислительная биологияmathworks.com

См. следующие рекомендации о том, как использовать функции автоматической выгрузки библиотеки Intel(R) Math Kernel Library

MPI-HMMER

Версия HMMER — это скрытая модель Маркова для анализа белкового ряда. В этой версии две процедуры, hmmsearch и hmmpfam, были изменены, чтобы использовать MPI для параллелизма.

Образовательные учреждения

http://mpihmmer.org

См. данный советдля компиляции и оптимизации
SHOC

Тест SHOC (Scalable Heterogeneous Computing Benchmark Suite GitHub) может использоваться для оценки производительности и стабильности систем на базе сопроцессоров. Тест производительности был видоизменен для поддержки сопроцессоров Intel® Xeon Phi™ с использованием конструкции программной разгрузки, реализованной в компиляторе Intel®, который доступен в составе пакета Intel® Composer XE 2013.

Образовательные учреждения

GitHub

См. данный советдля конфигурации и компиляции
tHogbom Clean

Тесты производительности, которые реализуют алгоритм деконволюции ядра Hogbom Clean.  Часть пакета ASKAP для оценки производительности, используемого для проверки платформ научных процессоров SKA Pathfinder (ASKAP)

Астрономия, учебный процесс

GitHub

См. данный советдля конфигурации и компиляции
WRFМодель прогнозирования изменений погоды и климата представляет собой систему числового прогнозирования, созданную для целей атмосферных исследований и операционного прогнозирования. Модель прогнозирования изменений погоды и климата используется центрами научных исследований атмосферных явлений, группами прогнозирования, оперативными центрами, научными приложениями и т.д. Посетите сайт http://www.wrf-model.org/index.phpдля получения дополнительной информации о модели.Погода, научные исследованияСтраница пользователей модели прогнозирования изменений погоды и климата

См. данный советдля конфигурации и компиляции

См. следующие рекомендации для запуска тестов оценки производительности conus2.5km в симметричном режиме

Инструкции по установке ПО Intel® Hardware Accelerated Execution Manager - Microsoft Windows*

$
0
0

Последнее обновление: 15 апреля 2014 г.

Введение

В этом документе содержатся инструкции по установке ПО Intel® Hardware Accelerated Execution Manager (Intel® HAXM), приложения виртуализации с аппаратной поддержкой (гипервизор), которое использует технологию виртуализации Intel® для ускорения разработки приложений Android*.

Предварительные условия

Для работы ПО Intel HAXM необходимо установить комплект Android* SDK (версии 17 или выше). Дополнительную информацию см. на веб-сайте для разработчиков Android*: (http://developer.android.com/sdk/).

Системные требования

Аппаратные требования:

  • Процессор Intel®, поддерживающий технологию виртуализации Intel, EM64T и бит отмены выполнения
  • Не менее 1 ГБ системной памяти

Поддерживаемые операционные системы:

  • Microsoft Windows* 8 и 8.1 (32/64-разрядные)
  • Microsoft Windows* 7 (32/64-разрядная)
  • Microsoft Windows Vista* (32/64-разрядная)

Важно! ПО Intel HAXM не может использоваться на системах без процессора Intel или с процессором Intel, который не поддерживает функции, перечисленные в предыдущем разделе "Аппаратные требования".
Для определения возможностей вашего процессора Intel посетите сайт http://ark.intel.com/ru/
Кроме того, ПО Intel HAXM может использоваться только с образами эмулятора Android* x86, которые предоставляются Intel.
ПО Intel HAXM не может использоваться с образами эмулятора ARM* Android* или образами эмулятора Android* x86, выпущенного не Intel.

Загрузка ПО Intel® HAXM

Обзор
ПО Intel HAXM может быть установлено либо с помощью приложения Android* SDK Manager (рекомендуется), либо вручную посредством загрузки установщика с веб-сайта Intel.
Примечание.ПО Intel HAXM в настоящее время не выполняет автоматическую проверку наличия обновлений. Для получения новейшей версии ПО загрузите пакет Intel HAXM с помощью приложения Android* SDK Manager (рекомендуется) или с веб-сайта для разработчиков – Intel® Developer Zone Android*.

Загрузка вручную

  1. Перейдите на сайт http://software.intel.com/ru-ru/android.
  2. Выберите пакет установщика ПО Intel HAXM для вашей платформы.
  3. Извлеките программу установщика и следуйте инструкциям по установке для вашей платформы.

Загрузка с помощью Android* SDK Manager

  1. Запустите приложение Android* SDK Manager.
  2. В разделе "Extras" (дополнительно) установите флажок рядом с элементом "Intel x86 Emulator Accelerator (HAXM)".

  3. Нажмите кнопку "Install package..." (установить пакет...).
  4. Ознакомьтесь с лицензионным соглашением корпорации Intel. Если вы принимаете условия, выберите "Accept" (принимаю) и нажмите "Install" (установка).
  5. Приложение SDK Manager загрузит установщик в каталог "extras", который находится в главном каталоге SDK. Даже если приложение SDK Manager сообщит о том, что программное обеспечение установлено (Installed), это в действительности означает, что исполняемый модуль ПО Intel HAXM был загружен. Вам нужно запустить установщик из каталога "extras"для установки.
  6. Извлеките программу установщика в каталоге "extras"и следуйте инструкциям по установке для вашей платформы.

Установка ПО Intel® HAXM в ОС Windows*

Предупреждение. Установка ПО Intel HAXM завершится с ошибкой, если ваша система не удовлетворяет требованиям, включая поддержку функций процессоров Intel, таких как технология виртуализации Intel.

  1. Загрузите пакет установщика с сайта http://software.intel.com/ru-ru/androidили воспользуйтесь приложением SDK Manager.
  2. Запустите установщик (и примите условия функции контроля учетных записей (UAC)).
    1. Если уже установлена предыдущая версия ПО Intel HAXM, вы увидите следующий диалог:


      Нажмите "Да"для обновления ПО Intel HAXM или "Нет"для прекращения установки и сохранения текущей установленной версии Intel HAXM.

    2. Появится следующий экран:

      Примечание. Вы можете в любое время открыть документацию, нажав "Intel HAXM documentation" (документация Intel HAXM ).

  3. Нажмите "Далее"
  4. Вам будет предложено изменить количество системной памяти, выделенное для ПО Intel HAXM:

    Примечание. Установщик может использоваться в качестве программы конфигурации ПО Intel HAXM. Для изменения настроек памяти запустите установщик еще раз.

  5. На следующем экране нужно подтвердить настройки выделения памяти для ПО Intel HAXM:

  6. После завершения установки Intel HAXM нажмите "Готово", чтобы закрыть установщик.
    Теперь ПО Intel HAXM установлено и готово к использованию.

Для проверки активности ПО Intel HAXM откройте окно командной строки и запустите следующую команду: sc query intelhaxm

Если ПО Intel HAXM работает, команда отобразит сообщение о состоянии, содержащее следующую запись: "4 RUNNING".
Для останова или запуска ПО Intel HAXM используйте следующие команды:
Останов:

sc stop intelhaxm

Запуск:

sc start intelhaxm

Настройка выделения памяти для ПО Intel® HAXM

Для изменения объема памяти, выделяемого для ПО Intel HAXM, запустите программу установщика.

Удаление ПО Intel HAXM

Предупреждение. Перед удалением ПО Intel HAXM закройте все экземпляры эмулятора Android* x86. ПО HAXM нельзя удалить, пока оно активно.

Для удаления Intel HAXM запустите установщик или используйте панель управления.

Важно! После удаления ПО Intel HAXM ускорение эмулятора Intel® x86 Android* будет отключено. Существующие виртуальные устройства Android* продолжат работать, но уже без ускорения.

Повторная установка ПО Intel HAXM возобновит ускорение работы эмулятора Android*.

Поиск и устранение неисправностей

Для работы ПО Intel HAXM необходим системный образ Android* x86, который предоставляется Intel. Такие образы можно загрузить с помощью приложения Android* SDK Manager или вручную с веб-сайта Intel® Developer Zone.

Ошибка функции бита отмены выполнения

Во время установки ПО Intel HAXM вы можете получить ошибку поддержки функции бита отмены выполнения.
Эта ошибка может появляться при следующих условиях:

  • Функция бита отмены выполнения не поддерживается процессором компьютера.
  • Функция бита отмены выполнения выключена.

Функция бита отмены выполнения не поддерживается

Для работы ПО Intel HAXM требуется процессор Intel с активной функциональностью бита отмены выполнения. Программное обеспечение не может использоваться на системах, которые не имеют поддержки данной функции. Для определения возможностей вашего процессора Intel посетите сайт http://ark.intel.com/ru/.

Функция бита отмены выполнения выключена

В некоторых случаях функция бита отмены выполнения может быть выключена и ее нужно включить в программе настроек BIOS. Чтобы открыть программу настроек BIOS, необходимо нажать специальную клавишу во время загрузки компьютера. Эта клавиша отлична для разных систем BIOS, но чаще всего используются клавиши F2, Delete или Esc. В программе настроек BIOS функция бита отмены выполнения может быть обнаружена по терминам "XD", "Execute Disable", "No Execute"или "Hardware DEP"– это зависит от используемой программы BIOS.

На компьютерах под управлением ОС Windows* в дополнение к функции бита отмены выполнения может потребоваться включить службу предотвращения выполнения – действия для этого представлены в следующей базе знаний Microsoft*: http://support.microsoft.com/kb/875352?ln=ru.

Для получения конкретной информации о входе в программу настроек BIOS и включении функции бита отмены выполнения, пожалуйста, обращайтесь к производителю вашего компьютера.

Функции технологии виртуализации Intel

Во время установки ПО Intel HAXM вы можете получить ошибку поддержки технологии виртуализации.
Эта ошибка может появляться при следующих условиях:

  • Технология виртуализации не поддерживается процессором вашего компьютера
  • Технология виртуализации Intel выключена

Технология виртуализации Intel не поддерживается

Для работы ПО Intel HAXM требуется процессор Intel с активной функциональностью технологии виртуализации. Данное ПО не может использоваться на системах, которые не имеют поддержки этой функции. Для определения возможностей вашего процессора Intel посетите сайт http://ark.intel.com/ru/.

Технология виртуализации Intel выключена

В некоторых случаях функция технология виртуализации может быть выключена и ее нужно включить в программе настроек BIOS. Чтобы открыть программу настроек BIOS, необходимо нажать специальную клавишу во время загрузки компьютера. Эта клавиша отлична для разных систем BIOS, но чаще всего используются клавиши F2, Delete или Esc. В программе настроек BIOS технология виртуализации Intel может быть обнаружена по терминам "VT", "Virtualization Technology"или "VT-d". Обязательно включите все компоненты технологии виртуализации.

Для получения конкретной информации о входе в программу настроек BIOS и включении функций технологии виртуализации Intel, пожалуйста, обращайтесь к производителю вашего компьютера.

Советы и подсказки

Далее представлены некоторые рекомендации по использованию эмулятора Android* с помощью драйвера Intel HAXM.

  • В приложении AVD Manager включите ускорение GPU для вашего образа. Драйвер HAXM обычным образом выполняет большинство команд ЦП в процессоре с помощью технологии виртуализации Intel, и ускорение GPU облегчает выполнение вызовов OpenGL* в GPU компьютера, содержащего эмулятор.
  • Запустите эмулятор из командной строки для получения подробной информации вывода.
    • Используйте следующую команду для запуска эмулятора:
      emulator-x86 –avd <имя avd> -partition-size 1024 –gpu on -verbose
    • Параметр "partition-size"со значением 1024 обеспечивает 1 ГБ памяти для установки приложения. Он отличен от параметра размера SDCard в приложении AVD Manager, который определяет объем пространства для хранения медиа-файлов в эмуляторе. Настройка GPU обеспечивает более высокую производительность графической системы.
  • Убедитесь в том, что переменная среды "Path"в библиотеках эмуляции GPU установлена в диалоге "Панель управления"> Система > Дополнительные параметры системы > Переменные среды"или она должна устанавливаться вручную при каждом запуске диалога командной строки. Настройка вручную рекомендуется, если используется несколько установок SDK. Следующее <местоположение установки sdk> обычно относится к папке "c:\Users\<ваше имя пользователя>\android-sdk"
    set PATH=%PATH%;<место установки sdk> ools\lib
  • Во время установки ПО Intel HAXM настройте драйвер для использования половины доступной системной памяти (ОЗУ). Например, если в вашей системе установлено 6 ГБ памяти, тогда используйте 3 ГБ для драйвера Intel HAXM. Это обеспечит хороший баланс памяти для драйвера HAXM в соотношении с оставшейся системной памятью.
  • Во время создания образа не рекомендуется устанавливать значение "Device ram size" (размер ОЗУ устройства) более 768 МБ.
  • Иногда во время самой первой загрузки образа процесс может зависнуть на экране загрузки. В действительности процесс загрузки завершен, но главная страница не отображается. Нажмите кнопку главной страницы в эмуляторе, чтобы открыть ее окно.
  • Если вы заметите проблемы производительности ОС Windows 8 и 8.1, рекомендуется отключить использование Hyper-V.
  • Большинство параметров командной строки эмулятора находятся на веб-сайте для разработчиков Android*.

Изменения

  • В этой версии добавлено исправление 1.0.7, и она была проверена на всех поддерживаемых платформах, включая Mac OS X* Mavericks (10.9) и Windows* 8.1.
  • Исправлено несколько ошибок установщика

Советы по созданию программного кода для сопроцессора Intel® Xeon Phi™

$
0
0

На этой странице содержится постоянно расширяемый, общедоступный или загружаемый код, который может выполняться на системах под управлением сопроцессоров Intel® Xeon Phi™.

Если контрольный просмотр кода сообщества завершен,опубликуйте поток в форуме по архитектуре Intel® Many Integrated Core, чтобы мы смогли вовремя обновить этот список.

Последние изменения:
23/6/2014 -- Добавлены рекомендации для NAMD
4/06/2014 -- Добавлены рекомендации для систем Quantum ESPRESSO*, работающих под управлением сопроцессоров Intel® Xeon Phi™.
30/05/2014 -- Добавлены рекомендации для LAMMPS* для сопроцессора Intel® Xeon Phi™
22/05/2014 -- Добавлены рекомендации для Mathworks* MATLAB
22/05/2014 -- Добавлены рекомендации для GROMACS для сопроцессора Intel® Xeon Phi™
15/05/2014 -- Добавлены рекомендации для вариантов биномной модели ценообразования
14/04/2014 -- Добавлены рекомендации для tHogbom Clean
20/03/2014 -- Добавлены рекомендации для запуска WRF с тестом производительности conus2.5km в симметричной модели

Код (в алфавитном порядке)СегментГде загрузитьСовет по установке (если необходимо)

Варианты биномной модели ценообразования

Варианты биномной модели ценообразования представляют собой обобщенный метод для оценки прибыли отрасли финансовых услуг в количественном выражении.

Финансовые услугиВарианты биномной модели ценообразованияВыполните следующие рекомендациидля создания и запуска

Embree

Созданная Intel коллекция высокопроизводительных ядер, отслеживающих направление световых лучей

Создание цифровых данныхhttp://embree. github.ioСм. эту рекомендацию, чтобы узнать, как продемонстрировать цветопередачу модели Crown на системах с сопроцессорами Intel® Xeon Phi™.

GEMM, STREAM, Linpack

GEMM и Linpack запускают операции с матрицами обычного заполнения, которые предназначены для повышения производительности сопроцессора при выполнении операций с плавающей запятой. STREAM — это тест пропускной способности памяти, предназначенный для повышения производительности памяти GDDR.

Образовательные учрежденияЭти показатели могут быть получены с загрузкой средств Intel® MPSS, которые включены в дополнительные пакеты оптимизации производительности и располагаются вместе с документацией в папке /opt/intel/mic/perf для MPSS версии 2.x или в папке /usr/share/micperf для MPSS версии 3.1*.

Для пользователей Intel® MPSS 2.1: следуйте инструкциям главы 5 файла Intel® MPSS Readmeдля установки и конфигурации.

Для пользователей Intel® MPSS 3.1: следуйте инструкциям главы 4 файла MPSS_Users_ Guideпо установке и конфигурации.

STREAM. Если вы выполните загрузку самостоятельно, советы по компиляции и оптимизации можно найти здесь

GROMACS для сопроцессоров Intel® Xeon Phi™.

GROMACS — это удобный пакет для выполнения оценки молекулярной динамики, использующий уравнения движения Ньютона.

Эмуляция химических реакцийGROMACSВыполните следующие рекомендациидля создания и запуска

GTC-P (Gyrokinetic Toroidal Code (гирокинетический тороидальный код) - Princeton)

Гирокинетический тороидальный код (gyrokinetic toroidal code, GTC) представляет собой объемный, использующий параллельные вычисления кода крупных частиц для эмуляции турбулентности в экспериментах с плазмой горения, что является важнейшим этапом изучения энергии плавления. Это двухмерная версия декомпозиции домена для обобщенного гирокинетического кода PIC для GTC при изучении сущности транспорта микротурбулентности.

Научное сообществоВы можете отправить вашу заявку для кода здесь.

Выполните следующиеинструкции для создания и запуска

LAMMPS* для сопроцессоров Intel® Xeon Phi™.

Широкомасштабный симулятор атомарных/молекулярных параллельных вычислений (LAMMPS*) — это классический код для молекулярной динамики.

Молекулярная динамикаLAMMPSВыполните следующие рекомендациидля создания и запуска

LBS3D

Средства эмуляции многофазных потоков на основе свободной энергии по методу Больцмана, что очень важно для вычислительной гидродинамики. Данный код позволяет моделировать квази-несжимаемые двухфазные потоки и использует многофазные модели, обеспечивающие большое соотношение плотностей.

Производствоmplabs

Следуйте инструкциям по компиляции, которые можно найти здесь

(Также см. следующую статью)

NAMD

NAMD – код параллельной молекулярной динамики, созданный для высокопроизводительного моделировании больших биомолекулярных систем.

Молекулярная динамикаNAMDВыполните следующие рекомендациидля создания и запуска

Mantevo MiniFE

Самодостаточное автономное мини-приложение, которое обеспечивает значительные характеристики производительности (поколение, сборка, решение) в методе неявного элемента в приложении на основе кода C++. Физический домен представляет собой трехмерный объект, созданный из шестигранных элементов (иногда называют "кирпичиками"). Объект дискретизируется в виде структурированной сетки, однако рассматривается как неструктурированный. Домен разделяется для параллельного выполнения, используя рекурсивные бисекции координат (RCB).

Образовательные учрежденияmantevo.org> Загрузить

Выполните инструкции данного примера использования MiniFE, чтобы лучше понять какие флаги или параметры необходимо установить для запуска MiniFE на компьютере, сопроцессоре или на обоих сразу

Mathworks* MATLAB*

Интерактивная программа, выполняющая математические расчеты и визуальное отображение

Обработка сигналов и взаимодействие, создание цифровых данных, финансовые услуги, вычислительная биологияmathworks.com

Ознакомьтесь с данной рекомендацией, чтобы узнать, как использовать функции автоматический разгрузки библиотеки Intel® Math Kernel Library

MPI-HMMER

Версия HMMER — это скрытая модель Маркова для анализа белкового ряда. В этой версии две процедуры, hmmsearch и hmmpfam, были изменены, чтобы использовать MPI для параллелизма.

Образовательные учреждения

https://code.google.com
/p/mpihmmer/

См. данный советдля компиляции и оптимизации

Quantum ESPRESSO* для сопроцессоров Intel® Xeon Phi™.

Quantum ESPRESSO* – это интегрированный пакет открытых исходных кодов для вычислений в области электронных структур и моделирования материалов нанотехнологий.

Моделирование материалов

Quantum ESPRESSO*

Выполните следующие рекомендациидля создания и запуска

SHOC

Комплект SHOC (Scalable Heterogeneous Computing Benchmark GitHub) может использоваться для оценки производительности и стабильности работы систем на базе сопроцессоров. Тест производительности был видоизменен для поддержки сопроцессоров Intel® Xeon Phi™ с использованием конструкции программной разгрузки, реализованной в компиляторе Intel®, который доступен в составе пакета Intel® Composer XE 2013.

Образовательные учреждения

GitHub

См. данный советдля конфигурации и компиляции

tHogbom Clean

Тесты производительности, которые реализуют алгоритм деконволюции ядра Hogbom Clean. Часть пакета ASKAP для оценки производительности, используемого для проверки платформ научных процессоров SKA Pathfinder (ASKAP)

Астрономия, учебный процесс

GitHub

См. данный советдля конфигурации и компиляции

WRF

Модель прогнозирования изменений погоды и климата представляет собой систему числового прогнозирования, созданную для целей атмосферных исследований и операционного прогнозирования. WRF – это модель прогнозирования изменений погоды и климата, которая используется центрами научных исследований атмосферных явлений, группами прогнозирования, оперативными центрами, научными приложениями и т.д. Посетите сайт http://www.wrf-model.org/index.phpдля получения дополнительной информации о WRF.

Погода, научные исследованияСтраница пользователей модели прогнозирования изменений погоды и климата

См. данный советдля конфигурации и компиляции

См. следующие рекомендациидля запуска тестов оценки производительности conus2.5km в симметричном режиме

Сборка модуля Android AOSP с помощью компилятора Intel® C++ для Android*

$
0
0

В этой статье описывается сборка модулей с помощью компилятора Intel C++ для Android* (ICC) и их интеграция в сборку проектов Android с открытым исходным кодом (AOSP). Модуль обычно представляет собой общую библиотеку или приложение, которое войдет в состав образа Android на устройстве. В качестве примера можно назвать аудио- и видеокодеки, приложения мультимедиа.

Сборка отдельного модуля вне процесса сборки AOSP

Сборка модуля Android в компиляторе Intel® C++ для Android* аналогична сборке с помощью набора инструментов GCC. Следуйте руководству Приступая к работе для компиляции модуля с помощью системы сборки NDK или автономной цепочки инструментов.

Копирование заранее собранного модуля в образ AOSP в ходе процесса сборки

После компиляции и компоновки модуль можно интегрировать в процесс сборки AOSP в виде заранее собранной библиотеки. Он будет включен в системный образ Android. 

Создайте файл Android.mk внутри корневого каталога дерева AOSP со следующим содержимым:

include $(CLEAR_VARS)
LOCAL_MODULE := <library_name>
LOCAL_MODULE_SUFFIX:=.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_SRC_FILES := <library_file_name>
include $(BUILD_PREBUILT)

Местозаполнители <library_name> и <library_file_name> должны содержать имя файла библиотеки на хосте и в месте назначения. Обычно они одинаковы. 

Сборка модуля в составе процесса сборки AOSP

Предоставляемые корпорацией Intel версии дерева исходного кода AOSP должны быть уже подготовлены к использованию ICC в составе процесса сборки. Можно определить, поддерживается ли ICC в дереве исходного кода, проверив наличие файла <AOSP_ROOT>build/core/icc_config.mk exists. 

Настройка среды сборки

Перед использованием компилятора нужно настроить путь к компилятору в файле <AOSP_ROOT>build/core/icc_config.mk. Укажите путь к ICC, изменив переменную TARGET_ICC_TOOLS_PREFIX. К примеру:

TARGET_ICC_TOOLS_PREFIX := /opt/intel/cc_android_14.0.1.017/bin/

Здесь есть пара полезных для настройки переменных. Все упоминаемые переменные можно также указать напрямую в командной строке.

  • ICC_MODULES
    Принудительная компиляция указанных модулей с помощью ICC вне зависимости от компилятора по умолчанию. 
  • GCC_MODULES
    Принудительная компиляция указанных модулей с помощью GCC вне зависимости от компилятора по умолчанию.
  • ICC_IPO_MODULES
    Указывает модули, которые должны быть скомпилированы с межпроцедурной оптимизацией (IPO), если модуль компилируется с помощью ICC.
  • ICC_FREESTANDUNG_MODULES
    Указывает модули, не компонующиеся со стандартными библиотеками. Подробные сведения см. в документации. Этот параметр не следует изменять 

Сборка модуля

Если модуль, который следует компилировать в ICC, уже настроен с помощью  переменной ICC_MODULES, никаких дополнительных действий не требуется. Просто запустите компиляцию обычным образом:


	source build/envsetup.sh
lunch
make flashfiles

Также можно указать модуль, который следует компилировать в ICC, непосредственно в командной строке: 


	source build/envsetup.sh
lunch
make ICC_MODULES=libskia ICC_STATIC_MODULES=libskia ICC_IPO_MODULES=libskia flashfiles

Устранение неполадок

Для компиляции модулей, входящих в состав AOSP, могут потребоваться дополнительные исправления. Обратитесь к представителю корпорации Intel при возникновении проблем.

Выбираем правильный движок для вашей Android-игры на базе x86

$
0
0

Введение

Разработчики игр отлично знают о выдающихся возможностях Android. Из 100 топовых приложений в магазине Google Play около половины – это игры (они же составляют более 90% из 100 самых прибыльных приложений). Для внедрения на этот рынок скорость разработки имеет ключевое значение. Некоторые начинающие и независимые разработчики предпочитают создавать собственный код с нуля, и при этом хотят добиться высокого качества, не затрачивая годы на разработку. Другие же выбирают уже существующие игровые движки. При его выборе стоит учитывать несколько факторов:

  • Цена: сколько средств вы готовы потратить?
  • Количество измерений пространства игры: 2D или 3D?
  • Языки: какие языки программирования известны вашим разработчикам?
  • Художественная доработка: Как хорошо движок интегрируется с инструментами по созданию контента?
  • Полный доступ к исходникам: Необходим ли вам доступ для глубоких изменений параметров движка?

Существует множество Android-движков, но по большей части они различаются именно по этим критериям. В связи с растущим проникновением на рынок высокопроизводительных Android-устройств с процессорами Intel®, как никогда важно выбрать движок, оптимизированный под Android-устройства на базе x86. Эта статья поможет выбрать подходящий движок для наиболее успешной работы игры на Android-устройствах ваших потребителей.

Конкуренты на выбор

Рассмотрим трех лучших претендентов в свете обозначенных критериев.


Unreal* Engineот Epic Games – давнишний авторитетный движок, который может похвастаться большим количеством успешных проектов на PC, консолях и мобильных платформах с момента своего первого релиза в 1998 году. Unreal Engine оснащен следующими инструментами:

  • Unreal Editor (редактор 3D-контента)
  • Blueprint visual scripting (drag-and-drop редактирование)
  • Анимационные инструменты
  • Редакторы и инструменты для искусственного интеллекта, освещения и других эффектов




 


Project Anarchy* - недавняя разработка Havok. Он вобрал в себя все ключевые игровые технологии компании, став полноценным движком для мобильной разработки. В Project Anarchy вы найдете следующие компоненты:

  • Havok Vision Editor (редактор 3D-контента)
  • Движок Havok Vision с Havok Physics
  • Havok Animation Studio (drag-and-drop редактирование)
  • Autodesk Scaleform* (UI-инструмент)
  • Редакторы и инструменты для искусственного интеллекта, освещения и других эффектов




 


Marmalade* - это кроссплатформенный SDK, созданный для быстрой разработки мобильных игр. Более молодая технология, чем обе предыдущие, Marmalade была выпущена в качестве игрового движка в 2011 году. Посмотрим, что полезного есть у Marmalade:

  • Marmalade C++ SDK
  • Marmalade Quick (Lua)
  • Marmalade Juice (Obj-C)
  • Web Marmalade (HTML5/JavaScript*)




 




 


Вопрос цены

Многие движки предлагают целый ряд ценовых опций, в зависимости от требуемого функционала. Факторами, зачастую определяющими цену, являются тип платформы и число сотрудников вашей команды. Unreal Engine просит $19 за ежемесячную подписку, а также 5% от общего дохода от всех программ, основанных на их технологии. Также доступны индивидуальные ценовые структуры, дополнительная поддержка и опции для разработки под консоли.

Project Anarchy является (и будет являться) бесплатным инструментом для разработки мобильных игр компаниями любого размера. Опции покупки включают средства для разработки под PC или консоли, а также для более глубокого доступа и прочие инструменты. Для базовой разработки игр Project Anarchy является наиболее оптимальным вариантом в ценовом отношении. Единственное, чего он требует - это совместного маркетинга в рамках ваших игр.

На момент написания этой статьи Marmalade является бесплатным сроком на 1 год для команд численностью до 3-х разработчиков и доходом менее $500,000. Это можно считать временной акцией, учитывая, что обычная лицензия движка стоит $149 + налоги. Более высокие ценовые варианты предусматривают разработку на большем количестве платформ и безвозмездную прямую поддержку разработчиков. 

Количество измерений пространства игры

Привлекательность 3D-игр неоспорима, однако 2D лучше подходит для многих простых игр и требует гораздо меньших затрат времени и ресурсов. Диапазон характеристик вашей игры напрямую влияет на выбор движка.

Да, у Marmalade есть поддержка 3D-графики, но стоит учесть, что оба других Unreal Engine и Project Anarchy были созданы целенаправленно для 3D. Эти движки не раз совершенствовались, чтобы обеспечить наилучший опыт 3D-разработки.

Точно также все три движка могут быть использованы для 2D-игр, но для Unreal Engine и Project Anarchy это может стать роковым излишеством. На данный момент Project Anarchy имеет набор шаблонных 2D-инструментов альфа-уровня, и оба Unreal Engine и Marmalade имеют шаблонный 2D-код. Одна из подгрупп инструментов Marmalade для быстрой разработки, Marmalade Quick, специализируется исключительно на 2D.

Выходит, все три движка могут быть использованы для 3D- и 2D-игр, при этом Marmalade больше подходит для 2D, а Project Anarchy и Unreal Engine – для 3D.

Языки

Если разработчики в вашей команде знакомы (а лучше, если имели опыт)  с языком программирования, используемом в движке, производительность их работы будет существенно выше.

До выпуска Unreal Engine 4 программирование геймплея в Unreal Engine осуществлялось через UnrealScript, собственный скриптовый язык Epic с похожим на «С» синтаксисом. С выходом Unreal Engine 4 C++ стал основным языком разработки.

Project Anarchy базируется на C++ с Lua для скриптинга. Многие движки используют легковесный скриптовый язык, вроде Lua, чтобы минимизировать риски, связанные с низкоуровневыми задачами, к примеру, с управлением памятью.

В Marmalade есть множество наборов инструментов в зависимости от выбранного языка. Базовый SDK использует C++, Marmalade Juice использует Objective-C*, Marmalade Quick – Lua, а Web Marmalade рассчитан на разработку с HTML5/JavaScript.

Благодаря такому многообразию языковых опций, Marmalade выделяется на фоне других. Ваши разработчики могут использовать несколько форм Marmalade с тем языком, который они предпочитают. Эти возможности напрямую исходят из их главного девиза «напиши единожды, используй везде».

Художественная доработка

Давно прошли те дни, когда команда разработчиков состояла только из программистов. В наши дни игровые студии, как большие, так и маленькие, разбиты на группы программистов и художников. Движки, включающие тесную интеграцию с инструментами по созданию контента, имеют весомое конкурентное преимущество.

И Unreal Engine и Project Anarchy имеют 3D-редакторы для макетов, дизайна уровней, управления цифровыми объектами и прочее. Эти инструменты особенно пригодятся 3D-художникам, поскольку имеют интерфейс, схожий с большинством художественных 3D-инструментов (которые также могут быть использованы в совокупности с редактором по созданию цифровых объектов).

Unreal* Editor (слева) и Havok Vision Editor (справа)

У Unreal Engine есть опция «blueprint scripting», где такие компоненты скрипта, как, к примеру, действия, визуализированы в качестве компонентов drag-and-drop.

Blueprint scripting в Unreal* Editor

У Project Anarchy есть похожий инструмент для дизайна анимации.

Инструмент для дизайна анимации ProjectAnarchy*

Пусть Marmalade и располагает крупным сообществом разработчиков open-source плагинов и инструментов для помощи в разработке (многие из которых доступны на http://github.com/marmalade), официальные сборки Marmalade не включают ничего для тех, кто не занимается кодингом.

Полный доступ к исходникам

Говоря языком возможностей, следующий большой шаг в отношении вашего движка – это способность его модифицировать. С полным доступом к исходному коду вы можете изменить в нем абсолютно всё или самостоятельно добавить в него поддержку других целевых платформ.

В этом ключе Unreal Engine – самый великодушный: оплатив подписку на Unreal Engine 4,вы получаете полный доступ ко всему.

Project Anarchy предлагает исходники для некоторых компонентов, а полный исходный код доступен только на максимальной отметке вложений. В бесплатной версии модификации ограничены.

Несмотря на наличие большой подборки open-source плагинов, Marmalade представляет собой закрытый исходный код. Наивысший уровень владения предоставляет лишь адресную поддержку, но при этом нет никакого дополнительного доступа к исходникам.

Большинство разработчиков обходят этот вопрос стороной, однако чем сложнее конструкция движка вашей игры, тем больше контроля над каждой отдельной деталью вам может понадобиться.

Сравнение характеристик




 

Marmalade

Project Anarchy

Unreal Engine

Наименьшая цена

Бесплатное промо/$149+VAT

Бесплатно

$19/месяц + 5%

Размерность

3D

Выполнимо

Встроено

Встроено

2D

Очень просто

В стадии альфы

Выполнимо

Языки

C++, Obj-C, Lua, HTML5

C++, Lua

C++

Возможности для не-программиста

Третьих фирм

3D редактор, инструменты анимации

3D редактор, Blueprint - скрипты

Исходники

Нет

Некоторые высокоуровневые

Да




 

Выводы

Каждый из движков, представленных в сравнении, имеет свои сильные стороны. Если цена становится камнем преткновения, Project Anarchy станет оптимальным выбором. Если у вас есть навыки и желание глубоко модифицировать и расширить возможности движка, Unreal Engine поможет сделать это с наименьшими затратами. Для быстрой разработки 2D-игры Marmalade – вне конкуренции. Существует масса других движков, бесплатных и с открытым исходным кодом, которые могут соответствовать по характеристикам изученным движкам. Однако возможности этой троицы сделать вашу игру превосходной для широкого перечня Android-устройств выводят их на топовую позицию среди остальных.

Ссылки

Об авторе

Брэд Хилл – инженер по программному обеспечению в Intel в отделе по взаимодействию с разработчиками. Он исследует новые технологии инженерных решений Intel и делится лучшими методами с разработчиками через the Intel® Developer Zone и в рамках проходящих конференций. Также Брэд Хилл является инженерным директором Student Hackathons, организующего хакатоны Code for Good в колледжах и университетах США.

SDK по сжатию нативных библиотек для приложений Android*

$
0
0

Download as PDF

Введение

Традиционно Android-приложения пишутся на Java* из-за ее элегантного объектно-ориентированного дизайна, а также по причине того, что AndroidSDKпредлагает кросс-платформенные опции именно на Java. Время от времени разработчикам необходимо использовать нативный интерфейс Android, особенно если управление памятью и производительность являются ключевыми параметрами. Нативный интерфейс Androidпредоставляется через NDK, поддерживающий разработку на C/C++.

В Googlesoftwaremarketочень много NDK-приложений. Чтобы снизить размер пакета, некоторые независимые поставщики программного обеспечения выпускают одиночный APKвместо FATAPK (одиночный APKсодержит либо ARM*, либо х86-библиотеку, в то время как FATAPKсодержит и то, и другое). Однако у FATAPKесть очевидные преимущества над одиночным APK. Он проще для доступа конечным пользователям, а библиотеки не накладываются друг на друга в процессе обновления приложения. Поэтому разработчики стремятся использовать FATAPKдля программной экосистемы Androidх86. Но как им уменьшить огромные размеры файлов FATAPK?


 

Zip* против LZMA

Чтобы решить проблему с размером FATAPK, автор разработал нативный SDK для сжатия библиотек. В базовой идее используется цепной алгоритм LempelZivMarkov (LZMA) (http://www.7-zip.org/sdk.html) для сжатия нативных библиотек. Googleиспользует Zipдля сжатия всего контента. И в то время как Zipявляется быстрым, его показатель сжатия ниже, чем у LZMA. LZMA, к слову, особенно хорош для сжатия крупных словарных файлов, найденных в нативных библиотеках. График показывает разницу в размерах файлов после применения сжатия с помощью Zipи LZMA.



 

Рисунок 1: Сравнение размеров одиночных файлов после сжатия с Zip* и LZMA1



 

Рисунок 2: Сравнение размеров составных файлов (той же CPU-архитектуры) после сжатия с Zip* и LZMA1



 

Рисунок 3: Сравнение размеров составных файлов (различной CPU-архитектуры) после сжатия с Zip* и LZMA1





 

Рисунок 4: Сравнение размеров трех идентичных файлов после сжатия с  Zip* and LZMA1




 

По 4 вышеуказанным графикам мы можем сделать вывод, что LZMAможет разительно снизить избыточность в файлах, что в наибольшей степени проявляется для трех идентичных файлов. Это отлично подходит для сжатия нативных библиотек. В целом, нативная библиотека будет использовать один и тот же код в архитектуре «armeabi», «armeabi-v7a», «x86» и даже в библиотеках «mips». Для «armeabi-v7a» - есть ARMNEONи код без NEON. Эти библиотеки имеют излишки информации из-за того же исходного кода. Даже в случае с другой архитектурой, к примеру, libffmpeg_armv7_vfpv3.soи libffmpeg_x86.so, где один – ARMEABI, а другой - x86, показатель сжатия составляет 40%, в то время как для одиночного файла этот показатель равен всего 20%.

SDKпо сжатию нативных библиотек

SDKпо сжатию нативных библиотек, разработанный автором, может помочь разработчику приложений интегрировать сжатие нативных библиотек LZMAдля получения файлов меньшего размера. Главная идея этого SDK– сжатие всей нативной библиотеки в каталог asserts, как показано ниже.

APIэтого SDKочень прост. При первом запуске приложения код распаковывает всю нативную библиотеку из каталога asserts.

static boolean NewInstance(Context cont,Handler hdl,boolean showProgress)

static DecRawso GetInstance()

String GetPath (String libname)

Рекомендуется модифицировать исходный код и добавлять только NewInstance, когда приложение запускается, затем заменить system.loadlibrary(***) на system.load(DecRawso. GetInstance ().GetPath(***)). После этих незначительных изменений APKстанет меньше, но функционировать продолжит как прежде.

Если разработчики могут обеспечить достаточную отсрочку между запросом NewInstanceи первой загрузкой нативной библиотеки, они должны вызвать (NewInstance (cont,null,false)) без аргумента Handler. В ином случае следует просматривать Handlerдля получения асинхронного сообщения «decodeend».

Автор интегрировал этот SDKв MoboPlayerна планшете с процессором Intel® AtomZ2760. Код вызывает NewInstanceв методе синхронизации, когда пользователи запускают приложение и отображается стартовый экран. Запрос NewInstanceнезаметен для конечного пользователя, поскольку декодирование происходит в фоновом режиме. Следующий график демонстрирует результаты сжатия.




 

Table 5: MoboPlayer* FAT APK size compression1

Enhanced Functions of Native Library Compression SDK

Besides the LZMA compression, this SDK provides additional functions to encourage developers to include an x86 native library with the following:

  1. Облачное хранение: фирма-разработчик может хранить библиотеки x86 на облачном сервере, и эти библиотеки могут быть загружены с сервера после установки. Такое действие автоматически выполняется на x86-устройствах и возможно только при наличии Wi-Fi-соединения.
  2. Обнаружение отсутствующих библиотек: если библиотеки x86 отсутствуют, SDK автоматически произведет повторное извлечение ARM-библиотеки. Фирма-разработчик может скопировать библиотеку в директорию x86, чтобы избежать подобных ситуаций, но перед этим необходимо убедиться в отсутствии перекрестных ссылок между ARM и библиотеками x86.
  3. Java-упаковщик: Java Package Tool обеспечивает конвертацию обычных APK в сжатые LZMA APK. Инструмент поддерживает системы Windows*, Linux* и Mac. Вы сможете использовать его так: ComPressApk.jar -a C:/my/test.APK -k c:/key *** ### alias. Если «-k» отсутствует (то есть вы запрашиваете просто ComPressApk.jar -a C:/my/test.APK), для подписи этого APK по умолчанию будет использован тестовый ключ Eclipse. Этот инструмент может быть интегрирован в скрипт сборки ants для автоматической поддержки компиляции и публикации.
  4. Фильтр: функция ConfigureFilter позволяет вам извлекать только нужные библиотеки. К примеру, ввод ConfigureFilter("libffmpeg", "libffmpeg_armv7_neon.so") означает извлечение только libffmpeg_armv7_neon.so среди всех библиотек, которые начинаются с «libffmpeg». Это помогает снизить размер приложения после установки.




 

Выводы

Использование SDK по сжатию нативных библиотек для ваших Android-приложений может значительно снизить размер пакета нативной библиотеки, что приносит неоспоримую выгоду приложениям с объемными библиотеками (видео-плеерам, браузерам и 3D-играм). По вопросам источников и технической поддержки обращайтесь к автору.

Об авторе

Юминг Ли (Yuming.li@intel.com) – инженер по программному обеспечению приложений IntelSoftwareandServicesGroup. На данный момент он работает над мультимедиа-приложениями и оптимизацией производительности, в частности, на мобильных платформах Android.





 

1Эти данные были получены в результате анализа внутренних тестов Intel® и приведены исключетльно для справки. Любые отличия в аппаратной и программной конфигурации могут влиять на производительность.



 

Состояния управления электропитанием: P-состояния, C-состояния и пакетные C-состояния

$
0
0

(Вы можете скачать PDF-версию этой статьи во вложении.)

Содержание

Предисловие. Что, почему и откуда? 1

Глава 1: Введение. 2

Глава 2: P-состояния, Снижение энергопотребления без ущерба для производительности. 3

Глава 3: С-состояния ядер. Подробности. 5

Глава 4: Пакетные C-состояния. Подробности. 8

Глава 5: Интуитивное описание состояний электропитания с помощью человечков и лампочек. 12

Заключение. 15

Приложение: C-Состояния, P-Состояния, а где же T-Состояния?. 16

Справочные материалы. 18

Примечания. 18

 

Предисловие. Что, почему и откуда?

В этой статье объединена серия публикаций, посвященных состояниям управления электропитанием. Эта серия входит в еще более крупный набор блогов по самым разным темам, связанным с управлением электропитанием, включая состояния управления электропитанием (эта серия), состояния электропитания в режимах «Турбо» и в режиме hyper-threading, настройку и политики управления электропитанием. Содержание этих публикаций будет полезно для всех, хотя здесь описывается только сопроцессор Intel® Xeon Phi™. Исключение составляет лишь серия по настройке, которая по своей природе в большей степени зависит от платформы; она посвящена сопроцессору Intel® Xeon Phi™ и набору программ Intel® Manycore Platform Software Stack (MPSS). В дополнение к этому набору блогов по управлению электропитанием обратите внимание на еще две вспомогательных подборки: серию по измерению производительности[i], и еще один набор более ранних публикаций на различные темы, например о том, откуда берется C*V2*f.

Статья, которую вы сейчас читаете, была изначально опубликована в следующей серии из весьма непоследовательно названных блогов:

Кроме того, есть еще одна статья в приложении:

На портале Intel® Developer Zone вы найдете отдельные блоги, перечисленные в еще одной статье: Список полезных статей, блогов и ссылок по электропитанию и управлению электропитанием.

Итак, устраивайтесь поудобнее и постарайтесь получить удовольствие от ознакомления с захватывающей темой управления электропитанием.

 

Глава 1. Введение для пытливых умов

Какие именно состояния электропитания существуют для сопроцессора Intel Xeon Phi? Что происходит в каждом из этих состояний? Было бы интересно знать. Если вы интересуетесь высокопроизводительными вычислениями, то и вам эти знания пригодятся.

Но это не будет глубокий, исчерпывающее подробный и крайне технический научный труд, посвященный управлению электропитанием. Если вам нужен именно такой материал, предлагаю прочесть руководство разработчиков программного обеспечения (SDG) по сопроцессору Intel Xeon Phi[ii].Но предупреждаю: когда в разделе руководства разработчиков, посвященном управлению электропитанием, заходит речь о создателях программного обеспечения (т. е. о программистах), явно или неявно, подразумеваемся не мы с вами. Целевая аудитория этого руководства — разработчики операционных систем и драйверов. Кстати, в прошлой жизни я был одним из таких разработчиков. Одна из целей этой серии блогов — рассмотрение управления электропитанием с точки зрения разработчика приложений, т. е. меня или вас, а не с точки зрения создателя операционных систем или драйверов.

Кроме того, я не стану рассказывать о том, что такое С-, Р- и РС-состояния. Если вам требуется ознакомиться с этими понятиями перед чтением нашей серии блоков, рекомендую (без ложной скромности) мою прежнюю серию блогов, посвященную именно этой теме. См. http://software.intel.com/en-us/user/266847/track. Непросто выделить нужные публикации по управлению электропитанием из всех прочих моих публикаций в форумах и видеороликов, поэтому я перечислил наиболее важные публикации в примечании[iii].

Если кратко, бывают Р-состояния пакета, С-состояния ядер (иногда их называют СС-состояния) и С-состояния пакета (РС-состояния). Также сопроцессор может работать в режиме "Turbo"3. Р-состояний ядер не бывает.

Хост и сопроцессор совместно отвечают за управление электропитанием сопроцессора. В некоторых операциях по управлению электропитанием сопроцессор действует автономно. В других случаях хост принимает ответственность на себя и сам управляет электропитанием, а иногда даже переопределяет действия сопроцессора.

В дальнейшей серии я расскажу о пакетных Р-состояниях (включая режим "Turbo"[iv]), C-состояниях ядер и пакетных РС-состояниях. Я также расскажу о том, как вы, будучи разработчиком приложений, можете управлять электропитанием сопроцессора..

И еще одно замечание. Я не гарантирую, что все выпуски сопроцессоров Intel Xeon Phi (т. е. типы сопроцессоров) поддерживают все эти функции управления электропитанием.

 

Глава 2. P-состояния. Снижение энергопотребления без ущерба для производительности

С самого начала могу заявить, что Р-состояния не повлияют на производительность приложения. Тем не менее они важны для приложения по другим соображениям. Поскольку большинство читателей этого блога ничего не принимают на веру, относятся ко всей воспринимаемой информации критически и скептически (будучи инженерами и учеными), я подкреплю это мое заявление доказательствами.

Р-состояния представляют собой пары значений напряжения и частоты, определяющие скорость работы сопроцессора и потребляемую им мощность. Чем ниже рабочее напряжение процессора, тем меньше электроэнергии он потребляет. (В одной из более ранних публикаций я пояснял это на очень высоком техническом уровне.) Поскольку вместе с напряжением снижается и частота, при этом уменьшается скорость вычислений. Так и вижу, как у вас зреет вопрос: «Да разве могут возникнуть ситуации в приложениях для высокопроизводительных вычислений, когда мне потребуется включить Р-состояния и снизить производительность приложения?» Применение Р-состояний менее важно в области высокопроизводительных вычислений, чем в средах с менее интенсивной нагрузкой, таких как клиентские компьютеры и серверы данных. Но даже в среде сопроцессоров и высокопроизводительных вычислений длительные состояния бездействия довольно часто возникают в промежутках между крупными вычислительными задачами. Например, если вы используете модель разгрузки, сопроцессор с высокой вероятностью не будет использоваться в периодах между разгрузками. Кроме того, нативное приложение, выполняющееся на сопроцессоре, зачастую будет по разным причинам находиться в состоянии бездействия, например ожидать следующей порции данных для обработки.

Программа управления электропитанием сопроцессора поддерживает Р-состояния от Р0 до Pn. Количество Р-состояний, поддерживаемых каждым выпуском (типом) сопроцессора, может различаться, но всегда составляет не менее двух. Кроме того, некоторые типы поддерживают Р-состояния «Турбо». Программа управления электропитанием сопроцессора обрабатывает переходы из одного Р-состояния в другое. Программа управления электропитанием хоста в этом практически не участвует.

Возникает закономерный вопрос: как это все повлияет на производительность? Мы же все-таки работаем в среде высокопроизводительных вычислений. Ответ прост: никакого практического влияния на производительность вычислений нет. Не сомневаюсь, что сейчас у вас возникло уже несколько вопросов:

(a)    “Минутку! Как это возможно? Если сопроцессор снижает скорость работы процессора, уменьшая его частоту, как это может не повлиять на производительность моего приложения?”

(b)   “Мне просто нужно, чтобы приложение работало как можно быстрее. Зачем вообще мне заботиться о сокращении потребления электроэнергии?”

Сначала рассмотрим вариант Б. Я понимаю, что электропитание не является наиболее приоритетным вопросом для вас, как для разработчика приложений. Но все равно оно косвенно влияет на производительность приложения. Повышенное потребление электроэнергии связано с такими вещами, как более высокие затраты на помещение, повышенный расход электричества на охлаждение и кондиционирование воздуха, необходимость большей площади помещения и т. п. Просто об этом должны заботиться не мы (программисты), а наши коллеги — администраторы, системные архитекторы, управляющие помещениями и так далее.

Говоря по правде, вам тоже следует думать об этом. Это влияет на ваше приложение с весьма важной стороны, хоть это и не всегда очевидно. Если в вычислительном центре удастся снизить расход электроэнергии без потери производительности, это означает, что в этом же пространстве можно установить больше процессоров, не превышая при этом отведенную норму электропитания. То есть, образно говоря, вы «получаете больше за те же деньги». А это очень хорошо для вас как для программиста или ученого. Снижение требуемой потребляемой мощности означает, что в меньшем пространстве можно разместить больше процессоров. Это, в свою очередь, означает, что вы как разработчик приложений или ученый можете заниматься не только более масштабными задачами (в системе больше ядер), но и обрабатывать эти задачи быстрее (ниже задержки передачи данных между ядрами).

Вернемся к Р-состояниям. Р-состояния теоретически повлияют на производительность, но не так, чтобы это сказалось на работе высокопроизводительных приложений. Как это возможно? Дело в переходах между Р-состояниями. Также следует помнить об использовании процессора. Программное обеспечение управления электропитанием периодически отслеживает использование процессора. Если использование ниже определенного порога, Р-состояние увеличивается, то есть процессор переходит в следующее состояние энергоэффективности. Ключевое слово в предыдущем предложении — «использование». Как вы думаете, каково будет использование процессора при выполнении ресурсоемкой задачи, связанной с высокопроизводительными вычислениями? В идеале оно должно быть как можно ближе к 100 %. А в каком Р-состоянии будет выполняться ваше приложение при таком использовании процессора? Это Р0, самое быстрое Р-состояние (если не считать режим «Турбо»). Следовательно, Р-состояния с самым высоким уровнем экономии электричества не повлияют на ваше приложения: ситуация, в которой процессор, поддерживающий ваше хорошо настроенное высокопроизводительное приложение, мог бы войти в одной из таких состояний, просто не возникнет.

Итак, все высокопроизводительные части приложения всегда будут использовать процессоры почти на 100 %. Использование, близкое к 100 %, практически всегда гарантирует самое быстрое Р-состояние, то есть Р0. Следовательно, Р-состояния не влияют на производительность приложений.

Как заставить мое приложение работать в одном из этих режимов «Турбо»? Этого делать нельзя, потому что это слишком опасно. Очень легко сделать незначительную ошибку, которая повлечет перегрев и повреждение сопроцессора. Если процессор поддерживает «Турбо», предоставьте управление этим режимом операционной системе.

 

Глава 3. C-состояния ядер: подробности

БАЗОВЫЕ СВЕДЕНИЯ: КРАТКО О СОСТОЯНИЯХ БЕЗДЕЙСТВИЯ

Вот краткое описание С-состояний. С-состояния — это состояния экономии электроэнергии при бездействии (в отличие от Р-состояний, представляющих собой состояния экономии электроэнергии при работе). В Р-состоянии процессор продолжает выполнять инструкции, а в С-состоянии (кроме состояния С0) процессор бездействует, никакие инструкции не выполняются. Можно привести такую аналогию: бездействующий процессор подобен дому, в котором горит весь свет, но никого нет. Потребление всей этой электроэнергии не служит никаким полезным целям, разве что приносит некоторую прибыль электрической компании. Как лучше поступить? Если дома никого нет, то есть дом бездействует, зачем же оставлять свет включенным? То же самое применимо и к процессору. Если им никто не пользуется, зачем подавать питание на неиспользуемые элементы и расходовать электричество? Можно отключить их и сэкономить.

С0 является «нулевым» состоянием электропитания: в этом состоянии ядро фактически работает, не бездействует.

РАЗНИЦА МЕЖДУ СОСТОЯНИЯМИ БЕЗДЕЙСТВИЯ ЯДЕР И ПАКЕТА

Сопроцессор содержит до 60 (или даже больше) ядер в одном пакете. Состояния бездействия ядер (C-состояния) действуют для каждого ядра: одно из этих 60 ядер может быть в состоянии C0, т. е. ядро работает и не бездействует, тогда как соседнее ядро может находиться в состоянии глубокой экономии электроэнергии C6. PC-состояния — это состояния бездействия всего пакета, то есть состояния экономии электроэнергии для всех 60 ядер и поддерживающих электронных компонентов на кристалле. Как можно догадаться, чтобы перевести пакет в состояние PC-6, все ядра должны находиться в состоянии С6. Почему? Поскольку пакет обладает функциональностью, поддерживающей все ядра, «отключение» определенных электронных компонентов пакета влияет на все ядра.

Рисунок 1. Перевод ядра в состояние С1

 

КАКИЕ СУЩЕСТВУЮТ СОСТОЯНИЯ БЕЗДЕЙСТВИЯ ЯДЕР?

У каждого ядра может быть два состояния бездействия, С1 и С6 (не считая С0).

Переход от С0 к С1. Посмотрите на рис. 1 Состояние С1 наступает, когда все 4 аппаратных потока, поддерживаемых ядром, выполняют инструкцию HALT. Давайте посмотрим на каждый аппаратный поток с точки зрения операционной системы: 4 аппаратных потока рассматриваются как 4 отдельных ЦП (от ЦП 0 до ЦП 3). Этап 1. Первые три ЦП, принадлежащие данному ядру, выполняют инструкцию HALT. Этап 2. Последний ЦП (ЦП 0) пытается выполнить инструкцию HALT. Этап 3. Он прерывается для процедуры сбора данных резидентности бездействия. Эта процедура, как вы догадались, собирает данные резидентности бездействия и сохраняет их в структуре данных, доступной для ОС. Затем ЦП 0 выполняет инструкцию HALT. Этап 4. На этом этапе все ЦП останавливаются, а ядро переходит в состояние C1. В состоянии ядра C1 (и его ЦП) снижается его тактовая частота[v].

 

Рисунок 2. Следует ли переходить в С6: достаточно ли далеко следующее прерывание?

 

Рисунок 3. Следует ли переходить в С6: достаточно ли велико предполагаемое время бездействия?

После входа ядра в состояние C1 на сцену выходит программа управления электропитанием сопроцессора. Ей нужно определить, целесообразно ли дальнейшее отключение ядра и перевод его в состояние С6. В состоянии ядра C6 остальные части ядра отключаются, их потребляемая мощность ограничивается. Помните, что программа управления электропитанием сопроцессора выполняется на ядре ОС (обычно это ядро 0), поэтому отключения других ядер на него не влияют.

Решения какого типа должна принимать программа управления электропитанием сопроцессора? Существует два основных решения, описанных в предыдущей главе. Вопрос 1. Будет ли (возможно) достигнута экономия электроэнергии? Вопрос 2. Сможет ли задержка, требуемая для перезапуска, отрицательно повлиять на производительность процессора или применений, выполняемых на этом процессоре? Эти решения соответствуют двум основным сценариям и показаны на рисунках 2 и 3. В сценарии 1 программа управления электропитанием сопроцессора определяет, насколько далеко следующее запланированное или предполагаемое прерывание. Если прерывание должно произойти достаточно скоро, не имеет смысла отключать ядро, поскольку увеличивается длительность задержки, необходимой для возврата ядра в состояние С0. Как и в жизни, процессор ничего не получает бесплатно. За переход в более глубокое С-состояние процессор расплачивается повышением задержек, связанных с возвратом ядра/пакета в рабочее состояние. В сценарии 2 программа управления электропитанием сопроцессора изучает историю деятельности ядра (то есть его аппаратных потоков) и определяет по чередованию периодов работы (состояние С0) и бездействия (С1), даст ли какую-либо экономию переход в состояние С6.

При ответе «да» на оба этих вопроса ядро переходит в состояние С6.

После входа в состояние ядра C6 процессор принимает решение о том, может ли он перейти в одно из состояний бездействия пакета. Этому вопросу будет посвящена следующая публикация в моем блоге.

 

Глава 4. C-состояния пакета: подробности

ЗАМЕЧАНИЕ О ТЕРМИНОЛОГИИ.

Если вы прочтете SDG (руководство разработчика программного обеспечения по сопроцессорам Intel Xeon Phi), то вы обнаружите там множество не всегда понятных названий и сокращений. Вот как это все расшифровывается:

Пакетный Auto C3[vi] - также называется Auto-C3, AutoC3, PC3, C3, Auto-PC3 и Package C3.

Пакетный Deep-C3 - также называется PC3, DeepC3, DeeperC3, Deep PC3 и Package C3 (я не повторяюсь, это вам показалось).

Пакетный C6 - также называется PC6, C6 и Package C6.

БАЗОВЫЕ СВЕДЕНИЯ: ЧТО ТАКОЕ «ВНЕЯДЕРНЫЕ КОМПОНЕНТЫ»?

Перед более подробным рассмотрением С-состояний пакета сначала несколько слов о компонентах современных процессоров Intel®. Всю электронную «начинку» процессора очень удобно разделить на две части: то, что образует ядра (конвейер, вычислительные блоки, регистры, кеш и т. д.) и все остальное (вспомогательные элементы). Оказывается, что это «все остальное» можно снова разделить на вспомогательные элементы, не связанные напрямую с производительностью (например, интерфейс с PCI Express), и на элементы, связанные с производительностью (например, шины, соединяющие ядра). В Intel для вот этих вспомогательных элементов, напрямую влияющих на производительность оптимизированных приложений, придумали обозначение «внеядерные компоненты».

 

 

Рисунок 4. Типы электронных компонентов сопроцессора

 

Вернемся к нашим С-состояниям.

ЗАЧЕМ НУЖНЫ C-СОСТОЯНИЯ ПАКЕТА?

Помимо ограничения тактов каждого ядра, какие еще методики можно использовать для дополнительной экономии электроэнергии? Вот простейший и даже банальный пример того, что можно сделать: отключить питание всего процессора. При этом потребление электроэнергии будет равно нулю, хотя и недостатки такого «выдергивания из розетки» также очевидны. Лучше избирательно отключать более глобальные компоненты процессора таким образом, чтобы можно было относительно быстро вернуть процессор в полностью функциональное состояние (С0).

Именно для этого и используются пакетные С-состояния: для последовательного отключения дополнительных компонентов с целью дальнейшей экономии электроэнергии. Поскольку мы уже отключили все компоненты пакета, связанные с ядрами, оставшиеся компоненты являются общими и необходимыми для всех ядер, поэтому их совокупность мы и называем пакетом.

КАКИЕ СУЩЕСТВУЮТ СОСТОЯНИЯ БЕЗДЕЙСТВИЯ ПАКЕТА?

Уважаемые читатели, существуют три пакетных С-состояния: Auto-C3, Deep-C3 и (пакетный) C6. Напоминаю, что это все пакетные С-состояния, то есть все аппаратные потоки/ЦП во всех ядрах находятся в состоянии HALT. Я догадываюсь, о чем вы думаете: «Если все ядра сопроцессора находятся в состоянии HALT, как может работать программное обеспечение управления электропитанием?» Хороший вопрос. Но ответ, если подумать, вполне очевиден. Если программное обеспечение управления электропитанием не может выполняться на сопроцессоре, то где может? Разумеется, на хосте.

 

Рисунок 5. Области ответственности сопроцессора и хоста при управлении электропитанием

 

За управление электропитанием сопроцессора Intel® Xeon Phi™ отвечают два компонента: программа управления электропитанием, выполняющаяся на сопроцессоре и компонент управления электропитанием драйвера сопроцессора MPSS, выполняющийся на хосте. См. рис. 1. Сопроцессор управляет переходом в различные С-состояния ядра и выходом из них. Разумеется, когда программа управления электропитанием не может выполняться на сопроцессоре, например при состояниях пакета Deep-C3 или C6, управление берет на себя хост. Управление пакетным состоянием Auto-C3 осуществляет и хост, и сопроцессор.

ЧТО ОТКЛЮЧАЕТСЯ В С-СОСТОЯНИЯХ ПАКЕТА?

Я собирался переделать эту таблицу, но в ней все настолько ясно, что я ее просто скопировал. Это таблица 3-2 из руководства разработчиков программного обеспечения (SDG) по сопроцессору Intel® Xeon Phi™.

Состояние бездействия пакета

Состояние ядра

Состояние внеядерных компонентов

TSC/LAPIC

C3WakeupTimer

Трафик PCI Express*

PC3

Сохраняется

Сохраняется

Приостановка

После окончания срока действия пакет выходит из состояния РС3

Пакет выходит из состояния РС3

Deep C3

Сохраняется

Сохраняется

Приостановка

Не влияет

Истекает время ожидания

PC6

Утрачивается

Утрачивается

Сброс

Не влияет

Истекает время ожидания

 

Немного подробнее:

Пакетный Auto-C3: ограничение частоты кольца и внеядерных компонентов

Пакетный Deep-C3: снижение напряжения VccP

Пакетный C6: отключение напряжения VccP (т. е. отключение питания ядер, кольца и внеядерных компонентов)

TSC и LAPIC — это тактовые генераторы, которые останавливаются при отключении внеядерных компонентов. Их следует правильным образом задать при повторной активации пакета. PC3 — это то же самое, что состояние пакета Auto-C3.

КАК ОПРЕДЕЛЯЮТСЯ ПЕРЕХОДЫ С-СОСТОЯНИЙ БЕЗДЕЙСТВИЯ ПАКЕТА?

В Auto-C3 пакета: первое состояние пакета, Auto-C3, можно рассматривать как промежуточное. Программа управления электропитанием сопроцессора может инициировать переход в это состояние. Программа управления электропитанием MPSS может переопределить этот запрос при определенных условиях, например если хост «знает», что внеядерная часть сопроцессора по-прежнему работает.

Мы также увидим, что состояние пакета Auto-C3 — единственное, которое может быть инициировано программой управления электропитанием сопроцессора. Поначалу это кажется немного несправедливым, но, если вдуматься, причина очевидна. В начале перехода в состояние пакета Auto-C3 процедура управления электропитанием сопроцессора запущена и может инициировать переход в первое состояние пакета. (Чтобы быть совсем точным, ядро, на котором выполняется программа управления электропитанием, может быстро перейти в состояние С0.)

Ниже состояния Auto-C3 сопроцессор не выполняет код. Переход в более глубокие С-состояния контролируется программой управления электропитанием хоста. Причина не только в том, что к этому моменту собственная программа управления электропитанием сопроцессора уже приостановлена, но и в том, что хост располагает более глобальной информацией о происходящем, например данными о работе внеядерных компонентов после ограничения работы всех ядер, и о трафике в шине PCI Express.

В пакетном Deep-C3 программа управления электропитанием хоста анализирует историю резидентности бездействия, прерывания (например, трафик PCI* Express) и временные затраты на пробуждение сопроцессора из состояния пакета Deep-C3, чтобы принять решение о том, следует ли переводить процессор из состояния пакета Auto-C3 в состояние пакета Deep-C3.

В пакетномC6 так же, как и в пакетном Deep-C3, но глубже.

 

Глава 5. Интуитивное описание состояний электропитания с помощью человечков и лампочек

ИНТУИТИВНАЯ ИЛЛЮСТРАЦИЯ ЯДРА И ЕГО АППАРАТНЫХ ПОТОКОВ

Это четвертая публикация в серии записей об управлении электропитанием для сопроцессоров Xeon Phi.

Для тех из вас, кто прочел мой блог с интуитивным введением в сопроцессор Intel Xeon Phi, Сопроцессор Intel Xeon Phi: что это такое и какое мне до этого дело? Часть 3. Если отвлечься от избитой аналогии с зайцам и черепахами,я как-то упомянул «опытных программистов, старательно работающих на своих корпоративных работодателей». Давайте немного расширим эту концепцию. На рис. 6 у нас есть один опытный программист. Он символизирует один аппаратный поток сопроцессора ЦП.

http://software.intel.com/sites/default/files/powerBlog_states_pt3_FigA_high_tech_worker_3.png

Рисунок 6. Опытный программист, то есть аппаратный поток Intel® Xeon Phi™

 

В ядре — 4 аппаратных потока. Посмотрите на рисунок 7. Все настолько очевидно, что я не стану утруждать себя написанием, а вас — чтением многостраничного пояснения. Также изображена и лампочка. Лампочка представляет инфраструктуру, поддерживающую ядро, такую как тактовые контуры и цепи питания.

http://software.intel.com/sites/default/files/powerBlog_states_pt3_FigB_high_tech_workers_0.png

Рисунок 7. Опытные программисты в комнате, т. е. ядро сопроцессора Intel® Xeon Phi™

 

УПРАВЛЕНИЕ ЭЛЕКТРОПИТАНИЕМ: ЯДРА C0 И C1

Какое отношение все это имеет к управлению электропитанием? Иногда отдельные либеральные студенты гуманитарных направлений заявляют, что инженеры лишены воображения и вообще зануды. Но мы-то с вами знаем, что даже если некоторое занудство нам порой не чуждо, то в отсутствии воображения нас обвинить нельзя. Помня об этом, представьте себе, что на каждом из этих столов стоят компьютеры и настольные лампы.

Ядро в режиме C0: кода хотя бы один опытный программист напряженно работает (т. е. хотя бы один аппаратный поток ядра ЦП выполняет инструкции)

ЦП выполняет инструкцию HALT: когда один из наших опытных программистов заканчивает работу, он выключает свою настольную лампу, выключает компьютер и уходит (т. е. один из аппаратных потоков выполняет инструкцию HALT).

После входа в состояние ядра C1: когда все четыре опытных программиста заканчивают работу, они все выполняют инструкции HALT. Последний из них гасит за собой свет в помещении. (Т. е. снижение тактовой частоты ядра.)

 

УПРАВЛЕНИЕ ЭЛЕКТРОПИТАНИЕМ: СОСТОЯНИЕ ЯДРА C6

После входа в состояние ядра C6: да, я понимаю, что это очевидно, но мне нравится разговаривать с самим собой. С течением времени все уходят на обед. Поскольку в офисе никого нет, можно отключить еще больше электроприборов (т. е. снижение потребляемой мощности). Впрочем, помните, что работники вернутся после обеда, поэтому нужно иметь возможность быстро включить все выключенное.

 

http://software.intel.com/sites/default/files/powerBlog_states_pt3_FigC_building_of_high_tech_workers_1.png

Рисунок 8. Здание, полное опытных программистов, т. е. сопроцессор Intel® Xeon Phi™

 

УПРАВЛЕНИЕ ЭЛЕКТРОПИТАНИЕМ: СОСТОЯНИЯ ПАКЕТА AUTO-C3, DEEP-C3 И C6

Да, эта аналогия могла вам уже поднадоесть, но мне она нравится, так что продолжаем.

Давайте пройдем немного дальше. Представьте здание, в котором очень много комнат, больше 60. Посмотрите на рисунок 8. Да, я знаю, что у нас в Кремниевой долине опытные программисты работают в великолепных и просторных комнатах, а не в тесных общих офисах. К сожалению, на этом моя аналогия останавливается, потому что мне нужен именно обычный офис.

Вход в состояние пакета Auto-C3: все ушли с этажа, поэтому датчик движения автоматически выключает освещение на этаже. (Т. е. программное обеспечение управления сопроцессором снижает рабочую частоту внеядерных компонентов и прочих вспомогательных элементов кристалла.

Вход в состояние пакета Deep-C3: сейчас выходные, поэтому во всем здании (т. е. в модуле управления электропитанием драйвера сопроцессора MPSS) отключено кондиционирование воздуха и выключена телефонная связь. (Т. е. хост снижает напряжение VccP сопроцессора и заставляет его игнорировать прерывания)

Вход в состояние пакета C6: новогодние каникулы: офис закрыт, все сотрудники добровольно или вынужденно отдыхают, поэтому техническая служба офиса отключила электричество, кондиционирование воздуха, телефоны, серверы, лифты, туалеты и пр. (т. е. хост выключил питание сопроцессора и отключил отслеживание трафика PCI Express*).

УПРАВЛЕНИЕ ЭЛЕКТРОПИТАНИЕМ: ЧЕМ ДАЛЬШЕ, ТЕМ ЧУДЕСНЕЕ

Увлекшись этой нашей аналогией, я решил было расширить ее до комплексов офисных зданий (узел, содержащий несколько сопроцессоров), международных инженерных дивизионов (кластеры, в которых каждый узел содержит несколько сопроцессоров) и до привлечения внешних партнеров (распределенная обработка в глобальной сети). Впрочем, здравый смысл победил, поэтому я отказался от этого замысла.

 

 

Заключение

Мы обсудили различные типы состояний управления электропитанием. Это достаточно широкая проблема, но мы сосредоточились на определенной платформе — сопроцессоре Intel® Xeon Phi™. Большинство современных процессоров, будь то процессоры корпорации Intel, корпорации AMD* или встроенные решения, обладают такими состояниями в той или иной разновидности.

Процессоры Intel® поддерживают два типа состояний управления электропитанием: P-состояния (работа) и C-состояния (бездействие). С-состояния, в свою очередь, делятся еще на две категории: состояния ядер и состояния пакета. Р-состояния — это состояния работы (С0) процессора; снижение потребляемой мощности в этих состояниях достигается путем снижения напряжения и частоты процессора. С-состояния — это состояния бездействия; они отключают части процессора, когда ядра простаивают. Существует два типа С-состояний. C-состояния ядер отключают части отдельных ядер/ЦП. Поскольку современные процессоры содержат несколько ядер, С-состояния пакетов отключают электронные элементы, поддерживающие все эти ядра.

Чистый эффект этих состояний заключается в значительном снижении энергопотребления современных процессоров Intel®. Такая экономия электроэнергии может быть весьма значительной, в некоторых случаях потребление электроэнергии снижается на порядок.

Важность экономии потребляемой мощности невозможно переоценить для любых систем, от смартфонов до высокопроизводительных кластеров. Например, снижение потребляемой мощности и энергопотребления отдельных процессоров в кластере для высокопроизводительных вычислений дает возможность установить в этой системе больше процессоров. При этом повышается плотность процессоров, ускоряется обмен информацией между узлами, становится возможным создать гораздо более мощную систему, способную решать более крупные и сложные задачи. На противоположном краю — портативные устройства с пассивным охлаждением, такие как смартфоны и планшеты. В них снижение потребляемой мощности позволяет дольше работать от аккумулятора без подзарядки и исключает проблемы, связанные с охлаждением. Это позволяет устанавливать в такие устройства более мощные процессоры, что, в свою очередь, расширяет возможности этих устройств.

 

Приложение. C-состояния, P-состояния, а где же T-состояния?

Несколько дней назад мне встретился интересный вопрос: «Важно ли понимать Т-состояния?» Сначала я удивился: «Что еще за Т-состояния?»

Впрочем, изучив материал, я обнаружил, что так называемое Т-состояние действительно существует, но уже не используется, по крайней мере в серийных процессорах Intel® его нет.

Поэтому повторяю: Т-состояния нам безразличны!

На этом более практичные читатели могут перейти к более актуальным темам, а я расскажу немного из истории управления электропитанием.

Когда-то раньше существовали Т-состояния — это были состояния регулировки. Задолго до появления С- и Р-состояний Т-состояния были придуманы, чтобы защитить процессоры от повреждений при авариях, например если при работе процессора на полной мощности отказывал охлаждающий вентилятор. Если простейший правильно расположенный термодатчик определял, что температура достигала уровня, на котором возможны повреждения пакета или его содержимого, аппаратный диспетчер питания переводил процессор в различные Т-состояния в зависимости от температуры: чем выше температура, тем выше Т-состояние.

AКак вы, возможно, догадались, обычный режим работы процессора назывался состоянием Т0. При переходе процессора в более высокое Т-состояние диспетчер ограничивал такты ядер, чтобы замедлить выполнение инструкций и дать процессору возможность «отдохнуть» и остыть. Например, в состоянии Т1 аппаратный диспетчер питания мог ограничить 12 % тактов. Грубо говоря, это означает, что ядро будет работать в течение 78 % времени и «спать» в остальное время. В режиме Т2 такты могли быть ограничены на 25 %. В самых высоких Т-состояниях ограничение тактов могло достигать 90 %. (См. рисунок ниже.)

 

Рисунок 9. Время выполнения в состояниях Т0/Р0, Р1 и Т1

Обратите внимание, что, в отличие от Р-состояний, не меняется напряжение и частота. Кроме того, в Т-состояниях приложение работает медленнее не потому, что процессор работает медленнее, а потому что процессор периодически приостанавливает работу. С определенной точки зрения можно считать Т-состояние состоянием С-1 с ограничением тактов, где процессор не бездействует, а по-прежнему выполняет полезную работу.

На приведенном выше рисунке в верхней части показано выполнение ресурсоемкой нагрузки при отсутствии перегрева. Внизу показана ситуация с Т-состояниями (т. е. до Р-состояний), когда процессор начинает переключаться между состоянием работы и состоянием бездействия, чтобы остыть. В середине показано, что происходит на современных процессорах, где остывание процессора достигается плавным снижением частоты и напряжения.

Тем из вас, кто не обиделись на меня за небольшой исторический экскурс, я предлагаю еще несколько вполне практических причин, в силу которых следует хотя бы просто знать о существовании Т-состояний как таковых.

(1)    (1) В некоторой современной технической литературе термин «состояния регулировки» относится к Р-состояниям, а не к Т-состояниям.

(2)    (2) Некоторые структуры данных управления электропитанием, в том числе и определяемые стандартом ACPI, по-прежнему содержат неиспользуемое поле Т-состояния. Многие вопросы о Т-состояниях проистекают именно из этого.

(3)    (3) Подозреваю, что Т-состояния могут все еще использоваться в некоторых встроенных процессорах

 

Справочные материалы

Kidd, Taylor (10/23/13) - “Тэйлор Кидд (23 октября 2013 г.) - «Список полезных статей, блогов и ссылок по электропитанию и управлению электропитанием»,” http://software.intel.com/en-us/articles/list-of-useful-power-and-power-management-articles-blogs-and-references, загружено 24 марта 2014 г.

Интересующиеся управлением электропитанием могут ознакомиться с руководством разработчиков программного обеспечения по сопроцессору Intel Xeon Phi. Там есть схемы состояний и другие интересные вещи. Рекомендую раздел 2.1.13 «Управление электропитанием» и всю главу 3.1 «Управление электропитанием (PM)»: очень полезно почитать, если у вас бессонница.

 

ПРИМЕЧАНИЕ: Как и во всех прошлых моих публикациях, всю полноту ответственности за предоставленные иллюстрации несу лично я ввиду ненарушения авторских прав и отсутствия художественных способностей.

 

Примечания

 

 

[i]Я собираюсь опубликовать это в мае — июне 2014 г.

[iv]Краткое напоминание: режим «Турбо» — это набор «разогнанных» Р-состояний, выходящих за обычные ограничения кристалла по электропитанию. При длительной работе в таком состоянии кристалл может перегреться, тогда процессор сгорит. Режим «Турбо» возможен, потому что штатные ограничения по электропитанию вычисляются для случаев, когда каждое ядро работает с максимальной производительностью. Существует немало ситуаций, когда вся доступная мощность не используется. В таких случаях программа управления электропитанием может разрешить временный «разгон».

[v]Центральные процессоры обладают по крайней мере одним тактовым генератором, формирующим тактовые импульсы. Электронные элементы процессора используют эти тактовые импульсы для координации всех действий.

[vi]Состояние Auto-PC3 могло быть упразднено начиная с MPSS 3.1. Но даже и в этом случае все равно стоит упомянуть о важности задержек и о различиях между локальным и удаленным управлением.

Viewing all 357 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>