カテゴリー別アーカイブ: 開発

OpenCLをVisualStudio2017で使う (Intel SDK)

AI的な文脈でOpenCLに興味を持ったので、最近OpenCL in Actionという本を読んでいる。OpenCLとはなんぞやという全体像をきちんと掴みたくて読み始めた。

とはいえ、450ページもあって読んでいるうちにたまに眠くなるので、少しは手を動かしたほうがいいと思って、とりあえずVisual Studio2017でOpenCLを試してみることにした。

今使っているWindowsマシンはSurface Pro4。デバイスマネージャを見ると、GPUはIntelのHD Graphic520だったので、IntelのOpenCL SDKを下記からダウンロードしてインストールした。
https://software.intel.com/en-us/intel-opencl/download

SDKを入れてVisual Studioを立ち上げると見慣れないメニューが追加されている。Core-Builder。そこからPlatform Infoを選ぶと、下記のようにデバイスの一覧が取得できる。

ss-vs2017-01

さらに、デバイスを選択してプロパティを表示すると下記のように各種情報が確認できる。
ss-vs2017-02

次に、APIがきちんとインストールされていることを確認するために、Intelのこちらのページからサンプルプログラムをダウンロードして、Visual Studioでビルドする。使用するプログラムは主にclGetDeviceInfoを使用してさっきプロパティで表示されたような内容を取得するものでOpenCL1.2 samples for WindowsからPlatform/Device Capabilities Viewer Sampleというもの。

ちなみに、Visual Studio2017用のソリューションファイルが提供されていないので2015のものを使用した。2015版から2017版へビルド周りの設定をコンバートするように促されるので変換して使用する。ビルドが成功すれば、APIが問題なくインストールされているということ。

このサンプルプログラムをVisual Studioのビルドから実行すると出力が流れてDOS窓が消えて何もわからないけれど、コマンドラインから実行するとclGetDeviceInfoで取得されたGPUの各情報を確認できる。


CL_DEVICE_TYPE_GPU[0]
CL_DEVICE_NAME: Intel(R) HD Graphics 520
CL_DEVICE_AVAILABLE: 1
CL_DEVICE_VENDOR: Intel(R) Corporation
CL_DEVICE_PROFILE: FULL_PROFILE
CL_DEVICE_VERSION: OpenCL 2.0
CL_DRIVER_VERSION: 21.20.16.4627
CL_DEVICE_OPENCL_C_VERSION: OpenCL C 2.0
CL_DEVICE_MAX_COMPUTE_UNITS: 24
CL_DEVICE_MAX_CLOCK_FREQUENCY: 1000
CL_DEVICE_MAX_WORK_GROUP_SIZE: 256
CL_DEVICE_ADDRESS_BITS: 32
CL_DEVICE_MEM_BASE_ADDR_ALIGN: 1024
CL_DEVICE_MAX_MEM_ALLOC_SIZE: 1561123226
CL_DEVICE_GLOBAL_MEM_SIZE: 1561123226
CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: 1561123226
CL_DEVICE_GLOBAL_MEM_CACHE_SIZE: 524288
CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE: 64
CL_DEVICE_LOCAL_MEM_SIZE: 65536
CL_DEVICE_PROFILING_TIMER_RESOLUTION: 83
CL_DEVICE_IMAGE_SUPPORT: 1
CL_DEVICE_ERROR_CORRECTION_SUPPORT: 0
CL_DEVICE_HOST_UNIFIED_MEMORY: 1
CL_DEVICE_EXTENSIONS: cl_intel_accelerator cl_intel_advanced_motion_estimation cl_intel_d3d11_nv12_media_sharing cl_intel_driver_diagnostics cl_intel_dx9_media_sharing cl_intel_motion_estimation cl_intel_packed_yuv cl_intel_required_subgroup_size cl_intel_simultaneous_sharing cl_intel_subgroups cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_d3d10_sharing cl_khr_d3d11_sharing cl_khr_depth_images cl_khr_dx9_media_sharing cl_khr_fp16 cl_khr_fp64 cl_khr_gl_depth_images cl_khr_gl_event cl_khr_gl_msaa_sharing cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_gl_sharing cl_khr_icd cl_khr_image2d_from_buffer cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_mipmap_image cl_khr_mipmap_image_writes cl_khr_spir cl_khr_subgroups
CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT: 4
CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG: 1
CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT: 1
CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE: 1
CL_DEVICE_NATIVE_VECTOR_WIDTH_INT: 4
CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG: 1
CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT: 1
CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE: 1

 

