Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

StreamExecutor


Twitterで拾った記事:Google Looks To Open Up StreamExecutor To Make GPGPU Programming Easierによると、GoogleGPUを簡単に利用できるというStreamExecutorをオープンソースにするよと。

このStreamExecutorは、TensorFlowで使っているということは、元ネタでも書いてあるけど、
3月5日のブログ、TensorFlowは、Altera OpenCLをサポートしている。でも書いているんだよね。

で、GPUを使うためのAPI等は共通化できるけど、カーネルはどうなるかというと
元ネタから引用
===========     =======         ===========     =========================
Platform        Format          Location        Setter
===========     =======         ===========     =========================
CUDA            PTX             disk            `AddCudaPtxOnDisk`
CUDA            PTX             memory          `AddCudaPtxInMemory`
CUDA            cubin           disk            `AddCudaCubinOnDisk`
CUDA            cubin           memory          `AddCudaCubinInMemory`
OpenCL          text            disk            `AddOpenCLTextOnDisk`
OpenCL          text            memory          `AddOpenCLTextInMemory`
OpenCL          binary          disk            `AddOpenCLBinaryOnDisk`
OpenCL          binary          memory          `AddOpenCLBinaryInMemory`
===========     =======         ===========     =========================

のように、CUDAではPTXかcubin(binary)で、OpenCLはtextかbinary。
OpenCLがtextなのに、CUDAがPTXというのはズルいだろう。あはは。

ここのところの実装は、kernel_spec.ccに書いてあります。

Google君にいろいろと聞いてみたら、見つけた。
GPUCC An Open-Source GPGPU Compiler A PreviewビデオのPage.9に
Runtimeは、StreamExecを使うとあるし。

GPUCCを使うと今までBLOBだった、CUDA環境が最終的には、Drvier以外はすべてOpenSourceに!
最後のページ(Page.27)には、

Plan for release: March 2016

とあったよ。

2015 LLVM Developers' MeetingでのGoogleの発表資料
Optimizing LLVM for GPGPUのSlideをクリックしてもありませんが、
ここにありますよ。
また、Youtubuのビデオもあります。