『プログラミング』 Visual Studio C++ 2010でOpenGL

日曜日, 5月 6th, 2012

Google先生に質問してOpenGLを動かそうとしたんだけど、Visual Studioの設定で思いっきり嵌まったのでメモ。 参考にしたページと同じようにやってもことごとく上手くいかなかったのは、何か理由があると思う。 誰か教えてけれ~~。 OSはWindows7 Professional 64bit版です。 和歌山大学床井研究室のGLUTによる「手抜き」OpenGL入門 「2.3 Windows 系 OS にインストールする」の通りにまずはビルドする。 freeglutはv2.8.0だったのでそのバージョンをダウンロード。 適当なディレクトリに解凍。このディレクトリを${FREEGLUT} [...]

| Posted in Linux/debian, PC | No Comments »

『プログラミング』 OpenCLプログラミング ベンチマーク再び

土曜日, 5月 5th, 2012

clEnqueueNDRangeKernel()関数の、global_work_sizeを正しく設定できていなかったために、昨日のプログラムでベンチマークをとれていませんでした。 で、問題を解決したため、改めて取ってみました。 配列サイズを10,000,000にしてみると、、、 OpenCL on GPU finished OpenCL on CPU finished CPUの実行時間: 32[ms] GPU(OpenCL)の実行時間: 6[ms] CPU(OpenCL)の実行時間: 12[ms] となりました。 ただ、何度も実行しているとGPUでの実行時間が12msになる事もありました。 こ [...]

| Posted in PC, デジタルガジェット | No Comments »

『プログラミング』 OpenCLプログラミング clEnqueueNDRangeKernel()関数の、global_work_size

土曜日, 5月 5th, 2012

昨日までに作成したOpenCLのサンプルでは、clEnqueueNDRangeKernel()関数の引数であるglobal_work_sizeには適当な値である1024を入れていましたが、適当に設定した値なだけあって、ちょっとプログラムをいじったら動かなくなりました。 そこで調べて、色々とトライして解ったことは、、、 1)global_work_sizeはlocal_work_sizeで割り切れる値で無くてはならない 仕様書を読むと The explicitly specifiedlocal_work_size will be used to determine how to break th [...]

| Posted in 未分類 | No Comments »

『プログラミング』 OpenCL参考書

土曜日, 5月 5th, 2012

OpenCLプログラミングをするのに参考にした情報ですが、まずは仕様書です。 KHRONOSのページから仕様書をダウンロードして、それを読んでプログラミングしました。 PlatformInfoやDeviceInfoの所は、仕様書で何とかなりました。 が、その後はこの仕様書だけじゃどのように実装して良いか解らぬ(´・ω・`) サンプルコードが必要。 それについては、AppleのMac OS X Developer Libraryにあるサンプルコードが役に立ちました。 検索ボックスに「OpenCL」と入れてやるといくつかサンプルコードが出てきます。 初めの第1歩として、”OpenCL [...]

| Posted in Linux/debian, PC | No Comments »

『プログラミング』 OpenCLプログラミング ベンチマーク

土曜日, 5月 5th, 2012

んだばベンチマークでもしてみるかと思ったが、単精度浮動小数点を1024個二乗するだけのプログラムでは、ベンチマークにならぬわ!!!!! OpenCL on GPU finished OpenCL on CPU finished CPUの実行時間: 0[ms] GPU(OpenCL)の実行時間: 1[ms] CPU(OpenCL)の実行時間: 0[ms] 一番上が検算のためにCPUで演算した処理時間。 2番目、3番目がOpenCLでの実行時間。 GPUの方がおそいがな・・・・ すぐに計算が終わるプログラムだと、GPUへの往復の時間が目立っちゃうってことだね。 もうちょっと重たいプログラムを走らせ [...]

| Posted in Linux/debian, PC | No Comments »

『プログラミング』 OpenCLプログラミング OpenCLプログラムの実行

土曜日, 5月 5th, 2012

ようやく、OpenCL CプログラムをGPU上で実行するところまで来ました。長かった。ながら作業でプログラミングしていたからなおさらw 手順としては、呼び出すkernelの引数を設定、必要な情報の取得、プログラム実行、終了待ち、結果の読み出し、 となります。 0)関数定義 cl_int clSetKernelArg (cl_kernel kernel, cl_uint arg_index, size_t arg_size, const void *arg_value) 実行するkernelの引数を設定してやります。 kernelは設定するkernelです。 arg_indexは設定する引数のイ [...]

| Posted in Linux/debian, PC | No Comments »

『プログラミング』 OpenCLプログラミング バッファオブジェクト

金曜日, 5月 4th, 2012

次に、OpenCLの支配下にあるGPU等のデバイス側で使う入出力メモリを確保する必要があります。 現時点では、GPU側からホスト側のメインメモリにはアクセス出来ないので、明示的にメインメモリからGPUメモリへ入力データをコピーしたり、GPUの演算結果をGPUメモリからメインメモリにコピーしてやる必要があります。 メインメモリとのGPU側のメモリとのアクセスが頻繁にあると、メモリ転送がボトルネックになってパフォーマンスがでないので、メモリ転送は必要最小限にする必要があります。 が、ここしばらくは練習なので、そんなことは気にする必要が無いです(´・ω・`) 0)関数定義 cl_mem clCrea [...]

| Posted in Linux/debian, PC | No Comments »

『プログラミング』 OpenCLプログラミング clCreateKernel()

金曜日, 5月 4th, 2012

clCreateKernel()でkernelオブジェクトを作成します。 kernelオブジェクトは、OpenCL Cで書かれた関数で、1関数1kernelに対応します。 これを呼び出して実行させます。 0)関数定義 cl_kernel clCreateKernel (cl_program program,                const char *kernel_name,                cl_int *errcode_ret) kernelオブジェクトを作成します。 programは作成したprogramオブジェクト、 kernel_nameはOpenCL Cで書 [...]

| Posted in Linux/debian, PC | No Comments »

『プログラミング』 OpenCLプログラミング OpenCL Cのビルド

金曜日, 5月 4th, 2012

ここからようやくOpenCLぽくなってきますw OpenCLでGPU等のデバイスで実行するプログラムはOpenCL CというC言語ライクな言語で書かれています。 そのプログラムはプログラム中でロード、ビルドしてやる必要があります。OpenGLのシェーダープログラムみたいと思っていれば良いです。 0)関数定義 cl_program clCreateProgramWithSource (cl_context context, cl_uint count, const char **strings, const size_t *lengths, cl_int *errcode_ret) ソースコード [...]

| Posted in Linux/debian, PC | No Comments »

『プログラミング』 OpenCLプログラミング CommandQueue関連

金曜日, 5月 4th, 2012

Command Queueの作成。 OpenCLプログラムの実行やデータのRead/writeは直接操作ができず、Command Queueを通して操作する形になります。 なので、Command Queueを作ってやる必要があります。 0)関数定義 cl_command_queue clCreateCommandQueue (cl_context context,                        cl_device_id device,                        cl_command_queue_properties properties,           [...]

| Posted in Linux/debian, PC | No Comments »