Что даёт Runtime мобильным программистам?

Наступают времена, когда увеличивать количество ядер мобильных процессоров нецелесообразно. Пора обращаться к параллельной разработке.
02 декабря 2015308247Вадим Ференец146306


Каких только программ не написано для мобильных устройств, но как показывают исследования компании Qualcomm — разработчика и изготовителя процессоров для мобильных платформ, на рынке практически нет приложений, которые бы использовали эти платформы на сто процентов. Однако практические задачи настоятельно требуют этого: мощность мобильных процессоров нельзя наращивать бесконечно из-за растущего тепловыделения, да и аккумуляторы не бесконечные.
До последнего времени все кивали головой в сторону проектировщиков железа, а они пожимали плечами — в распоряжении мобильных программистов давно имеются многоядерные центральные и графические процессоры, по производительности не уступающие настольным аналогам. Есть системы управления потреблением энергии. Что же вы всё стараетесь уместить в один поток? Распараллеливайте код и наслаждайтесь производительностью!

Аппаратные компоненты процессора Qualcomm Snapdragon 800, допускающие распараллеливание:


Проблема в том, что так и не создано технологии распараллеливания для мобильных устройств, ставшей бы промышленным стандартом. Поэтому, как это ни удивительно для столь конкурентной сферы как мобильные вычисления, эта сфера почти пуста. Но наивно полагать, что никто этим не занимается. Ведь даже новичку понятно: «кто первый встал, того и тапки». Обладатель стандарта снимает не просто сливки с рынка, а самую пеночку!

Жизнь без Intel

Один из «тормозов» заключается в том, что в мобильном мире процессоры Intel — основа параллелизма в серверных системах, особенно не применяются. Здесь царит мир APR-технологий и графических подсистем. Поэтому предлагаемые подходы сконцентрированы вокруг распараллеливания либо времени выполнения средствами виртуальной машины, либо на этапе сборки и преобразования исходного кода средствами компилятора.
Но всё это кажется программистам не особенно удобным. По этой причине одним из трендов становится преобразования кода в автоматическом режиме. Второй современный тренд – компиляция программы перед ее выполнением. На этом основано большинство так называемых Runtime машин. Это ART — Android Runtime или Qualcomm MARE (Multicore Asynchronous Runtime Environment).
С графической подсистемой чуть попроще: здесь есть OpenGL ES (OpenGL for Embedded Systems) — подмножество графического интерфейса OpenGL, разработанное специально для встраиваемых систем.

Так что же может MARE?

Тесты показывают, что несколько строчек дополнительного кода увеличат производительность на 75%. Но бытующие в среде программиcтов мифы об убийственной сложности кода порой не дают внимательно прочитать мануалы. Вот классический пример параллельного процесса на примере вывода на экран «Hello Word» на Mare:

#include <stdio.h>	
#include <mare/mare.h>	
int main() {	
		mare::runtime::init(); //Initialize	MARE	
																																
		auto hello = mare::create_task([] {printf("Hello ”);});	// Create task					
		auto world = mare::create_task([] {printf(“World!”);});	// Create task

		hello >> world; // Set dependency	
																																									
		mare::launch(hello); //	Launch hello task																																					
		mare::launch(world); //	Launch world task	
																																					
		mare::wait_for(world); // Wait to complete	
																																			
		runtime::shutdown(); // Shutdown MARE																																				
		return 0;
}	

Не только разрабочики Uber или WhatsApp задают тон в области тех или иных приложений. Есть и иные, не менее доходные отрасли разработки для мобильных устройств, где еще только-только начинается «жизнь». Например параллельное программирование и разработка общих для всех стандартов! Не всё так уж запредельно сложно, при желании можно разобраться.

Тем, кто хочет разрабатывать под мобильные устройства, рекомендуем профессию «Разработчик мобильных приложений».