なぜAndroid携帯電話はコンピューターよりもコアが多いのですか?


80

ラップトップには通常最大で4つのコアがあり、おそらくデュアルコアがより一般的です。最近、クアッドコアからデュアルコアに切り替えましたが、CPUを集中的に使用するタスクであっても、クアッドコアの使用例が限られていることを確認できます。

一方、携帯電話では、クアッドコア、ヘキサコア、オクタコアが一般的です。どうして?どのタスクがそれらを利用できますか?

big.LITTLEが答えの一部になる可能性があることを理解しています。つまり、非常に多くのコアの主な利点は、すべてを同時に使用できることではなく、現在のワークロードに適した消費電力のコアを使用することです。ただし、たとえば、Snapdragon 625には8つのCortex-A53コアがあり、big.LITTLEの場合はそうではありません。

たぶん、ARMアーキテクチャには、ワットあたりの最適なパフォーマンスという点が低いかもしれません。つまり、ワットあたりの最適なパフォーマンスに合わせてシングルコアを調整すると、IntelよりもARMのパフォーマンスが低下します。そのため、パフォーマンスを提供するためにより多くのコアが使用されます。これは単なる仮説です。

しかし、この場合でも、携帯電話の8つのコアなど、どのワークロードが効率的に使用できるかはわかりません。ラップトップでは、プロジェクトの完全な(非増分)コンパイルのようなものがいくつか想像できます。しかし、電話で?

  • ゲームはパフォーマンスを重視する場合がありますが、通常はCPUではなくGPUのパフォーマンスが必要です。
  • 理論的には、複数のコアにより、インストール時またはアップグレード時のAndroid Lollipop / Marshmallow AOTコンパイルを高速化できます(つまり、「アプリ3/121の最適化」フェーズ)。ただし、これで複数のコアを利用できるかどうかはわかりません。コードを覚えている限り、一度にコンパイルされるアプリは1つだけですが、コンパイルプロセス自体に並列性がある可能性があります。
  • また、Android 7以降では、コンパイル時に複数のコアを利用できます。しかし、アイドル状態で充電中にコンパイルされると報告されているため、その利点はかなり小さいようです。少なくとも1晩電話を充電する場合は、そのようなシナリオで30分または2時間かかるかどうかは本当に気にしません。

私の答えで指摘したように、あなたは物事を逆さまに見ているようだということを覚えておいてください。多くのコア/パラレル実行が標準であり、多くのコアを持つことの異常であるお使いの電話機ではなく、PC CPUの異常です。
motoDrizzt

4
あなたの質問には欠陥があり、PCは電話よりも多くのコアを持つことができます。intel.com/content/www/us/en/products/processors/core/x-series/…そして、それは数十または数百のコアを持つことができるサーバークラスのマシンにさえ入らない。(および一部のスーパーコンピューターは、数千コアの範囲に入ります。)
JAB

3
@JAB確かに、しかし私はコアの最大数についてではなく、典型的な数について話している。ラップトップの場合、クアッドコア以上は非常に一般的ではありませんが、Xeonを使用すると、いくつかの例外を見つけることができます。携帯電話の場合、オクタコアであっても比較的一般的なようです。
v6ak

4
「最近、クアッドコアからデュアルコアに切り替えましたが、CPUを集中的に使用するタスクであっても、クアッドコアの使用例が限られていることを確認できます。」-その結論に至った経緯を詳しく説明してください。
アブドゥル

@Abdulそれは主に私の観察(htopまたは同様のツールを使用してシステムの負荷を見る)から、そして部分的には私の結論から来ています。並列化(OpenScadを使用したレンダリングなど)が予想される一部のタクスクでさえ、シングルコアです。Firefox(ESR)は通常、多くても1つのコアを消費します。インクリメンタルコンパイル–測定していませんが、直感的には、独立したタスクを見つける機会はあまりありません。(完全なコンパイルは別のケースです。)
v6ak

回答:


63

既に述べたようにbig.LITTLEの組み合わせ戦略(技術的にはHMPヘテロジニアスマルチプロセッシングクラスター)が、非常に多くの(時には圧倒的に多くの)コアの主な理由です。モバイルデバイスは、多くの場合、重負荷と軽負荷の両方を含む複数のシナリオに遭遇します。

