SlideShare a Scribd company logo
ライトニングトーク
自己紹介
twitter: techno_neko
所属:Hokkaido.pm
仕事:組み込み系
テーマ「最適化」
We love optimize!
前回までのあらすじ
カラー画像をモノクロに変換する
perl スクリプトの処理時間を
約 40% まで短縮したところ、
思わぬところからアドバイスと
リクエストを頂いたのであった。
お題
「カラー画像をモノクロに変換」
変換!
モノクロに変換
カラー画像 モノクロ画像
・
・
・
・
・
・
Y = 0.29*R + 0.59*G + 0.11*B
(※係数は、輝度を求める一般的な値)
0x004E4E4E
0x004E4E4E
0x12345678 0x004E4E4E
0x12345678
0x12345678
実行環境
Mac OS X 10.6.4
CPU Intel Core 2 Duo 2.4 GHz
メモリ 4GB 800MHz DDR2 SDRAM
perl 5.12.1
テストデータ
6M pixel ( 3008 x 2000 )
32bit format
モノクロに変換
sub test1 {
# Y = 0.29*R + 0.59*G + 0.11*B
my @factor = ( 0.30, 0.59, 0.11 );
my @argb_test = @argb_src;
for (my $i=0; $i<scalar(@argb_test); $i++) {
my $argb = $argb_test[$i]; # ARGB
my $r = ( ($argb >> 16) & 0xFF );
my $g = ( ($argb >> 8) & 0xFF );
my $b = ( ($argb >> 0) & 0xFF );
my $y = int( ($r * $factor[0]) + ($g * $factor[1]) + ($b * $factor[2]) );
$argb_test[$i] = ( ($y << 16) + ($y << 8) + $y );
}
push @argb_dst, @argb_test;
}
モノクロに変換
TEST1: 24 wallclock secs
(24.00 usr + 0.13 sys =
24.13 CPU) @ 0.04/s (n=1)
これが基準タイム
モノクロに変換 〜 前回の最速
map の中を 1 行にまとめてみた
# Y = 0.29*R + 0.59*G + 0.11*B
my $fr = 0.30 / (1 << 16);
my $fg = 0.59 / (1 << 8);
my $fb = 0.11 / (1 << 0);
my @argb_test = map {
0x010101 * int(
(($_ & 0xFF0000) * $fr)
+ (($_ & 0x00FF00) * $fg)
+ (($_ & 0x0000FF) * $fb)
);
} @argb_src;
モノクロに変換 〜 前回の最速
約 234% 高速化!
TEST7: 11 wallclock secs
(10.04 usr + 0.28 sys =
10.32 CPU) @ 0.10/s (n=1)
TEST1: 24 wallclock secs
(24.00 usr + 0.13 sys =
24.13 CPU) @ 0.04/s (n=1)
use integer;
を手に入れた!
(すべてはここから始まった・・・)
モノクロに変換 〜 その1
use integer;
# Y = 0.29*R + 0.59*G + 0.11*B
my $fr = (30 * 256) / 100;
my $fg = (59 * 256) / 100;
my $fb = 256 - $fr - $fg; #(11 * 256) / 100;
my @argb_test = map {
0x010101 * (
(
( (($_ >> 16) & 0xFF) * $fr )
+ ( (($_ >> 8) & 0xFF) * $fg )
+ ( (($_ >> 0) & 0xFF) * $fb )
) >> 8
);
} @argb_src;
モノクロに変換 〜 その1
約 269% 高速化!
TEST8: 9 wallclock secs
( 8.88 usr + 0.10 sys =
8.98 CPU) @ 0.11/s (n=1)
TEST1: 24 wallclock secs
(24.00 usr + 0.13 sys =
24.13 CPU) @ 0.04/s (n=1)
モノクロに変換 〜 その2
use integer;
# Y = 0.29*R + 0.59*G + 0.11*B
my $fr = (30 * 256) / 100;
my $fg = (59 * 256) / 100;
my $fb = 256 - $fr - $fg; #(11 * 256) / 100;
$fb <<= 8; # only B
my @argb_test = map {
0x010101 * (
(
( (($_ >> 8) & 0xFF00) * $fr )
+ ( ( $_ & 0xFF00) * $fg )
+ ( ( $_ & 0x00FF) * $fb ) # $fb is already "<< 8"
) >> 16
);
} @argb_src;
モノクロに変換 〜 その2
約 317% 削減!
TEST9: 7 wallclock secs
( 7.52 usr + 0.10 sys =
7.62 CPU) @ 0.13/s (n=1)
TEST1: 24 wallclock secs
(24.00 usr + 0.13 sys =
24.13 CPU) @ 0.04/s (n=1)
モノクロに変換 〜 最終章
use integer;
# Y = 0.29*R + 0.59*G + 0.11*B
my $fr = (30 * 128) / 100;
my $fg = (59 * 128) / 100;
my $fb = 128 - $fr - $fg; #(11 * 128) / 100;
$fg <<= 8;
$fb <<= 16;
my @argb_test = map {
0x010101 * (
(
( ( $_ & 0xFF0000) * $fr )
+ ( ( $_ & 0x00FF00) * $fg )
+ ( ( $_ & 0x0000FF) * $fb )
) >> 23 #(24 - 1)
);
} @argb_src;
モノクロに変換 〜 最終章
約 355% 高速化!
TESTA: 7 wallclock secs
( 6.69 usr + 0.11 sys =
6.80 CPU) @ 0.15/s (n=1)
TEST1: 24 wallclock secs
(24.00 usr + 0.13 sys =
24.13 CPU) @ 0.04/s (n=1)
まとめ
まとめ
・最適化とはロマン
まとめ
・最適化とはロマン
・自分との戦い
まとめ
・最適化とはロマン
・自分との戦い
・危険を伴う
故に、
常に問い続けなければ
ならない。
それは・・・、
「そこに愛はあるのかい?」
愛が止まらない ;)
ご清聴、ありがとうございました。

