みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

iPhoneの仕様について

iPhone5ではA7プロセッサが使用されており、A7プロセッサは64ビットです。

iPhone4で動いていたアプリがiPhone5で動作しなくなったのは、プロセッサの64ビット化によるものではと思っておりますが、iPhoneの場合64ビット環境で32ビットアプリは動作しないのでしょうか。iPhone4からiPhone5cの場合は、iPhone4で動いていたアプリが動作します。

Windowsの場合は、64ビット環境で32ビットアプリが動作します。

投稿日時 - 2016-02-26 05:59:22

QNo.9134017

暇なときに回答ください

質問者が選んだベストアンサー

>Pentiumが交換になった例が有名ですが、A7プロセッサが交換になったという話はないようです。

割り算はソフトウェアによる代替演算がとてつもなく遅く、また当時のCPU演算速度的にも許容できない人たちが少なからず居ましたし、それにあの事例は勢力争いの影響もありました。
更にこの事例以降、エラッタへの対処方法について幾つか手段が考案され、ハードウェアの交換という莫大な費用がかかるリスクを避けられるようになったのも影響しています。
もっと言えば、一般に認知されていないエラッタは数多くあり、それを知るには秘密保持契約を結ぶ必要があったり、秘密保持契約のため詳細を説明できないこともあります。

一般に認知されていないCPUエラッタを知りたいときは、コンパイラーのソースコードやOSカーネルのソースコードを調べてみると良いですよ。
周辺機器についてはドライバーのソースコードから知ることが出来る場合もあります。

>なので、OSメーカーが用意したAPI処理やライブラリの中で利用していればCPUのIDを見て処理を変えたり、自前で代替関数処理へと置き換えで対処しているという理解でよろしいでしょうか。

そう考えるのが妥当です。

投稿日時 - 2016-02-27 16:16:56

お礼

ありがとうございます。

ご説明頂きました内容で納得することができました。

投稿日時 - 2016-02-27 17:26:50

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.5

>しかし、実際にはiPhone5sでは動作しませんでした。なぜ、問題なく動作するといっていたものが動作しない理由を聞いたところ、Apple側の問題とだけで詳細は教えてもらえませんでした。

考えられるのはCPUのエラッタですね。
例えば昨今はCPUに特定アルゴリズム専用命令を載せ、繰り返されるアルゴリズム計算をより高速に実行させようという傾向があります。
そのひとつとして暗号処理で頻繁に使われるハッシュ計算があります。

エラッタへの対処は状況により様々で、OSメーカーが用意したAPI処理やライブラリの中で利用していればCPUのIDを見て処理を変えたりしますし、コンパイラーが吐き出す機械語を代替関数処理へと置き換えることもあります。
でも自前のソースで(インラインアセンブラなどを使用して)利用している場合、エラッタに該当する命令を使用していれば、自前で代替関数処理へと置き換える処置が必要になります。

この「自前」の中にはバイナリライセンスだけを購入して利用しているサードパーティー製ライブラリやコンパイラーも含まれ、デベロッパー自身だけで解決できない(もしかしたら対処方法を知らない)事情があるのかも知れません。
どちらにしてもCPUのエラッタであれば「Apple側の問題」という答えは間違っていません。

ハードウェアのエラッタは、エラッタ発覚後に設計図で対処を終え次第、後に製造されるハードウェアでは修正されるのがよくある形です。
該当エラッタ修正版かどうかをソフトウェアから判断できる情報を取得できるようになっているのも昨今の一般的姿ですが、問題はCPUのエラッタ情報を入手できる立場にあるかどうかで、モバイル向けハードウェアを他社に提供していないAppleであり、秘密主義傾向がある事を考えると、もしかしたらAppleはCPUのエラッタ情報や改版情報を開示していない可能性もあります。

投稿日時 - 2016-02-27 14:41:30

補足

ありがとうございます。

今回ご教示頂いた内容で「Appleの問題」と言っていた理由がわかりました。

CPUエラッタの有名な例として「特定の条件で割り算を行なうと間違った結果になる」という問題でPentiumが交換になった例が有名ですが、A7プロセッサが交換になったという話はないようです。

なので、OSメーカーが用意したAPI処理やライブラリの中で利用していればCPUのIDを見て処理を変えたり、自前で代替関数処理へと置き換えで対処しているという理解でよろしいでしょうか。

プロセッサの問題の読みは当たっていた可能性があるが、64ビットによるものではなく、CPUエラッタということですね。

投稿日時 - 2016-02-27 15:22:17

ANo.4

iPhone5はiPhone5cと同じA6プロセッサで、
A7プロセッサが採用されたのはiPhone5sですよ。

投稿日時 - 2016-02-26 19:18:06

補足

記載が間違っておりました。

iPhone5sの間違いでした。

投稿日時 - 2016-02-27 01:46:34

ANo.3

64bit化は関係ありません。

Appleがモバイルで使用しているCPUはARMという会社からライセンスを買っているもので、ARMのARMv8-Aという名のCPU設計を拡張しています。

このARMv8-Aは32bit命令も実行でき、この機能をAppleはA7から削っていません。
またiOSの元になったMac OS X(64bit)ではアプリだけでなくドライバーも32bit版が利用でき、アプリのみ32bit版が利用可能な64bit版Windowsより柔軟性が高くなっています。
ただ32bitドライバーも64bit OSで利用できる機能は、iOSには入っていない可能性があります(CPUと周辺回路のハードウェア機能に依存し、ドライバーを単体インストールするPC用OSとは必要事情が異なるため)。

