More...

Който логаритмува — той дълго ще царува!

Теми от: Октомври '11


C

Или, както беше казала една умна глава преди доста години: Assembly language programming is an extravagant waste of human talent and should be avoided whenever possible.

Докато по-миналата седмица се занимавах с SimNow, ucbench и програмиране на асемблер за x86, този уикенд (донякъде като трибют към наскоро починалия майстор - R.I.P., Денис Ричи :\) минах на език от по-високо ниво за архитектура от по-ниско: а именно, C за PIC. Горноспоменатия цитат на Питър Нортън¹ е просто тоооолкова верен, за съжаление: старият проект на PIC е готов донякъде, но съм го замразил поради намекнатото в мисълта разхищение, което натрапчиво мисля как да избегна. Та, за да тествам Hi-tech C правилно, значи нов проект (с по-лесен замисъл), код наново от нулата, нов бредборд и даже малко нов хардуер. Ето видео с първата тестова програмка, която натворих:

Image
Цък (h.264 формат - работи с VLC)
.

Дали за "големия" проект ще стане с C (тъй като сега дори малката програмка заема 10% от паметта за код и малко над 10% за данни) предстои да видим, но поне има надежда: не знам дали психически щях да устискам да напиша толкова много асемблер :)

Забавен момент докато си купувах хардуера: трябваше ми добър 3.3V регулатор с нисък dropout и след допитване ме насочиха към MCP1703. След купуване на чаркаляците от Комет по някое време обърнах внимание, че май са забравили да ми дадат регулатора в торбичката. После забелязах, че все пак са ми го дали, но просто беше толкова миниатюрно, че да те напуши смях. Аз очаквах нещо такова, а то се оказа такова (виж стрелката)... Иска си RTFM. Трябва да видите как му се запояват крачета на такова нещо - мога занапред да се пробвам да запоя жички на песъчинка, сигурно ще успея след този тренинг...:)


--------
¹ независимо, че хитрата лисица си е написала първите версии на нортън командър без нито ред C :)


Публикувано в категория Програмиране -- clock 24 Oct 2011, 03:08, 3 коментара -- English View in English


thought

Упътване: AMD SimNow

Бях обещал да напиша упътване за нещото, наречено AMD SimNow™.

SimNow, най-общо, е пълен симулатор на дадено PC, дори несъществуващo такива. Ако по "Компютърни Архитектури" са ви казвали, че процесорите са софтуер (което е вярно), и се тестват (софтуерно) стотици хиляди часове, преди да се появят като реален кристал (което също е вярно), то ето това е една от програмите, които прави тези симулации.
SimNow работи на много ниско ниво, изчислявайки, например, как протича комуникацията с паметта (чиято точна скорост и тайминги също се емулира), какво прескача по хипертранспорта и още много други детайли...
Цената на всичко това е много ниската скорост на емулация - например, с 3200 MHz процесор емулирате уж 2 гигахерцов, но със скорост на емулацията 50-100 MIPS.
Действително, симулацията просто "тече" по-бавно от реално време (противно на DosBox, VMWare и други). Т.е., процесора вътре в емулатора се приема за работещ с фиксирана скорост, и понеже емулирането му с 1:1 скорост е невъзможно, просто времето се "разтяга": вътре в емулатора, "sleep 1s" ще отнеме 10 секунди, ако текущата скорост на емулиране е 200 MIPS. Ако гледате филмче вътре в емулатора, то ще "върви" без "засечки", но много по-бавно. При другите емулатори обикновено е обратно, програмата ще се усети, че процесора е бавен, ще пусне framedrop и т.н.