消費者向けの極端な例としては、MediaTekのHelio X20があります。HelioX20は、パフォーマンス指向の2つのA72コア、4つのバランスの取れたA53コア、4つのエネルギー効率の高いA35コアを備えています。これは、さまざまな使用事例を通じて非常に柔軟です。ただし、通常は8コア 2クラスターで十分だと思います。

また、デスクトップのような別の例として、QualcommのSnapdragon 800シリーズ(S 800、S 801、およびS 805)もあります。各SoCには同じマイクロアーキテクチャのコアが4つだけあり、2つはクロックが高く、2つはクロックが低くなっています。クアルコムがこれらのSoCを作成したのは、独自のマイクロアーキテクチャ(Krait 400およびKrait 450)に非常に自信を持っているためです。

ゲームの場合、CPUではなくGPUのパフォーマンスを要求しているように見えても、CPUに大きな負荷がかかります。GPUは、処理するデータを他に提供するものがないと単独で動作することはできません。これは、ゲーム中にCPUが実行する主要なジョブの1つです。ほとんどのゲームの場合、GPUはグラフィックスのみをレンダリングしますが、データ、リソース、アセットの読み込み、システム、環境、物理学などのゲーム内メカニクスの計算など、他のすべてのジョブはCPUによって実行されます。ローエンドCPUにこだわりながらGPUをアップグレードしても、フレームレートが高くなることはありません。

二次的な理由は、AndroidがCPUリソースを使用する方法です。Androidは、ほぼ独自のアプリケーション環境を作成します。Javaのコード(およびAPI)のみを使用しますが、Dalvikという名前の独自の仮想マシンがあり、後にART(APIレベル21)に置き換えられました。APKの実行可能コードは、.classJavaのファイルによく似た「ニュートラル」形式です。実行される前に、コードはマシンのネイティブ命令にもう一度コンパイルされます[1]。コンパイルプロセスはマルチスレッドであり、マルチコアを利用してパフォーマンスを向上させることができます。
また、アプリの実行中には、アプリと並行して、またはアプリと並行して実行される他のプロセスやメカニズム(ガベージコレクターなど)がいくつかあります。より多くのコアを使用すると、メインアプリケーションと同様に、サポートプロセスをより効率的に実行できます。
1.ファイルタイプ識別子を使用する場合、「最適化された」dexファイルはELF形式であり、「ニュートラル」dexファイルは独自の形式であることがわかります。

もう1つのささいな理由は、ARMコアがIntel x86チップほど速く動作できないことです。Intel x86マイクロアーキテクチャは、Intel 8086チップの設計が開始された1976年に遡ることができます。これは、x86が長い間開発されたことを意味します。単一の最新のハイエンドARM Cortex-A73コアは、Intel Clarkdaleコアと同じくらい強力で、Core i5-660を例にしています(GeekBench、シングルコア)。これは、x86がCISCマイクロアーキテクチャであり、ARMがRISCであるためです。マイクロアーキテクチャ。あなたは確かに2つほどのアクティブなアプリで遅れる電話が欲しくありません。より多くのコアが圧力を緩和するのに役立ちます。そのため、デュアルコアSoCは、スマートウォッチでのみ比較的人気があります。スマートウォッチでパフォーマンスが必要なのは誰ですか?

興味深いことに、同じ負荷でコアを増やすと、単一のコアよりも消費電力が少なくなります。CPU周波数と消費電力の関係は直線的であるため、2倍の周波数では常に2倍以上、または3倍または4倍の電力が必要になりますが、パフォーマンスは2倍未満になります(キャッシュなどの他のリソース制限のため) )。そのため、4つのコアが同じ負荷で単一のコアを簡単に打ち負かすことができ、パフォーマンスが向上し、同時に消費電力が少なくて済みます。

参考文献:


1
何年も前に、Linuxカーネルが元々スーパーコンピューターを中心とした優れたマルチコアサポートに取り組んでいた場所を読んだり見たりしたことを覚えています。これらの努力は、事故」
-Marc.2377

3
この回答は受け入れられているにもかかわらず、実際に質問に答えているようには見えません。この答えは、「電話に余分なコアが必要な理由」と答えているようです。目の前の質問ではありません。PCと電話の違いについては説明しません。電話がより多くのコアを必要とする理由について与えられるポイント、特にゲームに関するポイントは、デスクトップコンピューターにも当てはまります。
アーロン

