馬其頓奇遇記

自從歐盟和「申根區」誕生以來,歐洲多國旅遊就變得異常簡單了,但是有着「歐洲火藥桶」之稱號的巴爾幹地區卻不是這樣。從1991年,南斯拉夫開始解體,一直到2008年爲止,巴爾幹半島經歷了大大小小的戰爭,曾經被政治強人鐵托擰成一股繩的南斯拉夫徹底四分五裂。分裂以後的國家紛紛在邊境上建立了口岸,曾經的跨國鐵路、巴士要麼停運,要麼大幅減少。對於遊客來說,在這些大大小小的國家之間跨越邊境成了一個難題。好在這些國家都希望加入歐盟和申根區,於是紛紛對申根簽證採取了某種程度的承認。但是到底是哪種程度,各個國家有各個國家的政策,而且一直在變化中,甚至有些政策邊境官員都不一定清楚。我這次去馬其頓便是遇到了這樣的事情,被直接遣返回了瑞士。

「順利」進入馬其頓

本來我此次的旅行計劃主要是阿爾巴尼亞,從希臘科浮島(Corfu)進入阿爾巴尼亞薩蘭達(Saranda),然後從首都地拉那(Tirana)坐飛機離開。我從阿爾巴尼亞東南部的城市科爾察(Korca)離開的時候,途徑奧赫里德湖(Ohrid Lake)邊上的小城波格拉德茨(Pogradec),發現奧赫里德湖竟然如此漂亮。據說湖對面的奧赫里德城(Ohrid/Охрид)不僅更加漂亮,而且還是保加利亚第一帝國的首都,於是便萌發了去一探究竟的衝動。據我所知,自2014年11月以來,巴爾幹半島所有國家都對多次申根簽證持有者免簽了,馬其頓也在其中。我既然有瑞士的居留卡,想必也能直接去(事後證明我錯了),於是就找了一輛開往邊境Tushemisht的小巴,司機把我帶到了邊境口岸上(祗要150列克,相當於1.1瑞士法郎)。

阿爾巴尼亞口岸在湖邊的山崖上,扼住了交通要道,絕對是易守難攻。走到口岸前面時遇到了出租車司機,問我要不要去馬其頓的聖瑙姆修道院,我正有此意,但是看了看地圖發現好像距離很近,於是就拒絕了,決定步行過境前往。阿爾巴尼亞邊境官看了我的護照,問我要去哪裏,我說奧赫里德,於是就給我蓋出境章了。出境以後還要走一段路纔能進馬其頓,算是兩國之間的緩衝區。走了大概1公里,看到了馬其頓的口岸。邊境官員看了看我的護照以及瑞士居留卡,就給我蓋了入境章,出奇的順利,沒想到這會是後來麻煩的開始。

從阿爾巴尼亞進入馬其頓

進入馬其頓以後,我先去了湖邊的聖瑙姆修道院(Sveti Naum/Свети Наум),這一段路走了至少3公里,而且都是汽車公路,沒見有行人,早知道就坐出租車了。之後坐船去了奧赫里德城,第二天坐大巴去了比托拉(Bitola/Битола),然後又去了斯科普里(Skopje/Скопје),最後又心血來潮想去科索沃(Kosovo),終於在馬其頓與科索沃的邊境被遣返。

如圖,藍色是原定路線,紅色是實際路線。

路線圖

心血來潮前去科索沃

5月15日晚上,我剛剛逛完斯科普里,思考下一個目的地。本來打算坐大巴返回阿爾巴尼亞,因爲最後要從地拉那坐飛機回蘇黎世。但是發現斯科普里和科索沃首都普里什蒂納(Pristina)只有88公里,於是當場就去買了大巴票(320第納爾,相當於5.5歐元),這樣當晚就能到普里什蒂納,然後途徑古城普里茲倫(Prizren)回地拉那,這樣路上所花的時間和從斯科普里直接去地拉那是差不多的。我越想越覺得自己的安排真是天衣無縫,既充分利用了時間,不走回頭路,還能多去個古城,真乃絕妙(呵呵)。

由於科索沃不是一個被普遍承認的獨立國家,所以我先在科索沃的外交部網站查了他們的入境政策,確認了憑申根國居留卡可以入境,纔去買了汽車票。

出境受阻

由於是晚上9:30的車,車上祗有三個乘客,除了我一個是馬其頓人,一個是科索沃人。從斯科普里上車以後沒過多久就到了邊境口岸,出境的時候我們一起把護照遞了出去,心想蓋個章就能走了。沒想到意外就這麼發生了,邊境官員對我的護照翻了又翻,問我馬其頓簽證在哪呢。我一愣,告訴他我有瑞士居留卡,把護照和居留卡拿走,找上級鑑定,我在車上等待。又過了一會,幾個警察來了,叫我帶上所有的東西下車,進入口岸旁邊的小屋裏面等候。我看到警察拿着紫外線燈和放大鏡對着我的護照和瑞士居留卡仔細看,就好象能看成是假的一樣,嘴裏還唸叨着「problem」。我心中有些忐忑,不會大事不好了吧。

這時候一個懂英語的的警察終於發話了,他對我說,我入境馬其頓是有問題的。我立即否認,說我有申根居留卡,可以免簽入境,而且入境的時候有入境章,怎麼會有問題。他對我說,沒錯,但是我的居留卡不是永久居留卡。他打開馬其頓外交部網站讓我看,原來馬其頓是一個奇葩,它祗認多次入境的C類申根簽證和永久居民卡,我擁有的是瑞士有時間期現的居留卡,所以是不能入境的。我心想完蛋了,不會把我當場非法入境逮捕吧。我裝作一副恍然大悟的無辜的樣子,對他說既然是這樣我應該不能入境馬其頓纔對的啊。他說的確我不能入境,是另一個口岸的邊檢官的錯誤。

功虧一簣