С горното вероятно ви убедих, че ползването на този емулатор е свързано с мноооого чакане. Затова е добре да се оборудвате с лека и оптимизирана гостуваща OS. Освен това, правенето на виртуален твърд диск не е особено лесно, но затова пък CD .ISO файлове се поддържат много добре и най-лесно е да се насочите към някоя от леките LiveCD linux дистрибуции - аз ползвах Puppy Linux 5.28. Това е една доста добра дистрибуция: не казва нито "гък" за това, че я пускате върху процесор, за който въобще не е чувала, зарежда за приемливо време (десетина минути, нищо работа), но веднъж като зареди, всичко върви прилично. Вероятно ще ви подразни липсата на синхронизация между курсорите в домакинската и гостуващите OS. С настройка на чувствителността на мишката в puppy, общо взето сте готови.
SimNow ви позволява да си "сглобите" каквато машина си пожелаете. Има асортимент от налични хардуерни модули (видеокарти, южни мостове, процесори,...), но навързването им не е лека играчка, за това можете да отворите просто една от готовите конфигурации, които идват с инсталацията. Например, за Bulldozer има само една конфигурация, vp_bd_phase1.bsd.
Има още една пречка, преди да заработи емулацията с вашето Live CD. Boot приоритетите в BIOS указват HDD да са преди CD, и по подразбиране това ще ви доведе до грешка "Invalid (or missing) operating system". За да оправите това, влезте си в BIOS (който... е ... ами, истински) и го оправете. Restart и voilà!

Следва недобре документираният момент, как да вържете вашата виртуална машина с реалния свят. SimNow не поддържа Copy/Paste между гост и домакин, няма споделени папки, така че най-лесният вариант е да си закачите виртуалната машина към LAN. Виртуализирането на мрежата под SimNow е направено гъвкаво, но (поне за начало) - сложно. Откъм госта е лесно - той вижда Е1000 мрежова карта. Откъм домакина, SimNow очаква да се върже към сървърен процес, наречен "медиатор". Него трябва да си го стартирате ръчно. Този медиатор е реалната изходна точка на емулирания трафик към света. Т.е., ако гостът иска да ping-не google.com, пакетът първо се праща през E1000 емулацията, после SimNow тунелира пакета към медиатора (който спокойно може да работи и на друга машина) и после пакетът се появява от сървъра, евентуално NAT-нат, или директно, все едно E1000-ката е бриджната за реалната LAN мрежа. Вариантът с бридж e най-лесен, затова ще опиша него. Преди да пуснете SimNow, пуснете програмката "mediator", с аргументи -p <port> (например: "./mediator -p 8888"). Медиаторът ползва libpcap и затова изисква root привилегии. След което, пуснете вашата симулация, и в командния терминал на SimNow (обикновено, това е конзолата, от която сте извикали ./simnow) трябва да укажете как да се свърже с медиатор-сървъра. За целта напишете "setMediatorHost localhost:8892" (тук числото е <port> + 4). След това следват командите "linkConnect down" и "linkConnect auto", с което E1000-ката ще каже на гост OS-а, че е вързан (в случая, все едно нова карта е закачена към вашия LAN). Така комуникацията е уредена и можете да си работите на машината. Малък момент - неизвестно защо, не можех да пингвам госта от домакина, макар и да можех от друга машина в моя LAN. Демек, за да кача файл в госта, първо го upload-вах на файловия сървър вкъщи, след което си го свалях с wget от госта. За щастие, puppy идва както с wget, така и с unzip :)

След цялото това нещо, сигурно се питате - добре де, защо ни е въобще да правим емулация?
В моя случай, това беше единственият начин да проверя, дали ми работи реализацията на ucbench с XOP инструкции — без да си купувам реално Булдозер. Което, всъщност, и нямаше как да направя, преди датата му на пускане! Конфигурацията vp_bd_phase1.bsd поддържа XOP и FMA4, при това с истинската им скорост: когато подкарах ucbench и тествах как се представя новият код, то резултатите бяха около 50% подобрение - което, както се оказа, отговаря точно на това, което се получи и на реалния Булдозер!

Финални думи: емулатора работи само на 64-битови AMD процесори. Пише си го, като изискване, на сайта. В лагера на Интел, положението е същото, но неофициално: те имат подобен емулатор (който пробвах през м. Март), който също симулира още несъществуващи процесори. Само че, ако се направите на нахални и се опитате да го пуснете на AMD процесор, програмката уж тръгва и след малко гърми със Segmentation Fault. Същата програма, пусната на 14 пъти по-слаб Intel процесор (Atom, vs. Thuban), работи без засечки :D. Да живеят междуфирмените удари под кръста :]


Публикувано в категория Технологии -- clock 24 Oct 2011, 02:29, 3 коментара -- English View in English


thought

Нещата напоследък...