More Related Content

PDF
テーマ「最適化」
PDF
Python で munin plugin を書いてみる
PDF
Subprocess no susume
PDF
Goをカンストさせる話
PDF
板ポリだけで めちゃカッコいい グラフィックスを出す!
PDF
高速な倍精度指数関数expの実装
PDF
Scalaの限定継続の応用と基本
TXT
New text document (2)
テーマ「最適化」
Python で munin plugin を書いてみる
Subprocess no susume
Goをカンストさせる話
板ポリだけで めちゃカッコいい グラフィックスを出す!
高速な倍精度指数関数expの実装
Scalaの限定継続の応用と基本
New text document (2)

What's hot (20)

PPTX
Prosym2012
PDF
Effective modern-c++#9
PPTX
Rでのtry関数によるエラー処理
PDF
effective modern c++ chapeter36
PDF
Rの高速化
PDF
DTrace for biginners part(2)
PDF
HPC Phys-20201203
PDF
Wavelet matrix implementation
PDF
Ssaw08 0701
PDF
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
PDF
Async design with Unity3D
PDF
llvm入門
PDF
C/C++プログラマのための開発ツール
PDF
条件分岐とcmovとmaxps
PDF
デバドラを書いてみよう!
PDF
Intro to SVE 富岳のA64FXを触ってみた
PDF
emcjp Item 42
PDF
Effective Modern C++ 読書会 Item 35
PDF
LLVM最適化のこつ
PDF
マーク&スイープ勉強会
Prosym2012
Effective modern-c++#9
Rでのtry関数によるエラー処理
effective modern c++ chapeter36
Rの高速化
DTrace for biginners part(2)
HPC Phys-20201203
Wavelet matrix implementation
Ssaw08 0701
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Async design with Unity3D
llvm入門
C/C++プログラマのための開発ツール
条件分岐とcmovとmaxps
デバドラを書いてみよう!
Intro to SVE 富岳のA64FXを触ってみた
emcjp Item 42
Effective Modern C++ 読書会 Item 35
LLVM最適化のこつ
マーク&スイープ勉強会
Ad

Viewers also liked (16)

PDF
RIMS Update - Best Practices for Roading Asset Managemment
PPTX
Google Science Fair Summary
PPTX
Creating Email Campaigns that Work: A Focus on Design Elements
PPTX
November 12 : (Education)
PDF
SharePoint Saturday Houston: SharePoint 2010 Performance
PPTX
Emerging technologies in_adult_education_classroombl (2)
PPTX
PPTX
Mis deberes y derechos como aprendiz sena
PDF
NGN Company Profile November08
PDF
Catálogo xpress - Equinos
PDF
Microfiber goods
PDF
UIMP: Sistema Multiagente CBR para Turismo de Salamanca
PPT
Future of Composite Apps S-Controls and Beyond
PDF
Data table for falling steel
PDF
Taller de autoestima. gestalt branden
PDF
China placi de circuit imprimat preţul de listă
RIMS Update - Best Practices for Roading Asset Managemment
Google Science Fair Summary
Creating Email Campaigns that Work: A Focus on Design Elements
November 12 : (Education)
SharePoint Saturday Houston: SharePoint 2010 Performance
Emerging technologies in_adult_education_classroombl (2)
Mis deberes y derechos como aprendiz sena
NGN Company Profile November08
Catálogo xpress - Equinos
Microfiber goods
UIMP: Sistema Multiagente CBR para Turismo de Salamanca
Future of Composite Apps S-Controls and Beyond
Data table for falling steel
Taller de autoestima. gestalt branden
China placi de circuit imprimat preţul de listă
Ad