與此同時,他讓我乘坐的大巴先走了,我想這下麻煩大了,想走也不容易了。但既然不是我的錯誤,應該讓我走纔對吧,反正我要出境了,哪怕過去以後我順路搭車也行啊。他們討論了半天,說先讓我等一下,他們給科索沃邊境打電話問一下。電話裏面說了半天,也沒說清楚,於是警察就決定把我帶到科索沃邊境去問。這時我覺得終於出現了一線曙光,因爲之前查了科索沃的外交部網站,上面明確寫了祗要有申根居留卡就能入境科索沃,無論是不是永久居民。被帶到科索沃邊境以後,警察讓我站在門外等待,過了好久,科索沃警察的結論竟然是不能入境!我想給他看外交部網站上寫的東西,但是苦於手機沒有網,也沒有紙質版。警察英語水平有限,也不知道是沒理解我的意思,還是就是不願意讓我用他們的電腦。於是我就被馬其頓的警察帶回了馬其頓邊境。真是功虧一簣,要是我事先打印好科索沃的入境政策也許就好了。

科索沃邊境

阿爾巴尼亞?塞爾維亞?希臘?

回到馬其頓邊境以後,警察讓我坐到一邊等待,同時另一個持槍的警察拿走了我的背包進行檢查。有一個警察過來說建議我坐大巴回入境的那個口岸去阿爾巴尼亞,但是另一個警察說不行,萬一再出問題怎麼辦?這回科索沃不讓我入境,難保阿爾巴尼亞就讓,哪怕我是從阿爾巴尼亞來的,而且阿爾巴尼亞邊境有好幾百公里,讓我自己去怎麼保證我不繼續滯留馬其頓?我看了看地圖說這裏距離塞爾維亞邊境很近,要不然我去塞爾維亞吧,肯定可以入境。警察笑了笑說我簡直是瘋了,難道不知道斯科普里到塞爾維亞要經過一個叫庫馬諾沃(Kumanovo/Куманово)的地方嗎?庫馬諾沃已經被伊斯蘭極端份子佔據了,有消息稱他們是ISIS的一部分,前幾天發生了一場與警察的槍戰,造成22人死亡,目前局勢極端緊張。我說既然這樣,不如去希臘吧,作爲申根區我肯定可以去。警察不耐煩了,說希臘邊境也很遠。想想看希臘和馬其頓兩國關係惡劣,想必困難。

最終遣返

這時候又來了好幾個警察,他們一起用馬其頓語討論了半天,終於得出了結論:立即購買回中國的機票!聽到這個我簡直氣炸了,這是我最不能接受的,況且馬其頓沒有直飛中國的機票,立即買轉機的票要花10000元人民幣以上。於是我說我沒錢,機票太貴了。他們想了想也覺得不合理,看到我有瑞士居留卡,於是決定把我遣返回瑞士,確認了凌晨六點就有去巴塞爾的機票,當時是半夜十二點,正好來得及,票價350瑞士法郎左右(約2000人民幣)。雖說比遣返中國好多了,但這也不是我想要的結果,我想我既然有從斯洛文尼亞盧布爾雅那(Ljubljana)回蘇黎世的機票,直接買一個從斯科普里去盧布爾雅那的機票行不行,這樣便宜不少。警察直接回絕了,說要是斯洛文尼亞拒絕入境怎麼辦?我說斯洛文尼亞是申根國,絕對不會的,他們威脅說,這是爲你好,難道你想被逮捕?我正想抵賴說沒錢買機票,他們直接從我的背包裏搜到了我的錢包和信用卡,立即在網上用我的信用卡買了斯科普里飛巴塞爾的機票,然後讓我到警車裏面等候。之後來了個警察,說開車送我去機場,以免我逃跑。到了機場以後,我被押送出境,蓋了出境章,確認我無法再入境了,纔把我的背包還給我。我看了看背包發現裏面惟一的一張50歐元的鈔票被拿走了,警察說這是送我到機場的費用,真是氣死我了。

在機場等到五點鐘,終於可以登機了,六點鐘飛機準時起飛,終於離開了馬其頓。在飛機飛行中,遇到了有個乘客疾病發作,躺在地上不能動,飛機差點返航斯科普里。幸虧乘客中有名醫生救了他,否則我就又要被「遣返」了。

飛機起飛

因爲邊境被遣返,我的直接損失至少有600瑞士法郎以上,包括新的機票、原來的機票、送到機場的「費用」、預訂的不可退款的賓館。這還不算我申請的帶薪年假,本來好好的還有幾天可以逛,這下子被送回瑞士,也沒有心情再出去了。此次最大的教訓在於,以後入境小國,一定要帶上打印的該國外交部網站上寫的文本。如果我帶了科索沃的入境政策說明,我成功進入科索沃的概率會大大增加,也就沒有被迫遣返造成的損失了。想想看如果我當時不是自作聰明去科索沃,而是原路返回阿爾巴尼亞,估計也不會發生類似的事情了。

坐火車從土耳其去伊朗

2014年12月的時候,我乘火車從土耳其凡城(Van)去了伊朗大不里士(Tabriz)。對於大部分人來說,這條路線並不尋常,首先是相對於土耳其旅遊,很少有遊客去伊朗。即使是去伊朗,很少有人陸路入境伊朗。而陸路入境伊朗,大部分人是選擇從多烏巴亞澤特(Doğubayazıt)乘汽車過。事實上伊朗和土耳其之間有三個口岸,分別在Doğubayazıt、Van和Hakkâri,前兩個可以找到公共交通,第三個比較困難。

出於對跨越鐵路邊境的熱愛,我專門選擇了火車。2014年七月的時候,我坐火車穿越了西伯利亞大鐵路。當時許多資料都是從一個叫Seat61的網站上查到的,後來發現這個網站的作者不僅整理了西伯利亞鐵路的資料,甚至還有倫敦到德黑蘭。我去之前的大部分信息都是從這個網站上得來的。

伊朗簽證

相比飛機,走這條線路最大的困難在於,需要申請伊朗簽證。對於全世界大部分國家的護照持有者(除美國、英國、加拿大等),伊朗是有落地簽證政策的,但僅限於從機場入境。如果從陸路入境,那麼只能提前申請好伊朗簽證了。其實即使是飛機入境,落地簽也是不一定覈發的,尤其是對歐美護照持有者,中國人被拒絕我倒是聞所未聞。所以爲了避免冒險被拒絕入境,也可以申請簽證作爲保險。

