C

概要

  • GPGPUのプログラムの書き方
  • 最適化されたGPUは、最適化されたCPUの2倍程度の早さ
    • CUDAなら100倍!!とか言ってる人を見かけたら、「それCPUのほうも最適化したらどうなるんですか?」と聞いてあげるようにしましょう。
    • 本気じゃないなら、「簡単に書けて早い」「コーディング時間少なく早い」という程度に思っているべき

GPUの速度

  • Core i7は100GFLops
  • GeForce? 285は1000GFlops(この性能は1997年のスパコンレベル、なお2009年は131TFlops)
  • 8コアCore i7(第四世代2013年6月)は単精768GFlops, GeForce? GTX Titan Z(2014年4月)は単精度8121GFlops
  • 例えば粒子計算はいい加減実装でも1000倍早い。
  • 1.2はfloatのみ、1.3(GT200以降)からはdoubleが扱える
  • CPUとGPUは並列に処理可能(例外はcudaMemcpy)
  • cudaMemcpy
    • CPU->GPU, GPU->CPU, GPU->GPUのデータコピー
  • cudaMemcpyAsync?:非同期転送は現状効率が悪く、デバイスドライバの改良が待たれる

nvcc

  • エミュレーション機能がある
    • 数千スレッドを立ち上げるのでハングアップしたように感じる。速度は1/1000以下になる。低問題サイズで行うべき
    • エミュレーションではprintfが使えるようになる。#ifdef __DEVICE_EMULATION__を活用
    • メモリ関係のデバッグは不能
  • カーネル関数のエラー検知はほぼ不可能
  • CUDA APIはcudaError_tで検知し、cudaGetErrorString?で詳細。cudaGetLastError?で最終エラー検知
  • dim3のデフォルトはx=y=z=1
  • GPUの特徴
    • カーネル関数はSPMD、各SMの中の8個のSPはSIMD
    • CPUにあってGPUに無いもの:Out-of-Order, 分岐予測, if文
  • メモリの種類
    • ローカル・グローバルメモリは100倍遅い(それでも159GB/s。CPUは36GB/s)
    • レジスタ:変数の数によって増減、32が上限なので無駄な変数は削減せよ
    • シェアードメモリ:高速
  • 性能評価
    • Occupacy 100%は良い事。
    • Active Thread Blocks per Multiprocessorが重要
    • SMあがり3ブロックがアクティブになると強い
  • SPUによる計算はちょっと精度が低い

TensorFlowの対応GPU

  • 3.5
名前価格(円)GFlops
GT 7205500306
GT 7306000692.7
GTX 780640003976.7
GTX 780 Ti900005045.7
GTX TITAN Z4000008121.6
GTX TITAN Black5120.6
GTX TITAN4499.7
  • 5.2
名前価格(円)GFlops
GTX 980 Ti850005632
GTX 980700004612
GTX 970400003494
GTX 960240002308
GTX 950185001573
GTX TITAN X130000

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS