Wednesday, 25 August 2010

Running 64-bit OpenMP Debug Builds compiled with Visual Studio 2008 SP1

Scenario: 
You have a recent (Vista/Win7) 64-bit operating system from Microsoft, with Visual Studio 2008 Professional SP1 installed (VS2008). Furthermore you have installed the .NET Framework 3.5 for 64-bit compilers. You now want to compile and debug your OpenMP application as a 64-bit binary to get access to all that juicy RAM for your application.

(Please note: Visual Studio Express does not officially support OpenMP.)

In theory this should be as easy as right-clicking on your project and selecting the Debug configuration on the X64 platform. Unfortunately, when you start this application, either in the shell or via Ctrl-F5 you get the following extremely helpful message:

The application has failed to start because its side-by-side configuration is in correct. Please see the application event log or use the command-line sxstrace.exe tool for more detail.


Since you are a highly trained professional you open the Event Viewer application and look at the log:


Activation context generation failed for "c:\Users\jse\Documents\Visual Studio 2008\Projects\OpenMP 64-bit Debug test\x64\Debug\OpenMP 64-bit Debug test.exe". Dependent Assembly Microsoft.VC90.DebugOpenMP,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" could not be found. Please use sxstrace.exe for detailed diagnosis.


At this point, you start Googling and several hours later you end up with the following insight:


Solution part 1 - the missing DLL:
The first problem is that the X64 OpenMP Debug DLL (vcomp90d.dll) is not correctly installed in %windir%\winsxs. However, the dll is hopefully located in redist\Debug_NonRedist\amd64.
This is presumably a bug in the Visual Studio installer, but Microsoft does not seem to eager to fix it.


The file can however not reliably just be copied to the winsxs directory, since we need a hashcode and a manifest file, so to get it properly installed we fire up the venerable Visual Studio IDE and create a new project. As project type choose Other Project Types->Setup Project and give a suitable name to it.


Once the project is opened right click on it, and choose Add->Merge Module, you should now get a dialog box where you can add  Microsoft_VC90_DebugOpenMP_x86_x64.msm to the project. 
Next you build your solution, and invoke the installer you just created.


Verify that you now have a  directory roughly  named %windir%\winsxs\amd64_microsoft.vc90.debugopenmp_1fc8b3b9a1e18e3b_9.0.30729.1_none_239c2888a12512d1. The DLL should now be properly installed.


Solution part 2 - linking with the right library version:
If now you now try to start the application, you end up with the exact same error message as we initially got. The event log tells us this is because the application is looking for version 9.0.21022.8 of the DLL, but the one we just installed is version 9.0.30728.1. The first version is the one that was included in the VS2008 retail package, while the latter is from the service pack. 


The default behavior of VS2008 is to:


...default behavior of applications compiled with Visual C++ 2008 and later releases. When you compile an application, it is bound to the original release version of libraries available. This is true even if you have a later release installed on your computer.


Luckily this policy is easy to fix, just add _BIND_TO_CURRENT_OPENMP_VERSION=1 preprocessor definitions of your project. (Configuration Properties->C/C++->Preprocessor).