伊朗簽證辦理需要兩個步驟,分別是申請簽證號(返簽號)和去大使館取貼紙簽證。簽證號申請需要通過伊朗境內的代理機構,我是通過的Visa for Iran,價格是55歐元一個人,花了一個星期就拿到了簽證號。之後,帶着護照去伊朗大使館,憑簽證號,再交40歐元給使館,通過郵寄取回簽證。我週一提交的,週四就收到了。伊朗簽證非常好申請,幾乎不用提交什麼個人材料,譬如收入證明、保險等等我都沒有提交。

伊朗簽證

火車票

我乘坐的火車其實是從伊斯坦布爾(Istanbul)出發,經過安卡拉(Ankara)、塔特萬(Tatvan)、凡城(Van)、大不里士(Tabriz),最終目的地是德黑蘭(Tehran)。這列火車每週只有一班,週二從伊斯坦布爾出發,週五到達德黑蘭。由於我還想去凡城看凡貓,所以就選擇了從凡城出發,到大不里士結束。據說目前由於伊斯坦布爾到安卡拉之間的鐵路在翻修,所以只能從安卡拉上車。如果是從安卡拉上,經過塔特萬時,還有一段凡湖渡輪,也挺有意思的。

不像歐洲國際火車票可以直接在車站購買,從土耳其到伊朗的火車票是要通過旅行社訂購的,這點和北京到莫斯科的火車票類似。我在網上找到了一家叫做「Viking Turizm」的旅行社,通過發郵件購買的,他們的郵件地址是info@vikingturizm.com.tr。

相比歐洲、俄羅斯和中國的鐵路價格,這個列車的價格非常便宜,從安卡拉到德黑蘭只要大概43.2歐元。我通過旅行社代理訂購的從凡城到大不里士的火車票,加上訂票費一個人只要12.9歐元。需要注意的是,在網上付款過後,還要到他們公司取票,他們的辦公地點在伊斯坦布爾的塔克西姆廣場旁邊。由於我是正好也要去伊斯坦布爾,所以就親自去取票了,否則需要請他們郵寄。

凡城

對大部分去土耳其旅遊的遊客來說,凡城並不是一個著名的目的地。但是產自凡城的凡貓(或者稱凡湖貓)卻是一大名貓,甚至被土耳其當成國寶。凡貓最大的特點是眼睛一個藍一個綠,而且不像一般的貓一樣怕水,凡貓還會游泳。既然到了凡城,不能不去看看凡貓。位於凡城郊外的凡城大學有一個凡貓之家,裏面有許多可愛的貓咪,都是純種的凡貓,遊客可以和貓一起玩。

凡貓之家

凡貓

除了凡貓以外,凡城還有一個很大的城堡,在凡湖邊上的山上。這個城堡據說是公元前9世紀到7世紀烏拉爾圖王國建造的,俯瞰其首都Tushpa。城堡至今還非常壯觀,可謂是我去過的最大的城堡。

過境

按照時刻表,火車在晚上9點鐘的時候會到凡城火車站,然後9點半出發,可是我一直等到11點纔開車。在車站等待的時候,遇到幾個從澳大利亞和挪威來的背包遊客,他們說他們是從安卡拉上的車,可是火車到塔特萬之前就壞了,於是土耳其鐵路給他們安排了汽車把他們送到了凡城,然後從凡城上伊朗的火車。這麼看來,他們是錯過了塔特萬到凡城的渡輪了。

凡城火車站地理位置偏僻,必須找出租車才能過去,大晚上的我花了20里拉纔找到車。這個火車站非常寒酸,內部沒什麼裝修,連座位也沒有幾個,估計平時也沒幾趟火車來這裏。

凡城火車站

等到10點左右的時候,突然大家都擠到了一個窗口前。我過去看了看,好像是檢票開始了,於是也跟上去。有一個伊朗的庫爾德人用英語問我要不要和他們在一起,我還挺疑惑的,火車票上不是已經有了鋪位號碼了嗎?排隊到窗口前我纔知道,原來是到窗口重新分配鋪位號碼,於是按照檢票的順序安排。

登上火車以後,感覺還挺不錯的,鋪位是四人包廂的一個臥鋪,相當於中國一般火車的軟臥或者俄羅斯火車的二等鋪。下鋪同時還是兩個座位,收起來以後就變成牀鋪了。列車員來查票的時候,還發了喫的東西,每個人兩盒餅乾和一包伊朗茶,配上一壺熱水還有冰糖。

火車包廂

火車開動以後,我到周圍走了一圈,不小心進入了餐車。

餐車

聞到香味以後,頓時有點餓了,於是點了一份「藏紅花雞肉米飯」。後來到伊朗以後纔知道這是一道經典的伊朗菜,幾天之內喫了好幾次。

藏紅花雞肉米飯

喫飽以後,已經是午夜十二點多了,我去火車衛生間裏面簡單洗漱一下就回去睡覺了。睡前看了看時刻表,發現是6點35分到大不里士,暗自忖度既然火車晚開了一個半小時,那麼正好是8點鐘到,不用起一大早了,而且不耽誤大不里士的遊覽計劃(事後證明我大錯特錯了)。

可是還沒睡一會,突然被人叫醒了,一看錶是凌晨1點50分。原來是到邊境了,看其他人都下車了,估計是要邊檢蓋章,我也趕快穿上了衣服下車。

土耳其邊境

下車以後凍得我發抖,半夜氣溫在零下10攝氏度,趕快跑進了邊檢的房子裏面排隊。沒想到這一排就是半個小時,而且是光是蓋出境章,並沒有檢查行李。熬到2點40分終於回到了火車上,倒頭就睡了。可是感覺沒過多久,又被叫醒了,土耳其時間是凌晨4點,看了看地圖我已經到伊朗了,於是把時區設置到了德黑蘭,時間跳到了5點半。這回還好不用下車,是有邊檢人員上車來蓋章,蓋完章已經是伊朗時間6點了。我心想終於可以安穩睡一會了。

沒過多久,我又被叫起來了,時間是7點,所有人都得帶上所有行李下車檢查。於是我只好穿上衣服,收拾了行李,進入火車站安檢大廳。

伊朗邊境

