というかんじになりました. GTX 670では,そもそも速度差があんまりなくて,conflictの影響も比較的少ない. GTX 580では,かなり効果は顕著で,conflictもけっこう効く.と言ったところでしょうか. GTX 670ってFLOPSではGTX 580とは比べ物にならないほど速いし,メモリ速度も192GB/sで同じなのに,実アプリでは逆転してこの差.悲しい・・・. 全体コード CUDA 4.1以降とOpenCV 2.3以降を想定してます. 時間計測の関係でカーネルの終了を同期的に待ったり,関数を細かく分けたりとかごちゃごちゃしたことをしてます. main.cpp #include <iostream> #include <opencv2/opencv.hpp> void initialize(int _w, int _h); void send(unsigned *h_src
ごめん32bit版だとCUDA動いてなかったかも。 新しいのだと修正したはずだから http://d.hatena.ne.jp/w_o/20150619#1434643288 を参照してください。 CUDA版も入れた。いちおう区切りついたので32bit版も置いておく。 http://int.main.jp/files/waifu2x-converter_x86_20150616_02.exe http://int.main.jp/files/waifu2x-converter_x64_20150616_02.exe 手元のGTX765M だとまだcaffe版のほうが3%ぐらい速いので存在理由は無い。まあ自己満足だね… OpenCLあるのに CUDA 版を作った理由は、 OpenCL では shared のサイズが変えられない。ローカルメモリサイズはかなり影響するので、cuCtxSetCac
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 ちょっとしたきっかけがあって、AMD用のGPUとNVIDIA用のGPU両方で高速化作業を行いました。 そのときに得られた知見を書いておきます。 AMD GCN isa と NVIDIA SASS GPUでプログラミングを行うときは、OpenCL、CUDA などを使うと思いますが、これらはより低レベルなGPU用の機械語にコンパイルされます。 AMD のGPUでは、これに”ISA”、NVIDIA の GPU では、これを”SASS”という名前が付けられています。ISAは一般的な単語なので、別に正しい名前があるかもしれませんが、ビルド時のオプションなどで指定する場合は、–isa 等を指定しているので、ここでは、GCN isa とします。 通常のGPUプログラミングでこれらを見ることはないかも
概要 経緯 : http://d.hatena.ne.jp/w_o/20150602#1433229756 なんか社内チャットで https://github.com/WL-Amigo/waifu2x-converter-cpp をはやくしろというメッセージを受信したのでやった。 まあそれなりに頑張ったのでまとめておく 今の waifu2x のパラメータ(カーネル3x3、平面数32の倍数)に依存したチューニングをしている部分もあるが、 カーネルサイズが小さいCNNなら同じような考えかたを適用できるのではないかと思う 今の実装の効率はhttp://d.hatena.ne.jp/w_o/20150616#1434392833にあるとおり。 自分では確認できていないが、CUDA版はKeplerが効率悪くて、Fermi、Maxwellなら30〜40%程度の効率らしい。 前提知識 OpenCV が少
Parallel reduction is a common building block for many parallel algorithms. A presentation from 2007 by Mark Harris provided a detailed strategy for implementing parallel reductions on GPUs, but this 6-year old document bears updating. In this post I will show you some features of the Kepler GPU architecture which make reductions even faster: the shuffle (SHFL) instruction and fast device memory a
CUDA の kernel 関数からの戻り値を毎回 cudaMemcpy したくない時につかう template<class T> class CudaValue { private: T* ptr; public: CudaValue() { cudaMalloc(&ptr, sizeof(T)); } ~CudaValue() { cudaFree(ptr); } operator T() { T ret; cudaMemcpy(&ret, ptr, sizeof(T), cudaMemcpyDeviceToHost); return ret; } CudaValue& operator=(const T& rhs) { cudaMemcpy(ptr, &rhs, sizeof(T), cudaMemcpyHostToDevice); return this; } T* get() {
Convolutional neural networks (convnets) are all the rage right now. Training a convnet on any reasonably sized dataset is very computationally intensive, so GPU acceleration is indispensible. In this post I’ll show how you can use the blazing fast convolution implementation from Alex Krizhevsky’s cuda-convnet in Theano. As an example, I’ll also show how the LeNet deep learning tutorial on convolu
Accelerate Machine Learning with the cuDNN Deep Neural Network Library Machine Learning (ML) has its origins in the field of Artificial Intelligence, which started out decades ago with the lofty goals of creating a computer that could do any work a human can do. While attaining that goal still appears to be in the distant future, many useful tools have been developed and successfully applied to a
Deep Learning… moving beyond shallow machine learning since 2006! Theano – CPU/GPU symbolic expression compiler in python (from MILA lab at University of Montreal) Torch – provides a Matlab-like environment for state-of-the-art machine learning algorithms in lua (from Ronan Collobert, Clement Farabet and Koray Kavukcuoglu) Pylearn2 – Pylearn2 is a library designed to make machine learning research
NVIDIA's CUDA Compiler (NVCC) is based on the widely used LLVM open source compiler infrastructure. Developers can create or extend programming languages with support for GPU acceleration using the NVIDIA Compiler SDK. Add GPU Acceleration To Your Language You can add support for GPU acceleration to a new or existing language by creating a language-specific frontend that compiles your language to
ここではGPGPU向け統合環境の一つ、NVIDIAのCUDA(Compute unified device architecture)を使って、大規模並列計算を行ってみる。 NVIDIAによれば、並列度の高い処理ではCPUと比べておよそ10倍以上の速さで処理できるという。 なお、CUDA環境をインストールすると、自動的にOpenCLも使えるようになる。OpenCLに関しては別項を参照。 目次 CUDAのインストール(Linux編) - LinuxにCUDA環境をインストール CUDAのインストール(Windows編) - Windows XPにCUDA環境をインストール CUDAのインストール(Mac OS X編) - Mac OS XにCUDA環境をインストール 初めてのプログラム - とりあえずCUDAでのプログラムに慣れてみます 拡散方程式を解く - より実用的な処理の一例として拡散
この間のインタプリタをはじめから・・・で問題がありご指摘を受けました。 ですので次回より修正を行い、今回は GPGPU を使った計算についてやりたいと思います。 今回 nVidia の GeForce 8800 GTX というボードが手に入りましたので、専用の言語 (現在 GF8x 系のみで動作可能) であるCUDAを利用したいと思います。 CPUからの命令でGPUメモリのGPUのデータ領域のメモリを確保 CPUからGPUへメモリ内容をコピー GPUで演算処理、エラーの有無をチェック GPUからCPUへ出力用メモリ内容をコピー という流れで処理を行います。 注意しなければならない点としてGPUからCPUにメモリ内容をコピーする際、GPU内部で出力用メモリに書き出しが行われなかった場合、前回の出力結果とまったく同じものが出てきます。 (再起動してもフラッシュされない場合もありました。)
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く