4

私はビジネス専攻で、学位プログラムの 3 分の 2 を終え、PHP の経験が少しあり、C++ の入門クラスを 1 つ受講しましたが、今ではプログラミング/コンピューター サイエンスよりもビジネスを選択したことを後悔しています。

より高度なプログラミングを学ぶことに興味があります。具体的にはCであり、最終的には人工ニューラルネットワークのデータ分析にCUDAアーキテクチャを使用するようになりました(AI、ビジョン、または音声処理ではなく、大規模なデータセットのデータポイントと一般的なデータ/統計分析の相関関係を見つけるため)。

C の学習を開始する方法について何かアドバイスはありますか? データを分析するための ANN/ベイジアン技術と同様に? たくさんの本がありすぎて、どれを選べばいいのかわからない。

CUDA はかなり新しいので、学習者にとって使いやすい (つまり、単純化された) 教材はあまりないように思われます。NVIDIA ドキュメント以外に CUDA の学習リソースはありますか?

さらに、GPGPU コンピューティングと大規模並列プログラミングについて説明している中で、どのリソースをお勧めしますか?

4

7 に答える 7

5

CUDAは新しいテクノロジーであり、プログラミングのバックグラウンドがあまりないため、最初にCUDAを学習することはお勧めしません。

C(またはC ++)の経験があまりないため、CUDAには成熟度、ライブラリ、適切なエラーメッセージなどがないため、習得するのが面倒です。

CUDAは、Cに精通していて(C ++の経験も役立ちます)、よく知られた問題の解決策を再コーディングまたは再考することによってパフォーマンスを改善する必要がある問題を抱えている人を対象としています。

「ANN/ベイジアン」問題を解決しようとしている場合は、C++またはCでソリューションを作成することをお勧めします。スレッドやマルチスレッドの作成について気にしないでください。次に、シリアルソリューションの応答時間を評価した後、OpenMP、Boostスレッド、w / eを使用して、シリアルソリューションを並列化してみてください。この後、さらにパフォーマンスが必要な場合は、CUDAを学ぶことをお勧めします。

CUDAにはかなり不可解なエラー、デバッグが難しい、まったく異なるアーキテクチャなどがあるため、これらは有効なポイントだと思います。

それでも興味がある場合は、CUDAを学ぶためのリンクをいくつか紹介します。

オンラインコース:

フォーラム(最高の情報源):

ツール:

CUDAで解決された問題:

于 2009-03-11T17:30:17.970 に答える
3

あなたは3つの異なる目標を表明しました:

  • Cでのプログラミングを学ぶ
  • CUDAプラットフォームのコードを書くことを学ぶ
  • データ分析にベイズのネットやニューラルネットを使用する方法を学ぶ

第一に、これらのことは、すでにフィールドで数度の学位を持っている人にとっては簡単ではありません。1つだけ行う場合は、ベイズ推定について必ず学習してください。これは、データについて推論するために利用できる最も強力なフレームワークであり、あなたはそれを知る必要があります。MacKayの本(下部に記載)をチェックしてください。あなたは確かにあなた自身に挑戦的な仕事を設定しました-私はあなたにすべての最高を願っています!

あなたの目標はすべてかなり異なる魚のやかんです。Cでプログラミングすることを学ぶことはそれほど難しくありません。可能であれば、あなたの大学(おそらくJavaで教えられている)で「アルゴリズムとデータ構造の紹介」(通常はCS専攻の最初のコース)を受講したいと思います。これはあなたにとって非常に便利であり、Cでの基本的なコーディングは単に構文を学ぶことの問題になります。

CUDAプラットフォーム用のコードを書くことを学ぶことは、かなり難しいことです。上記で推奨されているように、最初にOpenMPIをチェックしてください。一般に、並列アルゴリズムに関する本だけでなく、コンピューターアーキテクチャー(Patterson&Hennessyは素晴らしい)について何かを読むのに役立ちます。並行性を見たことがない場合(つまり、セマフォについて聞いたことがない場合)、それを調べると便利です(オペレーティングシステムコースの講義ノートでおそらくカバーされます。MITオープンコースウェアを参照してください)。最後に、前述のように、GPUプログラミングは新しい分野であるため、利用できる優れたリファレンスはほとんどありません。したがって、最善の策は、サンプルのソースコードを読んで、それがどのように行われるかを学ぶことです。

最後に、ベイジアンネットとニューラルネット。まず、これらはまったく異なることに注意してください。ベイジアンネットワークは、(通常は多数の)変数の同時確率分布を表すグラフィカルな(ノードとエッジ)方法です。「ニューラルネットワーク」という用語はやや曖昧ですが、一般に、単純な処理要素を使用してデータポイントを分類するための非線形関数を学習することを指します。ベイズネットとニューラルネットの両方を非常によく紹介している本は、David JC MacKayの情報理論、推論、学習アルゴリズムです。この本は、 http://www.inference.phy.cam.ac.uk/mackay/itila/からオンラインで無料で入手できます。この本は、このトピックに関して私のお気に入りです。説明は非常に明確であり、演習は明るくなっています(ほとんどが解決策を持っています)。

于 2009-04-09T22:50:35.353 に答える
0

並列プログラミングのわかりやすい紹介を探している場合は、代わりにCPUクラスターでのOpenMPIまたはPosixThreadingを検討てください。これを始めるために必要なのは、単一のマルチコアプロセッサだけです。

一般的なコンセンサスは、これらの新しいアーキテクチャ(GPU、セルなど)でのマルチプログラミングには、プログラミングモデルとAPIの成熟度の観点から進む方法があるということです。逆に、Open MPIとPThreadsはかなり前から存在しており、それらを学習するためのリソースがたくさんあります。これらに慣れたら、新しいテクノロジーを試すことを検討してください。

他の多くの言語のプログラミングインターフェイスは確かにありますが、Cはおそらく、ハイパフォーマンスコンピューティングで使用されている最も一般的な現代言語です(FortranとPascalはまだこの分野で動き回っています)。C ++もかなり人気がありますが、いくつかのバイオインフォマティクスパッケージがこれを使用しています。いずれにせよ、Cは確かに良い出発点であり、より多くの言語機能またはライブラリが必要な場合はC ++に上げることができます(ただし、おそらくパフォーマンスが犠牲になります)。

于 2009-03-11T17:12:47.013 に答える
0

データ マイニングに興味がある場合は、Orange と呼ばれるオープン ソース システムも検討することをお勧めします。C++ で実装されていますが、Python またはビジュアル リンク アンド ノード言語でのエンド ユーザー プログラミングもサポートしています。

NN をサポートしているかどうかはわかりませんが、人々がデータマイニング技術の学習に使用していることは知っています。クラスタリングやアソシエーション ルールなどをサポートしています。

(また、それについて知らなかった場合は、B スクールで運用管理を行っている人を追跡することをお勧めします。CS とデータマイニングに興味がある場合は、志を同じくする人々を見つけることができます。)

于 2009-03-11T18:09:12.573 に答える
0

リンク: gpgpu.org興味深い議論があります

于 2009-03-11T18:12:08.400 に答える
0

最新の CUDA リリース (3.1、3.2) には、CuBLAS と呼ばれるフル機能の関数セットがあり、シングル カードのセットアップでマルチコア行列演算を処理します。バックプロゲーションを並列化するのはもう少し難しいですが、私はそれに取り組んでいます。

于 2010-09-29T06:43:28.310 に答える