伊朗火車站設施比土耳其的簡直不知道好到哪裏去了,不僅暖和,裏面還有商店,可以買早餐喫。我看了一下,價格非常便宜,只有土耳其的二分之一到三分之一!伊朗物價便宜是因爲他們的貨幣里亞爾劇烈貶值,比俄羅斯盧布還要厲害。這對於外國遊客來說是件好事,但本國人可就苦了。

伊朗邊境口岸商店

在安檢大廳的時候,我發現所有女人都戴上了頭巾。伊朗是一個什葉派政教合一的國家,實行伊斯蘭教法,所有女人在公共場合都必須戴頭巾,否則會被宗教警察逮捕。這個法律對外國遊客也適用。

之前我去過朝鮮,對其安檢印象深刻,簡直是細緻到無以復加,因此我對伊朗的安檢也抱有了如此的預期。但是令我意外的是安檢非常簡單,甚至我都沒把包裏面東西都翻出來就讓我過去了。這跟我後來在伊朗的印象是一致的,伊朗並不像朝鮮一樣是一個把自己封閉起來的國家,外界對伊朗封閉的印象其實是由於美國經濟制裁導致的,並非伊朗人自願。事實是在伊朗的市場中什麼東西都能買到,包括iPhone、美劇,甚至黑市中還有酒和豬肉(伊斯蘭教禁止)。

安檢完以後已經是8點了,看看地圖火車纔走了一半距離,肯定不可能很快到大不里士了。折騰了這麼一晚上,我回車上又繼續睡覺了,醒來已經11點了,火車竟然還沒到。最終一直等到下午1點半纔到大不里士站,晚點了7個小時。

大不里士火車站真的非常大,而且設施齊全,水平不輸中國近年來新建的高鐵站。這次伊朗的邊檢和火車站已經顛覆了我對伊朗的所有刻板印象,而後來事實證明這只是個開始。

大不里士火車站

橫貫西伯利亞小記

從小我就喜歡一個人看家裏面牆上掛着的中國地圖,看遍了中國的省份以後,我開始關注鄰國,尤其是遙遠的北方。中學學了世界地理以後,纔知道這塊地方叫做西伯利亞,而且它的氣候是亞寒帶針葉林氣候——光是聽這個名字就足以讓我產生極大的興趣了。後來我知道了有橫貫西伯利亞大鐵路,便經常幻想能夠親自體驗一下。等到了今年七月,趁着大學畢業的這個假期,我終於踏上了貫穿西伯利亞的旅程

2014年7月10日,我從北京北站坐火車出發前往滿洲里,途徑齊齊哈爾,開始了長達一個月的征途。7月13日早晨,我坐着國際大巴穿過滿洲里口岸,到達了俄羅斯邊境小鎮後貝加爾斯克。在後貝加爾斯克火車站坐上了火車,經過赤塔,7月14日到達了我的第一站——布里亞特共和國的首府烏蘭烏德。遊覽過後當晚再坐上火車,沿着貝加爾湖南岸行駛,7月15日早晨到達了伊爾庫茨克,緊接着又乘坐汽車去了貝加爾湖上的奧爾洪島,顛簸一天後晚上纔終於抵達。7月16日一天在奧爾洪島上,跟隨當地導遊去了島的北部,被貝加爾湖的景色深深震撼,之後又顛簸一天回到了伊爾庫茨克。7月18日我在伊爾庫茨克徒步遊覽了一整天,晚上就坐火車去了新西伯利亞。火車開了三十多個小時,終於在7月20日上午抵達了新西伯利亞,遊覽一天以後,當晚再次坐上火車前往葉卡捷琳堡。7月21日下午抵達葉卡捷琳堡,停留了一天,7月22日中午繼續前往金環小鎮弗拉基米爾。7月23日在弗拉基米爾遊覽之後,晚上前往了蘇茲達爾,在蘇茲達爾遊覽了一天,以後7月24日坐火車抵達了莫斯科庫爾斯克火車站,至此已經到達了西伯利亞鐵路的終點站。在莫斯科停留了兩天以後,我在7月27日抵達了聖彼得堡。三天後我繼續乘火車去了彼得羅扎沃茨克,當天往返了奧涅加湖上的基日島。7月31日早晨我抵達了白海小鎮凱姆,然後坐輪渡去了索洛韋茨基羣島,在島上停留了兩天後,返回凱姆繼續坐火車北上。8月3日早晨我終於抵達了我的最後一站——北極圈內的摩爾曼斯克,完成了橫貫西伯利亞,直抵北冰洋的壯舉。最後我乘坐飛機飛回莫斯科,又在迪拜轉機順便遊覽了一天,然後回到了北京。

許多人以爲西伯利亞是蠻荒之地,十分落後,俄羅斯人也很不友好,而且完全不懂英語。去之前我也多少有這樣的顧慮,但是去過以後纔發現,俄羅斯和俄羅斯人比我想象地要好很多。西伯利亞的自然環境十分好,一路上森林、草原、湖泊、河流風景迷人,完全不是一篇蠻荒的景象。俄羅斯人雖然相比西歐人要冷淡,但個人素質是非常高的,就火車車廂的衛生條件來說,超過許多發達國家。俄羅斯人在公共場所中非常小聲,從來不見任何人大聲說話,比西歐、美國還要安靜。俄羅斯人並非傳說中的完全不懂英語,即使在西伯利亞的小站站臺上買東西時,我遇到過能用流利的英語交談的店主。俄羅斯的治安環境也非常好,即使是單身女性在午夜行動也不會有太大問題,比起美國天黑後就不敢出門簡直是天壤之別,當然這多虧了隨處可見的警察。俄羅斯人雖然酗酒,但是所有商店在晚上九點以後就不再出售任何酒,以至於我在街頭連一個醉鬼都沒有遇到過。俄羅斯人也不像傳說中的懶惰,許多商店餐廳和公共設施都營業到半夜十二點,雖然還是比不上東亞人玩命幹活,比起西歐不知道高到哪裏去了。

我從2013年開始,兩年之內去了十幾個國家,有人感覺我好像是整天在環遊世界,問我哪兒來的這麼多時間和錢。實際上我這一年多來上學、實習、找工作、參加開源一件事情也沒少幹,僅僅是假期出去而已。這趟長達一個月的穿越俄羅斯的行程,我一共花了18000元人民幣左右,涵蓋了火車、機票、簽證、住宿、餐飲、購物等旅途中的一切花費。對於很多人來說,這點錢並不算多,並非難以負擔。我想說的是,環遊世界並沒有你想象的那麼難,只要願意並且有膽量,就可以實現。