VagrantでMacOSX上の仮想マシンにCentOSをインストールしてみた

色々自分でWebサービスを構築することを勉強し始めたら、仮想化がすごく便利な気がしてきたので試してみることにしました。

ドットインストールの手順に従っただけだけど、バージョンや引っかかった点のメモなどに。

続きを読む

 

MacOSX上のRedmine Backlogでnokogiriがライブラリエラーを吐くのでinstall_name_toolで対応した

非IT系のエンジニアな私ですが、ソフトウェア開発で取り入れられているAgile開発に憧れる今日このごろ。Agileのひとつと言われる「スクラム」開発を実現できないかとRedmineのプラグイン「Backlog」を試すことにしました。環境はとりあえずmacのローカル環境です。

すでにインストールを済ませていたRedmineに入れようとしたら、gemのnokogiriが参照しているライブラリが存在しなくて怒られました。以下、その対処。

続きを読む

 

[Railsアプリを育てる#2] テーブル間参照とリンクでのパラメータ渡し

非IT系エンジニアであるmacjがRuby on Railsを学びながらWebサービスを育てる企画。第2回です。サイトの更新自体は随分前に終わってましたが、まとめるのに時間がかかってしまいました。

過去記事:
Ruby on Rails+Herokuで素人が工数12時間でWebサービスを公開するまでの記録
[Railsアプリを育てる#1] Foursquareから取得した位置情報をGoogleマップに静的に表示させる

やりたかったこと

今回は、公開を開始してからすぐに追加しようと思いながらもなかなか出来ずにいたことにチャレンジしました。

各バス停(busstopモデル)の時刻表表示(busstopモデルのshowアクション/view)で時刻(timecell)をクリックした際に、

  • timecellのshowアクションを開いて「◯◯をHH:MMに発車するバス」という見出しをつけて
  • そのバスが各バス停を通過する時間を表示させる

ということ。

▼できたものはこんな感じ。

最終的にはtimecellのshowアクションではなくbusのshowで実現しましたが(これは後述)、とりあえず目的以上の内容を表示をさせることに成功しました。

今回身につけたこと

試行錯誤のすえ身につけたこと。

  • テーブル間参照
  • リンクを使ったパラメータ渡し
  • パラメータに応じてViewの見せ方を変える
  • Twitter Bootstrapでiconとボタンを表示させる

続きを読む

 

[Railsアプリを育てる#1] Foursquareから取得した位置情報をGoogleマップに静的に表示させる

先日Rails+HerokuではじめてWebアプリを公開しました。(過去記事:Ruby on Rails+Herokuで素人が工数12時間でWebサービスを公開するまでの記録

簡単な時刻表のサイトです。墨田区を走る超ローカル循環バス「すみまるくん」があまりにローカルすぎて時刻表を見るのにも一苦労だったので、ちょっと頑張って作ってみたサイトです。ちょうどRailsを勉強していたので。

形はひとつできたので、これからはしばらく少しずつ新しいものを取り入れながら、新しいスキルを身につけようと考えるに至りました。

で、今回はその第1回。「Googleマップの地図を表示させる」です。

以下を身につけることができました。めでたしめでたし。

  • dbへのcolumnの追加
  • FoursquareのAPIを叩くこと
  • RubyでJSONをhash化すること
  • rake db:reset
  • Googleマップの静的マップURL
  • Herokuでのアプリケーションの更新

以下、詳細。
続きを読む