8
1976年のx86 CPUに関する主張は、やや誤解を招くものです。ARMコアは、わずか7年後の1983年にAcorn RISC Machineプロジェクトにさかのぼることができ、いくつかの点でより新しいことは利点です。腕。
user1937198

2
また、RISCとCISCは関係ありません。IntelCPUは内部でRISCishコアを実行します(uops)。本当の違いは、注文実行と注文実行の違いです。
user1937198

5
x86の問題はまったく間違っています。それらはスーパースカラーチップであり、基本的な実装はほとんどのARMチップで使用されている従来のRISCパイプラインほど優れた機能を発揮しません。また、コアとスーパースカラーデザインをリンクすることは、順不同の実行とキャッシュ階層のために非常に難しいことも注目に値します。彼らが何が欠けているのか誰も知らなかったので、それに対する要求は本当にありませんでした。Intelの新しいイテレーションのいくつかが高コアカウントチップに含まれていないことに気付いた場合、それらはBroadwellにあります。これは、スペースが足りず、同期データを破棄したためです。
アレックティール

15

理由は複雑であるのと同じくらい簡単です。

簡単な答えは、「携帯電話市場はかつてなかったし、Intelによって動かされていないからです」。

長い答えはここで再開するには長すぎますが、基本的な概念は、Intelが長年にわたってPC市場を支配し、支払いと腐敗(そしてこのために罰金を科せられる)が彼のCPUであるということです。 PCメーカーにとって最初で唯一の選択肢。

市場を完全に制御することで、IntelはCPU価格を膨らませながら、ユーザーが必要とする機能と処理能力を人為的に決定しました。Intelの歴史を少し分析すると、その主な強みは基本的にCPU周波数の増加。したがって、ほとんどの場合、実際にスマートで革新的なことをしようとしませんでした。「コアを追加する必要はありませんが、100 MHz高速で実行できるこのジューシーな新しいCPUがあります」と言うことができるため、それは必要ありませんでした。同時に、サーバー市場でマルチコアCPUをとてつもなく高い価格で販売することができました (サーバーは常に必要だったため使用するサーバーを実現しようとする現在の傾向があるという点まで、... 100台の安価な電話CPUが並行して動作している)

これは、並列プログラミングの重要性に追いついたことのない開発者コミュニティにも反映されているため、ほとんどの場合、多くの人が一度に複数のスレッドを使用することはありません-または、技術的な方法で、ソフトウェアに一度に複数のタスクを実行させる。ちなみに、顧客ベースの99%が最大で2つのコアを持っている場合、これは理にかなっています。悲しいことに、これは並列アルゴリズムの実装が本当に難しく、問題の小さなサブセットにのみ適用されるという伝説につながっていました。

代わりに、最終的に、モバイル市場はIntelの成功を見たことはありません。実際、Intelは通常のX86アーキテクチャとは異なる何かをしようとすることがほとんどであるため、実際はまったく逆です。そのため、市場の影響力とコントロールが不足しているため、他のCPU生産者は、PC市場以外の年齢層の標準である並列コンピューティングの方向に進んでいます。


12
正しい質問に答えているのですか?
iBug

7
@iBugこの回答は、受け入れられた回答よりもOPの質問によく当てはまります。受け入れられた答えは、正しい質問に答えていないものです。
アーロン

6
「CPUの価格を人為的に膨らませる」-> Intelが人為的に価格を高騰させている場合、競合他社が同様の価格のハードウェアを使用し、ARM搭載コンピューターがIntelハードウェアと比べてひどくひどいのはなぜですか?この知的な嫌悪感はばかげています。CPUの作成は困難です。ARMがモバイルデバイスで非常に人気を博したのは、big.LITTLEのアイデアでした。Intelの前に彼らが考案したものです。
T.サー

6
IntelはPCチップ市場を管理しておらず、長年にわたって管理していません。そして、チップ設計者がより速いクロックからより多くのコアに移行した理由は、より速いクロックがいくつかの基本的な物理的制限にぶつかっていたためです。コアの数を増やすことは、解決するのがはるかに難しい問題であったため、パフォーマンスを向上させる最も費用効果の高い方法になるまで延期しました。
ケビンクルムウィーデ