鑑於窮遊網上已經有很多攻略了,具體每天的詳情我就不一一列舉了,放幾張照片好了。

西伯利亞的藍眼睛——貝加爾湖畔

克拉斯諾亞爾斯克火車站

葉卡捷琳堡原始落葉松林中的神聖殉道者修道院

莫斯科紅場上聖巴西爾大教堂

聖彼得堡近郊彼得宮城的沙皇噴泉

基日島奧涅加湖畔

索洛韋茨基羣島湛藍的湖水

摩爾曼斯克「列寧號」核動力破冰船

高維世界與一維價值

我前幾天去德國萊比錫參加了ISC學生集羣大賽。這個比賽的內容是在限定功率(3000W)的條件下,優化集羣的計算性能。每個隊伍的集羣分別由贊助商提供,清華大學隊是浪潮公司贊助的。由於硬件實在沒法和別的學校比,我們只好從軟件上來優化,比賽的程序包括了LINPACKHPCCHPCGQuantum ESPRESSOGadget。最終清華隊獲得了全球第三名,也算是盡力了——畢竟我們的集羣連GPU都沒,而許多隊伍配置極盡奢華,像愛丁堡大學連液冷系統都上了。

世界上「最快」的超級計算機

在ISC會議期間,我們得知了中國的「天河2號」以LINPACK峯值54902.4 TFlop/S的速度保持了超級計算機TOP500榜首,全球媒體爭相報道。但是在各個媒體的報道中,我們看到的是「天河2號」成爲「全球最快的超級計算機」,如Forbes的報道,而紛紛忽略了一個重要細節,即TOP500是以LINPACK的速度來排名的。LINPACK基準測試求解的問題是一個稠密的線性方程組,它完全是計算密集型的應用,其內存訪問、並行通信、磁盤讀寫都不成爲瓶頸。因此有人批評LINPACK提供的數值是「基本上無法到達的,卻有一小撮程序員在無聊地優化它的代碼,爲了使得他們的機器獲得更好的數值」。實際上衡量一個計算機性能的好壞,僅僅通過浮點計算密集型的應用來估計絕對是以偏概全,真實的系統性能還取決於整數計算性能、內存訪問性能、網絡通信性能和磁盤讀寫性能等等各個方面。哪怕是僅僅在科學計算領域,許多應用也不僅僅是在求解稠密線性方程組。許多時候可以認爲LINPACK數值完全不具備參考意義,因爲大多數科學計算應用的性能瓶頸根本不在這上面。

作爲「國家安全戰略投資」的天河2號,想必許多時候在求解的問題是破解密碼。然而一個可怕的事實是,大量密碼學算法,包括散列、非對稱加密(如MD5、RSA),都只進行整數計算,完全沒有任何浮點計算操作。如此看來,追求高LINPACK數值來提高密碼破解的性能,差不多是緣木求魚。

高維世界的序關係

說到CPU的性能,幾年前,大家在裝電腦的時候選購CPU只看主頻,頻率越高越好。於是英特爾爲了迎合市場,推出了奔騰四3.0GHz甚至3.6GHz主頻的CPU。後來進入多核時代,大家就看核心數,雙核的肯定比單核的好,四核的肯定比雙核的好。殊不知CPU的性能好壞有太多的參數,盲目追求高的主頻或者核心的數量沒有意義。不單單是CPU,想想看大家買數碼相機看什麼呢?許多人第一反應當然是像素啊。買單反鏡頭?光圈大小!買汽車?排量!買房?面積!

事實上這個道理淺顯易懂,但人們卻對它無能爲力。作爲沒有相關知識的普通消費者,面對這個世界紛繁複雜的參數真的是無能爲力,於是只好選擇一個「公認」的參數作爲基準了。

這一切的根源在於,向量和向量是無法比較大小的,只有標量纔能比較。向量只能通過一些函數變換到標量纔能比較,如模長,或者在某個空間上的投影。世界上的任何一件東西都可以用一個高維向量來表示,但爲了獲得序關係,我們通常只能把它映射到一個一維空間。在這個過程中,大量的信息都丟失了。對於同一組向量使用不同的函數,獲得序關係可以是完全不一樣的。

這是一個淺顯易懂的道理,而人們卻無能爲力。因爲人們天生傾向於用一個一維的數值來比較一切同類的事物(甚至不同類的事物),但事物天生是高維的。

價值觀是一個從高維空間到一維空間的映射

人們經常談論價值觀,譬如價值觀不同的人不要在一起,現代社會通過價值觀把人分爲不同的羣體。價值觀實際上是一個從高維空間到一維空間的映射,也就是一個高維向量的函數。人們面對紛繁複雜的事物,一個與生俱來的衝動就是對它進行評價,然後與其他事物相互比較。在這個過程中,不同價值觀的人使用了不同的函數,因此得出的結果是大相徑庭的。

商品的價格與價值

作爲一個通用的價值衡量工具,商品的價格成爲一個被廣泛使用的尺度。價格短期看來反應的是供求的關係,但本質上反映了一個長期的、多人的價值。用數學的語言方式表示,價格是一個高維的泛函(Functional),其中每一維的變量都是一個個體的價值觀函數,或者用以下代碼(OCaml)表示:

(* 價值觀是一個從任意向量到整數的函數 *)
type value = (anything -> int)

(* 價格是一個從多個價值觀函數到一個價值觀函數的函數(泛函) *)
val price : (values_of_all : value list) -> value

(* 一個簡單實現:價格即爲所有人價值觀的平均值 *)
let price values_of_all =
  fun thing ->
    let sum = List.fold_left (
      fun sum value_function -> sum + (value_function thing)
    ) 0 values_of_all in
    let number_of_people = (List.length values_of_all) in
    sum / number_of_people

