「2012年の並列プログラミングコンテストを加速する」または「6人のウルトラブックと10台のSSDで十分です!」


みなさんこんにちは!
Habréでの先週は、 VoIPオンラインの交通渋滞の両方をハッキングする一連のハッカー投稿によって特徴付けられました。
今週をより建設的に続けることを提案します-並列プログラミングにおける遺伝学 の世界的な問題を解決するために。
月に何もする必要はありません。 文字A、T、G、Cのヌクレオチドで構成される2行で共通部分文字列の最大長を見つけます。
賞品は以前に比べて成長し、 獲得しました-今日、 6つの Asus Zenbook UX31Eウルトラブック10のSSDドライブがあり、合計容量800ギグがかかってい ます
魅力的ですか?

何言ってるの?


参照文字列(たとえば、これはGATGAGCATGTGTTGAATCCTCA )と多くの長い入力文字列(ここにそのうちの1つはGTCCTCCAGTTTGTAGCATGTGTATTTATGTCCTCCAGTTTGTAGCATGTGTATTTAT )が与えられています。 参照文字列と入力文字列の各ペアは、最も長い共通部分文字列を見つけて、それらの「座標」を返す必要があります。 例では、答えは(5 13 15 23)(5 13 44 52)になります。つまり、2つのサブストリングが見つかります。
 #  ,       ,  '-1' ref = 'GATGAGCATGTGTTGAATCCTCA' input = 'GTCCTCCAGTTTGTAGCATGTGTATTTATGTCCTCCAGTTTGTAGCATGTGTATTTAT' ref[(5 - 1):13] == input[(15 - 1):23] #True ref[(5 - 1):13] == input[(44 - 1):52] #True 

自由に使える参照コードがありますが、この問題は力ずくで非常にゆっくりと解決されます。
それは簡単に聞こえますか?

決定方法


ここから楽しみが始まります。 役に立つかもしれないいくつかのオプションを提供します:


何を選ぶ? ヒントが欲しい!


選択できるものはお勧めできません。 pthreadで書くのが好きな人、OpenMPで書く人、そしてTBBや多分MKLの並列関数を使うのが好きな人がいます。
一つのことは確かです-非常にスマートなアイデアと思考がしばしば私たちのフォーラムで議論されています。 たとえば、SSE4.2の手順を見る価値があります。

何を書くことができますか?


残念ながら、自動化されたテストシステムは若すぎて、すべてのプログラミング言語をサポートできません。
今回は(PythonとJava Scriptに対する私の誠実な愛にもかかわらず)C ++を理解するように彼女に教えたので、古き良きC ++で書く必要があります。
開発プラットフォームはどのようなものでもかまいませんが、コードはgcc(pthreads愛好家向けバージョン4.6.2)およびIntel Parallel Studio XE 2011(Intelを選択した人向け)がインストールされたLinuxマシン(Debian安定版-カーネル2.6.32)で収集およびテストされますコンパイラー、プロセッサーのコードを最適化する)。

賞品はどうですか? ウルトラブックが欲しい!


5月16日までに最速のコードを作成してソリューションを送信した最初の3チームは、参加者ごとにAsus Zenbook UX31Eを提供します。
2番目の3チーム-SSD 320シリーズ80Gb
Intel Software Networkで最も興味深いブログ記事を書いてくれた別の4人の参加者もSSDを入手します。

だから、もう一度:ロシアとCISからの最高の参加者のための1タスク 、1ヶ月、 6ウルトラブックと10 SSD

参加することに決めたすべての人に幸運を!

コンテストの主催者と審査員は、コメントであなたの質問に答える準備ができています。

Source: https://habr.com/ru/post/J142312/


All Articles