(This second step can also be solved by adding a version redirect in %windir%\winsxs\manifest

That's it! You should now be able to run your 64-bit OpenMP Debug builds both from VS2008 and from the shell. You can now go back to actually getting your application working!

Thanks to Microsoft for really making the life of developers so challenging!

References:

Saturday, 31 July 2010

Rittrapport: Sølvstufossrittet

Sølvstufossrittet ved Sarpsborg er et av de mer teknisk krevende maratonrittene i Norge, og det burde således passe meg ganske bra. 
Det var likevel litt tilfeldig at jeg stilte opp, men for min del var det eneste mulighet til å få kjørt et maratonritt før Ultrabirken (UB). Rittet skulle derfor brukes til både å teste dekk, spiseregime samt løpstaktikk. Det som skulle testes ut var:
  • Raven 2.2 dekk på vått og teknisk føre. 
  • På Lillehamer-Oslo spiste jeg hver halvtime (gel eller bar). Nå skulle jeg forsøke det samme i terrengritt. Jevn spising blir helt essensiellt på UB, hvor jeg fort skal være ute i over åtte timer.
  • Fylling av flaske underveis. Jeg startet bare med en flaske, og planen var å drikke så mye jeg ville, og heller fylle flasken på en matstasjon.
  • Jeg mistenker at jeg ofte starter litt for rolig i ritt, og kjører meg jevnt og trutt oppover. Denne gangen skulle jeg forsøke å henge med teten fra start, og se hva som skjedde.
Kjøringen fra Oslo gikk unna på en drøy time, og jeg fikk en grei oppvarming. Eliten startet for seg, og så var det vår tur. Uvanlig lite knuffing om startposisjoner gjorde at jeg enkelt fikk stilt meg i 2. startledd. En kilometer med masterstart bak motorsykkel skaper stor strekk i feltet, men jeg sitter med i tetpuljen, pulsen er dog i høyeste laget og etter tyve minutter skjønner jeg at dette går for fort. 

Jeg slipper puljen og får pulsen litt ned. Dessverre medfører dette at neste tog med ryttere suser forbi og jeg har brent av for mye krutt til at jeg orker å legge meg på hjul.

I første terrengparti er det mange ryttere foran meg, flere er engstelige på det våte føret og det blir mye kaos. Jeg klarer å kjøre meg opp noen plasser, og ligger for meg selv når jeg kommer ut på grusen igjen. De neste par timene kjører jeg i fra i terrenget og blir tatt igjen på grusen, men det er stort sett den samme gruppen jeg kjører med. Etter to timer er det ett lang asfasltstrekke og jeg møter virkelig veggen. Gruppa drar ifra, det er motvind, jeg har vondt i ryggen - tvilen om hvorfor jeg driver med dette kommer sigende. Likevel ER jo dette det morsomste jeg vet, og jeg SKAL jobbe meg til mål.

De neste to timene ser jeg knapt en eneste rytter, de som er raskere enn meg er foran, de som er tregere er bak. Jeg tråkker og spiser jevnt og trutt.  Jeg er så ensom at jeg lurer på om jeg har kjørt feil, men jeg passerer blide og flinke løypevakter jevnt og trutt. Jeg passerer skiltet med 10 km igjen, og i en sugende grusmotbakke kommer det to ryttere snikende, den første rekker å passere meg før vi svinger inn på et langt stiparti. Dette tenner meg til en siste kraftanstrengelse, jeg girer opp på storeskiva og suser ifra. Slutten består en lang og bratt grusklatringen og mye flytsti. Midtveis i bakken ser jeg de to ta kraftig innpå, og på slutten har førstemann nesten hjulet mitt, men så er det sti igjen, og jeg skjønner jeg har taket på ham. Litt dårlig merking gjør at jeg kjører noen hundre meter for langt på slutten, men dette endrer ikke resultatlisten og koster meg bare et snaut minutt. 

Det var virkelig godt å komme til mål, og det var både brus og burgere til deltagerne. At regnet først begynte etter at jeg var kommet til mål var også en bonus! Men grådig sliten, det var jeg.

Jeg ender på en 7. plass i klassen, med sluttid 4:32:23. Fornøyd med plasseringen, men ikke helt fornøyd med egen innsats.


Oppsummering av testing:
  • Raven fungerte supert, selv på vått føre. Så lenge det ikke er for mye stein i løypa er dette nå mitt førstevalg til ritt, uansett hvor vått det er. 
  • Jeg fikk gjennomført spiseplanen min, men det krevde mye disiplin denne gangen også.
  • Jeg fylte flasken en gang underveis, og de hadde klare et litersbeger på matstasjonen så gikk veldig rask å fylle. Håper de er like flinke på UB.
  • Den harde starten var ikke noen suksess. Det ble veldig tungt etter to timer, og jeg er ganske sikker på at det ville gått fortere totalt sett med en litt roligere start. Jeg slapp også så tidlig at jeg ikke fikk glede av god plassering i første terrengparti.

Sunday, 27 June 2010

Rittrapport: Lillehammer - Oslo


For noen år siden forsøkte jeg meg på Trondheim - Oslo. Det endte på Dombås, våt, kald, utslitt og demotivert. 

Kanskje ligger gleden i sjarmøretappen fra Lillehammer? Jeg reiste opp lørdag morgen med gutteklubben til min Onkel. Vi var påmeldt i samme startgruppe, og det var utrolig behagelig å få sitte på med dem opp. Hjem igjen skulle jeg komme meg for egen maskin.

En titt startlisten avslørte at det var et 25-manns felt fra Holmenkollen Cykleklubb  (HCK) i startpuljen min (1256 - "tur 6-8 timer"). Snoking på hjemmesiden deres avslørte at dette nystartete laget hadde ambisjoner om en tid ned mot fem timer, noe som passet bra med egne ambisjoner. 

Taktikken fra start var å legge seg i sekken bak dem, bli med rulla om jeg fikk lov, og sitt med helt til mål. Kort oppsummert var det akkurat det som skjedde.

Etter 20 min oppvarming gikk jeg til båsen, og det var lettvint å se hvem som kjørte for HCK. Som draktfarge hadde de valgt den ekstremt maskuline fargen rosa. Jeg presser meg fram rett bak dem og vi triller ut fra start. De setter fort i gang en bra rulle, og vi er cirka ti som legger oss i sekken. Etter en snau time kommer kapteinen bak til oss for å spørre om noen har lyst til å hjelpe til. OSI-trøya forplikter - vi er da ikke noen wheelsuckers. Som den eneste fra sekken melder jeg meg. Jeg blir tatt godt imot og vi holder 44km/t fram til Hamar, noen minutter foran skjema til 5 timer.

Etter Hamar kjenner jeg kjøret og går ut av rulla for en liten stund. Trykker i meg to store gel i Stangebakkene, hvor HCK heldigvis kjører rolig og jeg får tilbake litt krefter. Idet vi organsierer oss på toppen hører jeg lyden av karbon som sprekker og ser at noen rosakledde går i bakken. En av dem blør ganske kraftig og fikk seg et solid kutt i leppa. "Noen" stopper for å ta seg av ham og vi setter igang rulla igjen. 

Mot Minnesund går det unna, nesten hele HCK bidrar i rulla, og vi slipper også inn noen andre som tar en føring eller tre før de slipper. Vi suser over Minnesund og er plutselig på Eidsvoll - nå er det kjent terreng fra turen for en uke siden. Dessverre begynner mange i HCK å merke kjøret og vi er bare en syv-åtte  som bidrar i rulla, like mange rosakledde ligger i sekken bak. Samtidig skjønner vi at dette kan gå på under fem timer, så det er bare å gi gass. HCK var klare på at målet var å få fem til mål. I bånn ved Skedsmokorset er vi cirka femten, og folk skrelles av. Når vi kommer inn på Østre Aker vei er vi rundt 10, men klokka går og vi vet ikke helt hvor langt opp i bakken målseilet er så vi gir jernet selvom noen detter av. Jeg har mer enn nok med å henge med, men motiverer meg selv med at jeg ikke skal bli slått av noen rosakledde pappagutter på de siste kilometerne.

I siste bakken er hver man for seg selv, åtte fra HCK henger med helt inn og en fra OSI. Offisiell sluttid ble 4:59:49, snittfart ble rett i overkant av 38 km/t.

Takk til den fine gjengen fra HCK som gjorde dette til en enorm opptur!

Ting som fungerte bra:
  • HCK som slapp inn andre i rulla såpass tidlig. De hadde ikke klart dette uten meg (og litt hjelp fra andre).
  • Militærdisiplin på spising. Jeg brukte klokka og tvang i meg noe hvert 30. minutt. Totalt gikk det fem bars og fem gel.
  • Motivere seg selv ved å gjenta: "Det er dette du synes er gøy", "Smerte er feighet som forlater kroppen" og "Vondt er godt".
  • HCK kjørte rolig nok i bakkene slik at gruppa ikke ble sprengt og vi fikk raskt organisert oss på toppen.
Ting som fungerte dårlig:
  • Krampe i høyre fotblad de siste fire timene. På tide å spandere på seg nye sko.
  • Litt snaut med tre flasker drikke i varmen.
  • Mye skumle situasjoner ved forbikjøring av store, urutinerte puljer. Vi tapte nok noen minutter på dette. Det er en grunn til at raske og store lag er seedet.

Monday, 28 December 2009

Amazon Kindle - erfaring etter 14 dager

(Opprinnelig publisert på terrengsykkel.no)

Av min tante fikk jeg et Amazon Kindle lesebrett til jul, det kom faktisk litt på forskudd og jeg har nå brukt det i ca to ukers tid, og lest tre bøker fra perm til perm. Siden jeg vet det er flere teknolgientusiaster på forumet, tenkte jeg å dele mine erfaringer her:

For å begynne med konklusjonen: Jeg har trua på at dette i stor grad kan erstatte boken. Skjermen, som ikke er en vanlig skjerm, men e-blekk er utrolig god å lese på, og jeg glemmer fullstendig at jeg ser på en skjerm og ikke papir. Det oppleves virkelig som bokstavene er trykket, og står "ut" fra bakgrunnen. Siden skjermen ikke er bakgrunnsbelyst krever den like mye leselys som man trenger til en vanlig bok.

Knappene for å bla framover og bakover er plassert der de burde, og brettet er lite og lett nok til at man fint kan holde det i en hånd mens man leser, og samtidig gir lille Ellinor (3mnd) tåteflaske med den andre.

Kjøp av bøker fra Amazons nettsider er selvsagt lekende lett, og de kommer dalende over 3G (ikke Wi-Fi) i løpet av få sekunder.

Positive ting:
  • Fantastisk skjerm.
  • Lang batterilevetid (1-2 uker)
  • Lading via USB kabel, og bare det.
  • Mange gratis e-bøker tilgjengelig.
  • Word/PDF/HTML/etc. dokumenter kan konverteres til ett mer passende format via epost og havne rett på brettet. (Dette koster dog noen få cent, så vil man spare penger kan man bruke USB kabel i stedet.)
  • Stort utvalg av bøker hos Amazon. De fleste koster mellom 5 og 15 USD. Fagbøker koster fort 30USD++.
  • Bokmerker og notater lagres automatisk hos Amazon.
Negative ting:
  • PDF leseren er ikke noe god. Man kan laste opp PDFer direkte, men det er ingen zoom-funksjon, slik at dokumenter formatert for A4/Letter blir fryktelig små. Funker i et nødsfall.
  • Bøkene man kjøper fra Amazon er kopibeskyttet i ett properitært format, og kan ikke selges, lånes eller gis bort til andre.
  • Bøkene på Amazon er ofte like billige i paperback som på Kindle -- uten frakt
  • Magasiner/avsiser man kjøper fra Amazon har ikke bilder eller figurer i Norge.
  • Ingen norske bøker eller aviser er tilgjengelig. (Tekstunge aviser som Morgenbladet og Le Monde Dimplomatique hadde egnet seg brillefint på Kindle.)
  • En overraskende stor del av flyturer i Norge består av takeoff og landing, perioder hvor man nok ikke skal sitte å flashe lesebrettet sitt.
  • Den innebygde Wikipedia leseren er ikke særlig god. Det er ikke Hitch Hikers Guide riktig enda.

For meg er den dårlige PDF-leseren den største skuffelsen. Som forsker leser jeg ganske mange artikler i PDF-format i løpet av uken, og det hadde vært fantastisk å kunne lagre disse på brettet sammen med notatene mine. Det finnes en større utgave (Kindle DX) med 9.7" skjerm hvor dette nok er bedre, men denne er bare tilgjengelig i USA.

Jeg ser for meg at for vanlig skjønnlitteratur vil jeg i stor grad gå over til lesebrettet i året som kommer. På godt og vondt fyller man ikke opp bokhyllene med enda flere bøker, og jeg slipper ihvertfall å vise fram hvor mange søplete fantasy-paperbacks jeg faktisk har lest.