換人話說,價格反映了全體生產者和消費者的價值觀,儘管可能各不相同,但卻用一個工具把它們統一了起來,變成了一個單一的可以衡量不同事物的價值的函數。對於一個個體來說,商品的價格可能偏離個人對商品的價值衡量,因此會有感覺便宜或者感覺貴。根據個人是否有錢,個人對價值的衡量也會不同,個人資產可以作爲價值觀函數的一個其他參數。

用價格衡量價值的方法看似簡單粗暴,有諸多弊端,卻也有着其他方法無可比擬的優點。其最大的優點就是簡單性,因爲人類對複雜事物的理解力實在有限。這也是爲什麼計劃經濟無法執行的一個原因,因爲沒有一個把萬物映射到一維的函數,或者這個函數取樣過於有限,只能反應少數統治者的意願。

價值多元化

一元價值儘管有着便於比較排序的優點,但卻會導致優化目標的單一化。譬如超級計算機只優化LINPACK或其他某個性能,學生爲了應付高考成爲做題機器,全社會「向錢看」道德淪喪等等。儘管着本身沒有什麼問題,卻會讓導致潛在的評估偏差風險。對此,價值多元化的主張被提了出來。價值多元化是把一維的價值標量變爲多維向量,也可以理解爲是多個價值函數的組合。價值多元化以後,價值本身重新變得不可比較,只能按照維度比較(或者價值向量的函數)。

在我看來,價值多元化沒有解決太多的問題,反而喪失了序關係,事實上是一種掩耳盜鈴的方法。價值多元化就等於沒有價值,只是把一個高維向量映射到了另一個向量,不僅丟失了信息,還無法比較。價值多元化可以當作進一步價值比較的「中間結果」,方便進一步計算而已,最終還是要歸結於一維。用金錢衡量一切的一元價值儘管不能解決許多問題,卻是人類目前能想到並實踐的最有效的方法。但願會有更好的方式被發明出來。

誰說中國醫療差——談醫療制度

昨天晚上由於喫飯過快,咀嚼用力過猛,一不小心咬到了舌頭,頓時鮮血淋漓,差點噴涌而出。我立刻去買了點冷飲冰激凌,企圖冷敷止血。一開始效果不錯,但是過了一會,流血又開始了,而且越來越多,血流不止。沒過多久感覺嚥了一肚子血。想去去醫院看看,但看看錶十點了,怕是學校醫院急診看不了,還是第二天早上去吧。又過了一會,感覺嗓子嚥血過多,有點不舒服了。對着鏡子看了看舌頭,那流血的速度把我嚇了一跳,每秒可能有將近0.2毫升。掐指一算,一個小時就是720毫升,睡一覺就好幾升了。這一想不得了,腿都軟了,於是立即前去醫院。

果然校醫院急診看不了,讓我去魏公村附近的北京大學口腔醫院。我打車到了口腔醫院,走進急診室,這時已經是深夜一點了。我花了5塊錢掛了個號,排隊等了一會就進去了。年輕漂亮的女醫生問我怎麼了,我把我的病情說了一下,醫生讓我躺下,問我平時有沒有什麼病症。我想了想,說「我應該有低血糖吧」,醫生笑了笑,就讓我張開嘴開始處理傷口。醫生看到我傷口的位置實在奇怪,竟然是在舌頭中間,還是豎着的。只是因爲咬到了一個小血管,纔這樣血流不止。處理的時候醫生一直問我疼不疼,雖然之前有點疼,但不知怎麼在醫生處理的時候竟然不疼了,可能是因爲女醫生年輕漂亮吧。沒過一會,傷口就處理好了,等了半個小時都沒有再出血。

繳費的時候讓我挺吃驚的,費用一共8.2元,我的第一反應就是好便宜啊。雖然作爲學生這個醫療費用是可以報銷的,但這便宜得讓我都懶得去報銷了(不過作爲一個理性人我還是要去報銷的,勿以利小而不爲嘛)。交完費以後醫生還告誡我注意事項,不要喫熱的東西云云,那服務態度令我簡直感激涕零。

對比一下美國歐洲的醫療機構,遇到這種小病要麼去公立醫院排隊到死,要麼去私立的口腔診所,同時做好心理準備收到鉅額賬單,而且半夜去人家還未必理你。只有天朝帝都纔有這種物美價廉,24小時隨到隨看的醫療服務。

我爲什麼能享受這一切

儘管這次醫療體驗很愉快,但是我還是清醒的認識到,天下沒有免費的午餐。中國這種優質廉價的醫療服務,其代價是對公立醫院尤其是醫生利益的壓榨。這樣的醫療服務並不是哪裏都有的,而是集中在北京、上海等少數幾個大城市,因此遭到全國人民的覬覦。君不見北京各大醫院門口二十四小時都擠滿了來自全國各地求醫問診的人,他們爲什麼來北京?因爲只有北京纔有這樣優質的醫療服務啊。

但是公共資源總是有限的,再多的醫療資源也會被無窮無盡的病人佔滿。針對這種僧多粥少的情況如何解決,無非排隊、抽籤和市場。排隊是最常見的方式,大多數公立醫院,以及春運火車票都採用了排隊這種「公平」的方式。抽籤也不少見,譬如北京車牌照搖號、優質中小學入學抽籤,這種方式也是看似公平的。市場的方式就是競價拍賣,這種方式用得也挺多的,只是離一般人比較遠,譬如政府賣地,價高者得,也算是公平吧(不考慮貪污腐敗的問題)。這三種方式很難「誰更公平」之說,只有「對誰更加有利」之說。排隊顯然是對窮人有利的,因爲富人的時間成本較高。拍賣則是反過來,對富人有利。而抽籤,則對所有人都一樣,所以有人認爲抽籤是最公平的。譬如古希臘雅典的民主制度,發展到後來爲了追求絕對的公平就採用了抽籤。

但是市場是無孔不入的,排隊和抽籤的方式都可以被市場轉嫁,譬如僱人排隊、僱人抽籤,或者有人主動倒賣排到或抽到的資源。就像美國南北戰爭時期的兵役制度,雖然是強制隨機抽籤徵兵,但是如果被招募者可以找到一個人代替,就可以免除兵役讓別人代替,這使得富人大多都選擇了僱傭兵代替自身。對於醫院來說,經常見到黃牛倒賣掛號,幾十塊錢的專家號掛號費能被炒到幾千塊很常見。先不說這種倒買倒賣是否符合道義,這種行爲至少解決了一個問題,那就是優質資源的真實價值。如果沒有黃牛倒買倒賣,我們很難知道這樣一個專家號到底值多少錢,這就是二級市場的意義所在。