Similar to テーマ「最適化 その2」 (20)

PPTX
20150909卒研進捗LT
PPTX
Androidで画像処理リベンジ
PDF
画像を縮小するお話
PPT
30分で博士号がとれる画像処理講座
PPT
Hokkaido.pm.casual #03 slide
PDF
IbisPaintのOpenGLES2.0
PPTX
php5-gd で画像を弄る話
PPTX
打倒 PaintsChainer おうちで始めるDCGAN
PDF
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
PPTX
20160208卒研発表
PDF
Inside png
PDF
機械学習向けCGデータの量産手法の検討
PDF
Pythonで画像処理をやってみよう!第2回 - 動く物体の抜き出し -
PPTX
Imagemagickknowhow
PDF
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​
PPTX
Shadow gunのサンプルから学べるモバイル最適化
PDF
伝統的工芸品の世界販売戦略を支援するためのバーチャルショウケース~テクスチャ・ツール~
PDF
Linqで画像処理
PPTX
Chainerを使って白黒アニメの彩色実験をしてみた
PDF
Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -
20150909卒研進捗LT
Androidで画像処理リベンジ
画像を縮小するお話
30分で博士号がとれる画像処理講座
Hokkaido.pm.casual #03 slide
IbisPaintのOpenGLES2.0
php5-gd で画像を弄る話
打倒 PaintsChainer おうちで始めるDCGAN
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
20160208卒研発表
Inside png
機械学習向けCGデータの量産手法の検討
Pythonで画像処理をやってみよう!第2回 - 動く物体の抜き出し -
Imagemagickknowhow
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​
Shadow gunのサンプルから学べるモバイル最適化
伝統的工芸品の世界販売戦略を支援するためのバーチャルショウケース~テクスチャ・ツール~
Linqで画像処理
Chainerを使って白黒アニメの彩色実験をしてみた
Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -

More from technocat (6)

PDF
GUIアプリに必要な3つのこと
PDF
perl meets beats.
PDF
テーマ「perl meets beats」
PDF
記念撮影で気を付けるべき 4 つのこと
PDF
テーマ「なんでもないようなこと」
PDF
テーマ「Hokkaido.pmからのお知らせ」
GUIアプリに必要な3つのこと
perl meets beats.
テーマ「perl meets beats」
記念撮影で気を付けるべき 4 つのこと
テーマ「なんでもないようなこと」
テーマ「Hokkaido.pmからのお知らせ」

Recently uploaded (12)

PDF
aidetailseminor111用語解説を徹底的にしまくります。20250814
PDF
RailsエンジニアのためのActive Recordの基礎から学ぶ実践的DB連携
PDF
2508slide_townobuse_nagano_chohoobuse.pdf
PDF
202508株式会社なぞるマーケティング組織開発・学習支援サービス_概要資料
PDF
sustainability_MSOLサステナビリティレポート_202508_日本語版_完成版.pdf
PDF
AIゲートウェイ、グローバルトップ12企業のランキングと市場シェア2025.pdf
PDF
東京商工会議所荒川支部で中小企業講演「今日から使える!省力化・効率化に向けた生成AI活用入門」
PDF
2508_ インパクトレポート会社概要_雨風太陽
PDF
世界化学品産業の市場動向と将来展望に関する包括的な調査研究 QYResearch
PDF
【2507】インパクト共創室実績
PDF
【会社紹介資料】株式会社スキルアップ ~エンジニア第一主義!収入・働きやすさ・成長機会でトップクラスを目指す~ 高収入を実現する還元モデル × 自分で選べ...
PPTX
だれでもサクッと使える!採用ピッチ資料テンプレート(解説付き)_20230529_ver1.pptx
aidetailseminor111用語解説を徹底的にしまくります。20250814
RailsエンジニアのためのActive Recordの基礎から学ぶ実践的DB連携
2508slide_townobuse_nagano_chohoobuse.pdf
202508株式会社なぞるマーケティング組織開発・学習支援サービス_概要資料
sustainability_MSOLサステナビリティレポート_202508_日本語版_完成版.pdf
AIゲートウェイ、グローバルトップ12企業のランキングと市場シェア2025.pdf
東京商工会議所荒川支部で中小企業講演「今日から使える!省力化・効率化に向けた生成AI活用入門」
2508_ インパクトレポート会社概要_雨風太陽
世界化学品産業の市場動向と将来展望に関する包括的な調査研究 QYResearch
【2507】インパクト共創室実績
【会社紹介資料】株式会社スキルアップ ~エンジニア第一主義!収入・働きやすさ・成長機会でトップクラスを目指す~ 高収入を実現する還元モデル × 自分で選べ...
だれでもサクッと使える!採用ピッチ資料テンプレート(解説付き)_20230529_ver1.pptx

テーマ「最適化 その2」