... защото се случиха няколко яки работи.

Организирахме с фирмата първия семинар по фотореалистична графика в България. Такова събитие не се беше случвало никога, така че не знаехме какво да очакваме и организацията беше яко ad hoc. Мисля, че стана добре, но още не сме разгледали feedback формите (хехе) :)

После, леко надградих ucbench, като добавих поддръжка за XOP инструкции. Те се явяват нещо като допълнителна ортогонализация на SSE, и добавят някои способности от стандартните x86 инструкции, които много отдавна трябваше да са влезли в SSE - векторни целочислени хоризонтални събирания, побайтови пермутации, cmov, и — най-важното в случая — векторен вариант на ROR/ROL инструкциите. Централна част в кода на ucbench е SHA-1 алгоритъма, който, от своя страна, прави цели 3 побитови ротации на рунд, които досега в SSE варианта се "емулираха" чрез SHL, SHR и OR. Адски неефективно, отделно пък заемаха по един временен регистър! С добавянето на VPROTD (което прави векторно ROR или ROL според аргумента), производителността се подобри с цели 45-50%.
Интересен е моментът как се тества такъв код без да имаш необходимия процесор (Булдозерите все още не бяха излезли). Сблъсках се с това нещо, наречено AMD SimNow, което, освен, че е ужасно бавно, е и недобре документирано - смятам да напиша един кратък tutorial тази седмица (аз лично прекопах интернет в търсене на такъв - сега поне може да съм от полза някому :)).

Третото готино нещо е, че отново чета курса "3D графика и трасиране на лъчи" във ФМИ. Пак студенти, търчане за проектори, организационни неща - мазохизъм за ценители :)


Публикувано в категория Open source -- clock 16 Oct 2011, 23:13, 0 коментара

Language:

bgБългарски
enEnglish


Категории:

Мета
Hardware
Технологии
Забава
Open source
Интересно
Наляво-надясно
Простотии
Програмиране
Музика
Картинки
Фотография
Всички


Архив:

+ 2008 (21)
Март '08 (3)
Април '08 (5)
Май '08 (5)
Юли '08 (2)
Септември '08 (1)
Октомври '08 (2)
Декември '08 (3)
+ 2009 (15)
Януари '09 (2)
Февруари '09 (1)
Март '09 (1)
Юни '09 (1)
Юли '09 (1)
Август '09 (3)
Септември '09 (1)
Октомври '09 (2)
Ноември '09 (1)
Декември '09 (2)
+ 2010 (11)
Януари '10 (1)
Април '10 (2)
Юни '10 (2)
Юли '10 (1)
Септември '10 (1)
Ноември '10 (2)
Декември '10 (2)
+ 2011 (11)
Януари '11 (3)
Февруари '11 (1)
Юли '11 (1)
Август '11 (2)
Септември '11 (1)
Октомври '11 (3)
+ 2012 (19)
Януари '12 (3)
Февруари '12 (1)
Март '12 (1)
Април '12 (2)
Май '12 (3)
Юни '12 (1)
Август '12 (2)
Септември '12 (1)
Ноември '12 (3)
Декември '12 (2)
+ 2013 (6)
Март '13 (3)
Юни '13 (1)
Август '13 (1)
Октомври '13 (1)
+ 2014 (7)
Март '14 (1)
Април '14 (1)
Юни '14 (1)
Септември '14 (3)
Декември '14 (1)
+ 2015 (5)
Януари '15 (1)
Март '15 (3)
Май '15 (1)
+ 2016 (5)
Юни '16 (1)
Юли '16 (1)
Септември '16 (1)
Ноември '16 (1)
Декември '16 (1)
+ 2017 (1)
Август '17 (1)


Последни коментари:

23 Jun 2024, 18:01 от anrieff
21 Jan 2020, 09:01 от anrieff
20 Jan 2020, 11:38 от Владо
30 May 2017, 02:02 от anrieff
26 May 2017, 01:00 от Mathew
30 Mar 2017, 13:59 от antfarmer


Valid XHTML 1.0 Strict

Blogroll:

linkТимур и неговите командоси
linkivanatora
linkБезброй математици...
linkJoel on Software
linkRidiculous Fish
linkXKCD blag