相信沒有人會覺得五塊錢的掛號費貴,也正因爲如此,醫院和醫生的利益被剝奪了。醫療服務本身是一種專業的服務,無論從其市場需求還是道德需求,專業的醫生(道義上)應得應有的經濟回報和社會尊重。但由於國家控制的醫療費用價格,醫院幾乎不能從上面賺到可以維持運營的資金,只能依靠其他手段,也就是我們經常說的「以藥養醫」。至於公立醫院的國家補貼,我不知其具體數字,但估計很難維持醫院運營。因此醫院和醫生就成了替罪羊,彷彿醫生拿回扣成了「看病貴」的罪魁禍首,殊不知醫療服務本身昂貴的成本。

由於我的病實在不大,而且醫生沒有存心從我身上拿回扣,所以沒用到什麼昂貴的藥。畢竟在當今緊張的醫患關係下,醫生想拿回扣還是要三思的。我之所以能夠享受到這樣的服務,完全是建立在醫院和醫生的利益被犧牲的基礎上的。因此我在看完病以後,忍不住對醫生說了好幾句「謝謝」。

醫療成本昂貴的罪魁禍首——准入制度

醫療成本分爲醫療服務的成本和醫藥的成本,這兩部分貴的原因是不同的。在中國,前者被人爲壓低,使得醫院不得不使用後者補貼前者。而在歐美國家,尤其是美國,爲什麼醫療貴得嚇人呢?我認爲,其根源在於嚴苛的行醫准入制度。如果你看過電影「北京遇上西雅圖」,可能會注意到一個細節,劇情最後Frank經過多年努力終於考取了美國醫生執照,從此步入高收入階層。然而Frank本身就是北京阜外醫院行醫多年的醫生啊!這個細節反映了在美國當醫生有多難,而這個難完全是人爲造成的。

美國醫師執照由各個州的醫學委員會頒發,考試者必須通過「美國執業醫師執照考試(United States Medical Licensing Examination, USMLE)」等各種考覈。一般在一個醫生開始行醫之前,需要學習十餘年,並且通過實習。由於苛刻的准入制度,美國醫療市場上醫生的數量被嚴格限制,造成了一種人爲的供不應求,醫生的收入自然水漲船高。

美國既然也有醫療費貴的問題,爲什麼還要維持這個制度呢?原因很簡單,是爲了「公衆安全」。不合格的醫生給你看病,你會放心嗎?這個理由看似說得通,卻只是一面之辭。這樣嚴苛的准入制度是保證了醫生的質量,但犧牲的是廣大患者和還沒有獲得執照的醫生的利益。並不是每個人都需要非常高的醫療標準的,有的人需要的僅僅是水平一般,但是廉價的醫療服務。然而醫生爲了維持自己的高收入和社會地位,利用各種政治勢力遊說權力機構,通過綁架公衆利益的方法保證了自身利益。

中國過去有赤腳醫生,在鄉間提供廉價的醫療服務。香港九龍寨城在被拆之前,由於香港政府對其沒有管轄權,也成了無牌牙醫及中醫診所的集中地(港英政府不承認中醫有行醫資格)。其中的診所雖然良莠不齊,但是解決了相當一部分窮人的看病問題。而現在,香港窮人只能去公立醫院排隊,小病可能一排就是半年。

類似的由於准入制度造成的價格昂貴的例子還有倫敦和紐約出租車的價格。在倫敦,出租車司機的准入門檻出奇得高,所有出租車司機的申請者要花三到四年學習The Knowledge(光這名字聽起來就很厲害),其中知識不僅要求司機牢記25000個城市街道和30到50個郊縣街道,還要對倫敦的歷史、文化、景點熟記在心。因此能通過考試的人非常少,倫敦出租車司機自然也成了「高收入職業」。對於消費者來說,結果就是倫敦出租車價格非常昂貴,我曾經一次從希思羅機場到倫敦市區打車花了105英鎊,還不含小費。而紐約的准入制度體現在出租車牌照上,2013年,紐約出租車牌照拍賣出了130萬美元的天價。事實上在過去並不是這樣,以前紐約共有30000餘量出租車(人口卻遠少於今天),但是後來紐約市長簽署了《哈斯法案》,使得出租車數量下降到了16900輛,到現在紐約830萬人口僅有13336個出租車,相比之下北京人口比紐約多一倍,但有69000多輛出租車。因爲這種懸殊的數量差別,紐約的出租車價格非常貴(同時也有勞動力市場的原因,按下不表),但也正因爲如此,纔給了像Uber這樣的公司獲利的空間。

相比醫療服務價格,醫藥價格無論在美國還是中國都很貴,這是什麼原因呢?直接原因是醫藥的研發成本很高(儘管邊際生產費用很低),一種新藥的研發成本高達數億到數十億美元和十幾年時間。但背後原因是FDA苛刻的醫藥上市管制制度,造成了藥品研發成本劇增。爲什麼會這樣呢?原因是FDA要求上市的藥品符合一系列的標準,並且需要做完整的臨牀實驗,這給醫藥研發企業帶來了巨大的經濟開支和時間開支,使得企業不得不把鉅額支出轉嫁到消費者頭上。雖然說FDA目的是爲了公衆安全(又是公衆安全……),但這不知道阻礙了多少新藥的開發,使得更多原本可以得救的人悲慘地死去。至於中國,中國實際上很少有自行研發的藥物,大部分是進口的專利,所以美國醫藥研發貴,也會造成中國藥品貴。同時中國也效仿美國,制定了越來越嚴格的藥品GMP認證。現在FDA的觸角已經伸向了醫療手機應用,甚至造成硅谷相關的創業企業生存困難,阻礙了醫療技術的進步。

理想的醫療制度