iPhone4で動いていたアプリがiPhone5で動作しなくなった原因は、OSの下位互換処理の不完全性や、アプリの実装に於いてOS機能のグレーゾーン利用やアプリの実装に潜在的なバグがあると解釈すべきです。
それがよくある原因ですので。
他にはハードウェアの仕様に依存していて、その条件が合わないために動かない場合もあります。
例えばiPhone4とiPhone5では画面の解像度が異なります。

Windowsも64bit環境ですべての32bitアプリが動くわけではありません。

投稿日時 - 2016-02-26 16:04:23

補足

ご教示頂きありがとうございます。

記載が間違っておりました。

iPhone5で動作していたVPNクライアントソフトがあり、iOSを7アップデートしても問題なく、VPN接続できていましたが、iPhone5s(iOS7)では、そのVPNクライアントソフトウェアが起動できず、iPhone5c(iOS7)ではVPNクライアントソフトウェアが起動できVPN接続が行えました。

当時、iPhone5sが発売される前でiOS7での開発環境はサイトの情報よりAppleのデベロッパー向けの開発ソフトウェアを
使用して開発することはできるが、iPhone5sを入手して動作確認をすることはできず、プロセッサが64ビットのため、iPhone5s動作対応版のVPNソフトを開発しないと動作しないのではという思いからiPhone5sの対応確認を行っておりましたが、確認したところ、iPhone5sでも問題なく動作するという回答でした。

しかし、実際にはiPhone5sでは動作しませんでした。なぜ、問題なく動作するといっていたものが動作しない理由を聞いたところ、Apple側の問題とだけで詳細は教えてもらえませんでした。

なので、プロセッサの64ビット化の問題ではと考えた次第です。

投稿日時 - 2016-02-27 01:42:51

ANo.2

iPhoneアプリの場合、完全なマシン語に変換されて配布されている訳では無いのでCPUの違いはOSが吸収しています。
OSがバージョンアップする際に、古い機能が廃止されたり互換性が無くなる事が時々あります。
アプリ自体が新しい機能に合わせてバージョンアップしていれば、新旧どちらのOSでも動作するよう互換性のあるモノになりますが、バージョンアップしていないと新OSに対応できず正常に動作しないという現象が発生します。

Windowsの場合は、互換性確保のためOSが新しくなってもある程度は古いアプリケーションも動作するように出来ていますが、iOSやAndroidの場合は潔く切り捨てる事があります。

投稿日時 - 2016-02-26 09:25:21

補足

ご教示頂きありがとうございます。

だいぶ前の出来事で疑問に思ったので質問をさせていただきました。

iPhone5、iPhone5c、iPhone5sともにiOS7なのにiPhone5sだけ動作しないアプリがあったため、なぜかと思って質問いたしました。
現在は、新しいバージョンでiPhone5sに対応させたようでiPhone5sで動作するようになっています。

投稿日時 - 2016-02-27 01:51:10

ANo.1

>iPhone4で動いていたアプリがiPhone5で動作しなくなったのは、
>プロセッサの64ビット化によるものではと思っておりますが…
それはないでしょう。64bitCPUのために動作しなくなるのであれば、その当時のアプリはほとんど一時的に全滅となってしまいます。そんなことになれば世界中で大変な騒ぎになります。が、実際にはそのような騒ぎは起こりませんでした。

考えられるのは、
1)CPUのコア数の違い。(4はシングル、5はデュアルコア)
2)CPU処理能力の向上。
3)iOSのバージョンの違い。
ではないかと思います。
特にアプリ開発時には想定していなかった1)と2)によって処理タイミングが変わることで動かなくなるアプリが出ても不思議はありません。

iPhone4からiPhone5cの場合は動作するということは、要因がまだ他にもあると想定するのが自然ではないかと思います。また、iPhone5とiPhone5Cではリリース時期が1年違います。もしApple社側に要因があったのであれば、その間に改修することも可能です。iPhone5Cと同時期のiPhone5Sではどうなのでしょう?

何れにしても動作を比較するには「なるべく条件を揃えて比較する」のが原則だと思います。処理能力が違うものを比べるには、OSのバージョン等動作環境を極力揃えなければ客観的な比較はできません。

少なくともプラットフォームのビット数の違いのために動作しなくなったとはあり得ないと思います。新たにビルドされた64bit版OS上で、従来の32bitアプリが動く仕組みが組み込まれていないとは到底考えられないのですが?

投稿日時 - 2016-02-26 08:27:07

補足

ご教示頂きありがとうございます。

記載が間違っておりました。

iPhone5で動作していたVPNクライアントソフトがあり、iOSを7アップデートしても問題なく、VPN接続できていましたが、iPhone5s(iOS7)では、そのVPNクライアントソフトウェアが起動できず、iPhone5c(iOS7)ではVPNクライアントソフトウェアが起動できVPN接続が行えました。

当時、iPhone5sが発売される前でiOS7での開発環境はサイトの情報よりAppleのデベロッパー向けの開発ソフトウェアを
使用して開発することはできるが、iPhone5sを入手して動作確認をすることはできず、プロセッサが64ビットのため、iPhone5s動作対応版のVPNソフトを開発しないと動作しないのではという思いからiPhone5sの対応確認を行っておりましたが、確認したところ、iPhone5sでも問題なく動作するという回答でした。

しかし、実際にはiPhone5sでは動作しませんでした。なぜ、問題なく動作するといっていたものが動作しない理由を聞いたところ、Apple側の問題とだけで詳細は教えてもらえませんでした。

なので、プロセッサの64ビット化の問題ではと考えた次第です。

投稿日時 - 2016-02-27 01:44:11

あなたにオススメの質問