6
これは邪悪なIntelの企業についての暴言のようなもので、ARMは独立したチップメーカーにも同様にライセンスを与えているため、IMOは当然のことです。
ドミトリーグリゴリエフ

9

進行中の2つの要因があります。1つは非常に実用的で、もう1つは歴史的です。

実際的な理由は、携帯電話での混合アーキテクチャの使用です。電力消費は電話にとって重要であり、電話はパフォーマンスがほとんど必要ないモードで多くの時間を費やします。一部のコアは、パフォーマンスがほとんど必要ないときに最小の電力消費に最適化され、一部のコアは必要に応じて最大のパフォーマンスを提供するように最適化されるのが理にかなっています。

もう1つの理由は、主に歴史的なものです。2005年頃まで、デスクトップCPUはすべてシングルコアでした。デスクトップCPUのパフォーマンスを向上させることは、1秒あたり可能な限り多くの命令を実行できるコアを作成することだけでした。今日でも、多くのデスクトップソフトウェアはマルチコアを十分に活用できないため、多くの人はコアが20%遅い8コアCPUよりも4コアのCPUを好むでしょう。

単一のコアから可能な限り多くのパフォーマンスを引き出すには、大量のCPU領域が必要です。これは、そうでなければより多くのコアを提供するために使用できる不動産です。Intelの最新のKaby Lake CPUが4コアで最大になり、各コアが前世代のコアよりも高速であるため、人々が購入するのはこのためです。多くの場合、コア数の多いCPUからのアップグレードでもあります。

時間が経つにつれて、より多くのコアをサポートするように完全に最適化されたはるかに多くのデスクトップソフトウェアが登場することを期待してください。それが起こると、エンジニアリング上のトレードオフは、デスクトップ上のより高速なコアよりも多くのコアを優先し始めます。コアはほぼ確実に高速になりますが、各コアが20%遅い場合でも、4コアCPUよりも8コアCPUを好む人が出てくるでしょう。チップ設計者は市場をフォローします。


5

電話が短いバーストで計算能力を提供できることは重要です(特定のアプリを高速にする必要があります)が、過熱を避けることもできます(ラップトップやPCよりも電話の方が熱放散がはるかに困難です)。これを実現するために、アーキテクトは、ワークロードが軽いときに単一のコアを使用するように電話を設計し、必要なときにパフォーマンスを向上させるために追加のコアを提供します。電話機が使用する大きなコアの数が少ない場合、ワークロードがかなり軽い場合でも、過熱が問題になります。

出典:大学院レベルのコンピューターアーキテクチャコース。


真実が言われているように、計算能力(エネルギーという意味であれば)を短時間で提供できることは、デスクトップにとっても重要です。そのため、IntelチップにTurboBoostが搭載されています。
ドミトリーグリゴリエフ

はい、計算能力は私が意味したものです。確かに、ある時点でバースト的なワークロードを持つと予想されるすべてのデバイス(電話やデスクトップを含む)は、それを処理できる必要があります。主な違いは熱放散です。
タラアイヒャー

私はあなたが言ったことに同意しますが、バースト性のワークロードは電話に固有のものではないことを指摘したかっただけです。
ドミトリーグリゴリエフ

2

第1に、Java仮想マシンは従来、典型的なデスクトップソフトウェアよりもマルチコアの恩恵を受けることができます。Javaでシングルスレッドアプリを作成した場合でも、ガベージコレクターコードのほとんどはアプリと一緒に実行されるため、マルチコアでより高速に実行されます。

第二に、自動更新、広告ダウンロード、ウイルス対策ソフトウェア、GSMモジュールの管理など、携帯電話のバックグラウンドで多くのことが行われています。ラップトップでは、これらのすべてのタスクが1つのコアをビジーに保ちますあまり強力ではないので、レスポンシブシステムが必要な場合は、バックグラウンドタスク専用の機能を少なくとも2つ用意することをお勧めします。

最後に、マーケティングがあります。8コアの恩恵を受けるかどうかを評価できるユーザーは多くありませんが、8コアのスマートフォンは2コアまたは4コアのスマートフォンよりも確かに高価に聞こえます。


2
「ARMコアの方がはるかに強力ではありません」という言葉に沿って声明を見続けています-それはどういう意味ですか?彼らはより少ないクロック速度を持っていますか?
アブドゥル