談一下我認爲的理想的醫療制度。我認爲理想的醫療制度應該是完全市場化的,所有的醫生准入制度、藥品審覈制度都應該取消強制性。但並不是完全拋棄,還是可以保留作爲參考。任何人只要有意願,都可以行醫,患者可以自行選擇是否信任。如果醫生願意考取執照,可以增加患者的信任度,相當於一個專業證書而已(假證屬於欺詐,是另一個問題)。同時辦法醫生執照的機構應該破除壟斷,任何機構都可以頒發證書,其含金量由其考取難度、頒發數量決定,類似於金融界或IT界的各種證書。就像金融界從業者不是有CFA證書纔能買賣證券,IT界從業者不是有MCSA證書纔能編程,至於公司是否僱傭你,證書只是一個參考,其他經歷經驗也是重要的一部分。

同理FDA對藥品的准入制度也應該廢除,轉而由第三方的藥品評級機構(公共的或私人的)來對藥品進行評價,類似證券評價機構。注意這並不能解決賄賂等非正常方式造成的欺詐問題,但有FDA同樣不能解決,如何解決是另一個問題了。

在這樣理想的情況下,公立醫院存在的必要性就不大了,因爲市場可以提供各個層次的醫療服務,窮人選擇廉價的,富人選擇優質的,如同其他任何商品或服務。我認爲沒有任何需求是「剛性」的,非要政府介入不可,包括醫療、住房、教育,都可以由市場有效調節(在取消行政干預的前提下)。

有人認爲完全有市場提供醫療服務是有悖於倫理的,一個例子就是患了重病的窮人,他負擔不起昂貴的醫療費用,難道就應該死去嗎?這的確是一個很有爭議的問題。其實我認爲涉及到人的「生存權」的問題不止醫療一個,還包括溫飽、自然災害。關於溫飽,即使是發達國家也是在最近一百年內纔逐漸消滅的,不是任何平等主義政治運動的原因,而是生產力的大幅提高,導致糧食、紡織品價格變得非常便宜,纔讓每個人負擔得起溫飽。即使有人還是負擔不起,通過政府補助的方法,讓一個人喫飽也花不了太多錢。而醫療目前還是一種非常稀缺的資源,無論如何分配總是無法滿足每一個人的,而且面對很多疾病即使你再有錢也無能爲力。這完全是受限於人類醫療技術的,沒有任何辦法可以完美解決。政府誇下海口負責每一個人的醫療的行爲是極端不負責任的,因爲根本就是「何不食肉糜」。所以終極解決方案還是提高醫療技術,而不是任何政治運動。在這種前提下,爲了保證醫學研究的發展,其資金是必不可少的,因此資源優化配置的方式就是市場的分配方式,這樣纔能讓資本有效流入醫療領域,刺激其發展。

最後解釋一下標題,中國醫療制度的確有很多問題,但是美國也有不少問題,相比之下中國的醫療制度對患者不算差,犧牲的是醫生的利益(患者利益間接受損,造成雙輸局面)。而美國則是犧牲患者利益,養肥了醫生。

icc的過程間優化和性能分析引導優化

icc(Intel C++ Compiler)是一個非常厲害的編譯器,對優化計算密集型的程序遠超其他任何編譯器,如gcc、llvm、Visual C++。

icc提供了過程間優化(Interprocedural Optimization)技術,可以幫助編譯器在不同的目標文件之間進行全局優化。傳統的編譯器的編譯過程是編譯每個源文件到獨立的目標文件,然後再通過鏈接器將目標文件鏈接成可執行文件。傳統的編譯器的編譯優化主要集中在每個源文件內部,鏈接過程比較簡單,因此每個文件都是獨立的,而icc提供的過程間優化打破了這一限制。

過程間優化可以對整個程序進行全局優化,而不是僅僅在單個文件、單個函數或者單個代碼塊內部優化。過程間優化可以減少過程之間重複計算、內存的低效訪問以及簡化迭代過程,通常會採用內聯函數的方式。過程間優化還可以重排代碼的順序以優化內存的分配方式和局部性。

通過指定編譯參數-ipo,icc可以開啓過程間優化,icc將在編譯時生成特殊格式的目標文件(中間語言),並在鏈接時進行進一步的編譯和過程間優化,如圖所示:

使用icc啓動過程間優化的方式是在編譯參數中加上-ipo參數,還要設置環境變量AR=xiar,使用Intel的版本代替默認的ar

性能分析引導優化(Profile Guided Optimization)通過分析程序運行時的實際行爲,將結果反饋給編譯器,使得編譯器可以重新安排代碼以減少指令緩存問題和分支預測誤判,從而獲得性能的提升。性能分析引導優化通過實際執行代碼統計出運行頻率最高的部分,編譯器通過這些信息可以更加針對地優化代碼。性能分析引導優化分爲三個階段:

  1. 第一步是生成分析程序。在這個階段,編譯器創建一個有采樣注入的可執行程序。在icc中使用的編譯指令是-prog-gen,以及-prof-dir=[dir]
  2. 第二步是運行第一步生成的被注入採樣分析的程序,每次運行這個程序,都會生成-prof-dir指定的目錄下生成一個動態信息文件(dynamic information file),將會被最終編譯時使用。
  3. 第三步是最終編譯的步驟。第二次編譯的時候,動態信息文件會合併成一個彙總文件。通過彙總文件,編譯器會嘗試將最常使用的執行路徑優化。

過程間優化和性能分析引導優化可能會相互影響,性能分析引導優化通常會幫助編譯器生成內聯函數,這會幫助過程間優化的效率。性能分析引導優化對分支預測效率的提升最有效果,許多分支執行的可能性無法在編譯時判斷,而通過性能分析引導優化,編譯器可以針對經常執行的分支(熱代碼)和不經常執行的分支(冷代碼)生成高效的彙編代碼。

使用性能分析引導優化的方法如下:

  • 第一階段:編譯參數中加上:-prof-gen=srcpos -prof-dir=/tmp/profdata。其中-prof-dir是存儲性能分析文件的目錄。
  • 第二階段:運行編譯好的程序,然後運行profmerge -prof_dir /tmp/profdata生成彙總文件。
  • 第三階段:重新編譯程序,使用參數:-prof-use=nomerge -prof-func-groups -prof-dir=/tmp/profdata

這樣最終生成的代碼就是經過性能分析優化過後的了。

以上方法在icc 14.0.2上試驗通過。

參考