2014年8月17日日曜日

mallocで確保したサイズを後から取得する。

Visual Studio では、
#include <malloc.h>として、
_msize()関数を用いる。
MSDN

Linuxだと、
#include <malloc.h>として、
malloc_usable_size関数を用いるらしい。

2014年6月20日金曜日

OpenCLによるGPGPU入門④_GPUの計算ミスについて。

汎用のグラフィックのGPUでは、歩留りを改善する為に、
計算にミスがあってもグラフィックの表示に問題が無ければ出荷するらしい。

GPU 仮想化による自動冗長計算システムの開発

によると、
「コンシューマ向けGPU ではまれに計算ミス
が発生することがわかっている。2009 年に長崎大学の
濱田らが行った研究では、使用した421 枚のGPU の内
およそ1 割にあたる41 枚で計算ミスが発生した。」

とあり、結構な頻度で(計算機として扱うには)不良品が混じっているようだ。

他にも、GPUを長時間駆動すると、熱でメモリーエラーを起こして計算ミスをする、
など、実際に計算機として扱うには少々難しい側面があるようだ。

熱暴走は冗長化、或いは計算ミスしないような温度などの環境が必要だが、
初期不良については何とか見つけ出しておきたい。
単純にGPUのすべての演算器で全ての種類の計算させて、
CPUの検算結果と突き合わせれば分かるのだろうが、
問題は、どうしたら、全ての演算器で全ての演算をした、と見なせるか、だ。
最大並列化数で計算させたらいいのかな……(そんなパラメータあったかな???)


その他の参考URL
retardeeの日記: GPUってわからない
GPGPUで激安スーパーコンピューターを自作する方法

2014年6月19日木曜日

OpenCLによるGPGPU入門①_2

OpenCLのプログラムを書くには、
OpenCLによるGPGPU入門①で示したOpenCLプログラミングの流れ、
から分かるように、
1.でプラットフォームを選択し、
2.でデバイスを選択している。

1.のプラットフォームを選択する、とは、即ち、
どこのメーカーの提供しているソフトウェアを使用してハードをコントロールするのか、
という話で、例えばAMDのATI Streamでは、(Intelも含む)CPUとAMDのGPUを操作できる事が、
(OpenCLプログラムを書いて、情報を取得する事で、)分かる。

間違ってIntelのプラットフォームを選択すると、AMDのGPUは制御できないし、
NVIDIAのプラットフォームを選択しても、AMDのGPUは制御できない。

2.のデバイスの選択では、
先程説明したように、AMDなどのプラットフォームでは複数のデバイス(CPUとGPUなど)が認識されるので、
どのデバイスを使用するのか選択する必要がある。
当然GPUを複数挿している場合は、ここで複数のGPUが認識されると思われるので、
必要に応じて選択する。

以下、実装。