2
1秒あたり@Abdulの少ない操作。x86チップは複数の操作を一度に実行できるため、同じクロック速度であってもARMよりも優れています。この比較を確認してください。トップARMチップ(GT-I9100)は、トップx86チップ(i7-2920XM)よりも約10倍遅いです。
ドミトリーグリゴリエフ

「1秒あたりの操作数」はFLOPSと同義ですか?
アブドゥル

@Abdul必ずしもではありません。実際、ゲームや物理シミュレーションは別として、浮動小数点はそれほど使用されません。また、多くのARMチップは精度を損なうことで適切なFLOPSを達成しているため、これも真の測定値ではありません。
ドミトリーグリゴリエフ

AndroidアプリはJava仮想マシンでは実行されません。それらはDalvik VMで実行されます
-phuclv

1

これまでの回答は、この圧倒的に多くのAndroidスマートフォンのCPUコアにつながる問題のいくつかの側面を説明しています。もう一度読んでください。Androidフォン。iPhoneは何年もの間、わずか数コアにとどまっていますが、それでもAndroidのどのフラッグシップよりもずっとスムーズに動作します。

Androidの設計者は、Javaプログラミングを選択し、その結果としてアプリケーションのランタイムとしてJVMを選択することを決定したとき、大きな賭けをしました。Javaは、その設計原理により、パフォーマンスを犠牲にすることにより、各CPUアーキテクチャで実行する前に各CPUアーキテクチャのコードをコンパイルおよびビルドする必要があるという問題を解決します。Javaは、通常JVMと呼ばれる重くてかさばる仮想マシンを導入します。JVMは実際にソフトウェアレベルでCPUをエミュレートし、デバイスごとに個別にコードをコンパイルする必要を回避します。JVMは、実行するデバイスに関係なく同じプロパティを持つ仮想CPUと考えてください。そのため、JVMに対してコードを1回コンパイルするだけで、すべてのデバイスで実行できます。これにより、メーカーはアプリケーションの互換性を心配する前に、必要なハードウェアを投げることができます。

JVM自体は単なる仕様であり、この仕様に準拠している限り、人々は独自のJVMを自由に開発できます。元のAndroid JVMはDalvikと呼ばれていました。最近、GoogleはそれをARTに置き換えました。

JVMの問題は何ですか?大量のコンピューティングリソースを消費する重いソフトウェアです。これにガベージコレクションなどのJava言語の他のプロパティを追加すると、JVMのリソース消費は、控えめなハードウェアパワーを備えたデバイスでは単純に過剰になります。デバイス上で開かれている各アプリケーションとシステムサービスは、それ自体がART JVMのインスタンスであり、これらをすべて管理するには、本当に高性能なハードウェアが必要であると結論付けることができます。ユーザーインターフェイスを描画する必要がある場合、事態はさらに悪化します。

各アプリケーションは多数のスレッドで実行されます。各CPUコアは、一度に1つのスレッドのみを実行できます。各アプリには、ユーザーインターフェイスに関連する処理を行う1つのメインスレッドがあります。ファイルアクセス、ネットワークなどを行うためのアプリケーションごとに多くのスレッドが存在する可能性があります。一般に、CPUコアよりも多くのアプリ(およびシステムサービス)が開いているため、通常はCPUコアよりもはるかに多くのスレッドがあります。したがって、各コアは異なるスレッドの処理を絶えず切り替え、各スレッドを少しずつ実行してから次のスレッドに進む必要があります。この切り替えはCPUに多くの時間を要し、アプリケーションが本質的にJVMである場合、このタスクはさらに徹底的になります。

この説明に基づいて、Androidをスムーズに実行するには強力なハードウェアが必要であると推測できます。初期のAndroidデバイスは、遅れ、クラッシュ、その他多くの不幸なことで有名でした。しかし、長年にわたり、これらの問題は強力なハードウェアに依存することでほとんど解決されてきました。

一方、iOSアプリケーションはネイティブマシンコードにコンパイルされるため、仮想化は必要ありません。使用される言語とオペレーティングシステムもより効率的であるため、過剰なチップセットを必要とせずにこれらのデバイスをスムーズに保つことができます。


これは、携帯電話がデスクトップよりもはるかに強力な理由です。それともそうではありませんか?
-maaartinus

