MITは、ビッグデータの時代に並列コンピューティングを加速するために最新のプログラミング言語Milkをリリースしました



Mit Released Latest Programming Language Milk Accelerate Parallel Computing Era Big Data



はじめに:今週、MITは新しいプログラミング言語Milkをリリースしました。新しいプログラミング言語は、既存の言語の4倍のビッグデータの処理速度を実現できます。




ミルクを付けて 、

現在のコンピューターチップでは、メモリ管理はコンピューター科学者が局所性の原則(局所性の原則)と呼ぶものに基づいています。



プログラムがメモリ位置にデータブロックを必要とする場合、データブロックの近くにもデータが必要になる場合があります。

しかし、ビッグデータの時代では、この仮定はもはや有効ではありません。今日のコンピュータプログラムは、大規模なデータセット内の少しのデータをより離散的に取得しています。メインメモリビットからデータを取得することが現在のチップの最大のパフォーマンスボトルネックになっているため、データをより頻繁に取得する必要があり、プログラムの速度が明らかに遅くなります。

今週の並列アーキテクチャとコンパイル技術に関する国際会議(並列アーキテクチャとコンパイル技術に関する国際会議)で、マサチューセッツ工科大学コンピュータ科学人工知能研究所(CSAIL)の研究者が新しいプログラミング言語をリリースしました— — 牛乳 、これにより、アプリケーション開発者は、大規模なデータセット内の個別のデータポイントを処理するときに、メモリをより効率的に管理できます。



いくつかの一般的なアルゴリズムをテストすることにより、新しい言語であるMilkで記述されたプログラムは、既存のプログラミング言語の4倍の速度を達成しました。しかし、研究者たちは、さらなる研究を通じてより良い結果が得られると信じています。

電気工学とコンピュータサイエンスの教授であるSamanAmarasingheは、現在の大規模なデータセットは、その巨大な規模だけでなく、既存のメモリ管理技術にも問題を引き起こしていると述べました。 スパース 。言い換えれば、問題の解決策の規模は、必ずしも問題の規模に比例して増加するわけではありません。

「社会環境では、私たちは通常、小さな問題に焦点を合わせる傾向があります。」アマラシンゲは言った、「この建物[CSAIL]の人々だけに注意を払えば、私たち全員が友達であることがわかります。しかし、地球をもっと高いレベルで見ると、友達の数は増えません。地球全体には数十億の人々がいますが、私には数百人の友人しかいません。これはまばらさの明らかな問題です。

同様に、Amarasingheは、オンライン書店が1,000人の顧客に最も人気のある20冊の本のリストを提供する可能性があると述べました。しかし、顧客数が100万人に増えた場合、それに応じて最も人気のある20,000冊の本のリストは提供されません。

ローカルで考える

現在のコンピュータチップは、スパースデータ用に特別に最適化されておらず、その逆が当てはまると言えます。チップのメインメモリビットからデータを読み取るのは遅いため、現在のチップの各コアまたは各プロセッサには、関連する小さなローカルの高速メモリビットである独自の「キャッシュ」があります。チップ内のコアは、メインメモリ内の個々のデータを毎回フェッチするのではなく、一度にデータの完全なブロックを読み取ります。読み取られたデータブロックは、局所性の原則によって選択されます。

画像処理の例を通して、局所性の原理の本質を簡単に理解できます。

プログラムの目的が画像に視覚的フィルターを適用することであり、一度に画像の1つのデータブロックにのみ作用する場合。次に、チップコアがデータのブロックを要求するたびに、キャッシュが受け入れることができるすべての隣接するブロックデータを受信する必要があります。したがって、それ以上のデータを取得することなく、ブロックごとに処理できます。

しかし、アルゴリズムの関心がオンライン書店の200万のデータベースにある20冊の本である場合、この方法は適用できなくなります。特定の本に隣接するデータを要求する場合、隣接する100冊の本のデータは関連していない可能性があります。

この論文の最初の著者であるウラジミール・キリアンスキーが述べたように、一度にメインメモリから1つのデータだけを読み取ることは非常に非効率的です。

スプーン一杯の食べ物が欲しいときと同じように、冷蔵庫を開け、ミルクカートンを開け、スプーン一杯のミルクを注ぎ、ミルクカートンを覆い、冷蔵庫に戻す必要があります。

彼は電気工学とコンピューターサイエンスの博士課程の学生です。 AmarasingheとYunmingZhangは彼の論文の共同研究者であり、Zhangは電気工学とコンピューターサイエンスの博士課程の学生でもあります。

バッチ処理

MilkはOpenMPにいくつかのコマンドを追加しただけです。その中で、OpenMPは、CやFortranなどの言語で使用できる拡張機能であり、マルチコアプロセッサのコードをより簡単に記述できます。 Milkを使用すると、プログラマーは任意の命令の近くに数行のコードを挿入でき、大きなデータセット全体を反復処理して比較的少数の項目を見つけることができます。 Milkのコンパイラ(高レベルのコードを低レベルの命令に変換するプログラム)は、これに基づいてメモリを管理する方法を見つけることができます。

Milkプログラムを使用しているときに、カーネルがデータの一部を必要としていることを検出した場合、カーネルはメインメモリからそのデータ(および隣接するデータ)を読み取ることを要求しません。データのアドレスをローカルに保存されたアドレスリストに追加します。このリストが十分に長い場合

チップのすべてのコアがリストをプールします

これらの住所を隣接する配置の形で組み合わせる

カーネルに再割り当てします

このように、各コアは必要なデータ項目のみを要求し、効率的に取得できます。

説明のレベルは高くなりますが、詳細は実際にははるかに複雑です。実際、最近のほとんどのコンピューターチップには複数のレベルのキャッシュがあり、最初のレベルは最初のレベルよりも大きくなっています(ただし、効率は低くなります)。 Milkコンパイラは、メモリアドレステーブルだけでなく、これらのアドレスに格納されているデータも追跡する必要があり、多くの場合、2つのレベルのキャッシュを切り替えます。また、どのアドレスを予約する必要があり(再度アクセスする必要がある場合もあります)、どのアドレスを破棄するかを決定する必要があります。研究者は、複雑なデータを整理するためのこのアルゴリズムをさらに改善し、それによってパフォーマンスをさらに改善することを望んでいます。

「今日の多くの重要なアプリケーションはデータを大量に消費しますが、残念ながら、メモリとCPUの間のパフォーマンスのギャップはますます大きくなっています。つまり、現在のハードウェアはその潜在能力を十分に発揮できていません。」スタンフォード大学のコンピューター助教授であるマテイザハリアは、次のように述べています。「ミルクは、一般的なプログラミングアーキテクチャでメモリアクセスを最適化することにより、このギャップを解決するのに役立ちます。この成果は、メモリコントローラーの設計に関する詳細な知識と関連するコンパイラーの知識を組み合わせて、現在のハードウェアの優れた最適化を実装します。


この記事はd1netから転載(転載)