ページ 11

short と int の計算速度

Posted: 2014年3月05日(水) 10:33
by 詩織
インテル係のCPU体系の場合、一般的な結論として、
原理的に、primitive data type としてのintを利用して計算するほうがshort型のデータを利用して計算するより
速いでしょうか。

宜しくお願いします

Re: short と int の計算速度

Posted: 2014年3月05日(水) 12:50
by box
検証するためのコードを自分で書いてみるとか…。

Re: short と int の計算速度

Posted: 2014年3月05日(水) 21:13
by みけCAT
言語が指定されておらず、「primitive data type」でググったときに目立ったのがJavaだったので、Javaの話と仮定します。
Javaのint型は32ビット、short型は16ビットです。
「インテル係のCPU」は「インテル製のCPU」の誤字であると仮定します。

ここで、例えばIntel 8086はインテル製のCPU(インテルが開発したCPU)です。
このCPUのレジスタは最大16ビットしかないので、32ビットのint型より16ビットのshort型の方が
自分で多倍長計算を実装しなくてもネイティブの整数演算命令で計算できるため、
intよりshort型のデータを利用して計算する方が速いと考えられます。

したがって、反例が考えられるので、「一般的な結論として、
原理的に、primitive data type としてのintを利用して計算するほうがshort型のデータを利用して計算するより
速い」というのは、間違いであると考えられます。

Re: short と int の計算速度

Posted: 2014年3月05日(水) 22:47
by 詩織
詩織でございます。
前回説明不足で申し訳ありません。
ここで「原理的に」、あるいは「一般論として」という表現は
データタイプがCPUのbit数と一致すれば、一番速いという定論があるかどうかという意味です。
例えば、64bitのCPUだと、もしlong long int が 64bitであって、int は32bitであれば、
言語は何であれ、必ずlong long intを利用して計算するほうはintを利用するより速いですね?

またどうぞ宜しくお願いします。

Re: short と int の計算速度

Posted: 2014年3月05日(水) 22:58
by みけCAT
無駄に大きなデータ型を用いると、無駄にメモリの広範囲にアクセスする必要が生じ、
その結果キャッシュに入らないデータの量が多くなるため、無駄に(キャッシュではなく)メモリ本体にアクセスする回数が増え、
計算が遅くなるかもしれません。

ただし、それとCPUの扱うデータサイズの一致による高速化の影響(あれば)のどっちが強いかは、私にはわかりません。
扱う問題にもよると思います。

Re: short と int の計算速度

Posted: 2014年3月05日(水) 23:15
by Poco
みけCAT さんが書きました: 言語が指定されておらず、「primitive data type」でググったときに目立ったのがJavaだったので、Javaの話と仮定します。
Javaのint型は32ビット、short型は16ビットです。
(略)
intよりshort型のデータを利用して計算する方が速いと考えられます。
Javaに関して言えば、short型をそのまま演算するバイトコードはありません。
必ずint型に拡張して演算しますので、int型の方が早いかと。

Re: short と int の計算速度

Posted: 2014年3月07日(金) 18:27
by 詩織
なんとなく分かったような感じです。
皆さん有難うございました。