「これにより、メーカーは、アプリケーションの互換性を心配する前に、必要なハードウェアを投げることができます。」–良い点ですが、これが(当初)カメラ向けのシステムの意図かどうかはわかりません。
v6ak

「ファイルアクセス、ネットワークなどを行うために、アプリケーションごとにさらに多くのスレッドが存在する可能性があります」-これらはむしろI / Oバインドであり、CPUをあまり消費しません。CPUはI / Oデバイスよりもはるかに高速であるため、I / Oは1つのスレッドだけで処理される場合があります。
v6ak

「初期世代のAndroidデバイスは、遅れ、クラッシュ、その他多くの不幸なことで有名でした」-そのような電話(Xperia Mini Pro)でMarshmallowを実行したことを覚えています。CPUよりも遅い理由は他にもたくさんあると思います。低RAMで実行すると、MTDなどの遅いフラッシュデバイス(一部の操作ではmicroSDカードよりもはるかに遅い)が使用され、古いAndroidでは効率の低い「JVM」(技術的にはJVMではありません)が使用されました。もちろん、より良いCPUも役立ちますが、そのような結論には程遠いでしょう。
v6ak

また、UIスレッドでI / O(またはその他の長い操作)を実行するようなプログラミングスタイルでは、CPUのパフォーマンスに関係なくアプリが遅延する可能性があります。知る限り、このスタイルは初期のAndroidアプリでは非常に一般的です。そのようなアプリは、最新の携帯電話でも遅れることがあります。おそらく遅延は少なくなりますが、それはより高速なCPUやより多くのコアよりも高速なフラッシュメモリによるものです。
v6ak

0

上記すべてを再開すると、PCと携帯電話の使用例はまったく異なると言えます。ほとんどの場合、単一またはいくつかのアプリで使用されるPC(もちろん、多くのタブを備えたブラウザーは多くのCPUコアを必要とし、トップi-3でも遅れることがあります)、マルチタスクに使用される電話。少なくともネットワーク接続、UI描画、システムトリガー、通知。PCでタスクマネージャーを開くと、多くのプロセスもありますが、古いCore 2デュオでもCPU使用率は数%未満です。4コアはかなり安価です(MTK 65x2はOEMの開始時に1ドルのコストでした)。また、コアあたりのパフォーマンスが最後に不足した場合は、リスク対CISCです。エネルギー効率の高い!=強力な、我々がここで見ることができるように。マルチコアは、深刻な重いシングルトレッドの負荷がなく、マルチタスク向けのエクスペリエンスであるため、モバイルに最適です(ただし、優れたソフトウェアにより、iPhoneで必要なコアとRAMは少ないことがわかりますこのビデオなどで


この多くは、ラップトップでも実行されることがよくあります。また、マルチタスクはCPUに負荷をかける必要はありません。製造コストの違いは、いくつかの違いを引き起こす可能性があり、ローエンドCPUのコア数が少なくなる理由かもしれませんが、すべてのi7に少なくとも4つのコアがあるわけではないのは製造コストだけだとは思いません。製造コストは、これらのCPUの価格のほんの一部にすぎないと考えています。
v6ak

@ v6ak、問題は、x86コアがより大きく、より複雑であるということです。intell(またはamd)のCPUは、トップモデルになるには不十分です。実際、それらのほとんどはいくつかの部分をブロックされ、ジュニアi7またはPentiumになります。ARMコアはそれほどトリッキーではないので、毎年あまり多くのモデルが届きません。まだ本当のオクタコアは、Samsung Exynos Octa 7xxxMTK Helio X10、最新(X30)でも少し(4)。それをします。
フリッピー

-1

4または8を超える主な要因の1つ(大きい:小さい構成の場合)は、現時点では単なるマーケティングだと思います。

コア数が多いことの大きな問題の1つは、メモリのサイズを考慮することです。通常、デスクトップアプリでは、複数のコアの使用率を向上させる場合、単一のスレッドアプリケーションよりも構造を複製し、はるかに多くのメモリを使用する必要があります。

これは、RAMが非常に高価であるため(特に2017/2018 RAM危機の状況では)発生しません。マーケティングは高い数値を望んでいますが、制御はコンポーネントの価格を下げたいと考えています。コアあたり1ギガバイト未満のRAMのバランスが見られる場合は、妥協の失敗を確認しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.