Intel「Atom」シリーズを終了するとアナウンスして半年、Apollo Lakeをリリース。

Intelが「Atom」シリーズを終了すると打ち出してから半年。

筆者は、このニュースを聞いた時、Atom搭載の格安のタブレットやノートPC、格安デスクトップは消滅するのかと、思っていたけど、半年経ってみるとApollo Lakeをリリースするなど、Atomシリーズが完全に廃止になる状況ではない模様。

Intelは、2016年4月19日(米国時間)に発表した大規模な人員削減計画を進めていく中で、これまで苦戦が続いていた「Atom」シリーズを終了することにより、スマートフォンタブレットなどモバイル機器向けのSoC市場から撤退していく考えであることを明らかにした。廃止予定のAtomチップとして、「SoFIA」「Broxton」「Cherry Trail」(いずれも開発コード名)などを挙げている。

Atomシリーズを終了:Intel、モバイル向けSoC事業を廃止 (1/3) - EE Times Japan

2016/09/07の時点で、“Apollo Lake”のリリースニュースが流れている。リリースされたPentium® Processor N4200は、CPUコアも強化しており、格安のノートPCに搭載されると考えられるため、当面格安のノートPC、格安デスクトップは残っていきそうと一安心。しかも、“Goldmont”は命令のデコード能力を従来の2→3命令に強化*1しており、相当大きな改良が入っていると思われる。

Apollo Lake”はエントリーレベルのタブレットやコンピュータ用として開発された第2世代の14nm SoCである。従来、これらの市場にはAtomブランドの製品が展開されていたが、“Apollo Lake”ではPentiumおよびCeleronのブランドが使用される。

Apollo Lake”に使用されるCPUは“Goldmont”と呼ばれ、“Braswell”世代から30%の性能向上を実現している。

北森瓦版 - “Apollo Lake”がひっそりとローンチされる

また、車載専用SoCとしてAtomを位置づける発表を行っており、特に、車載は市場が成長方向にあるため、デザインウインを確保できれば、長期の供給が求められる関係上、Atomシリーズが長く続くとも考えられる。まあ、IoTデバイスと言ってるのはご愛嬌ぐらいに思えばよいかと。

そのおまけとして、タブレットやノートPCにチップを供給してもらえると個人的には嬉しいなあ。

Intel Corporation(本社:アメリカリフォルニア州)は2016年10月25日(現地時間)、Apollo Lake世代のIoTデバイス向けSoC「Atom E3900」シリーズを発表した。なお、同時に車載専用SoCとして「Atom A3900」シリーズも発表。こちらはADAS(先進運転支援システム)やデジタルコクピット向けで、2017年第1四半期に出荷が開始される見込みだ。

Intel、GPU性能が約3倍に向上した“Apollo Lake”世代のIoT向けSoC「Atom E3900」シリーズ発表 - エルミタージュ秋葉原

(16:40追記)
ちょっと調べていたら、既にApollo Lake搭載のファンレスMini-ITXが発売されていた。

製品ラインナップは、最上位プロセッサPentium J4205(4コア / 定格1.50GHz / バースト時2.60GHz / キャッシュ2MB / TDP10W)を搭載する「J4205-ITX」と、Celeron J3455(4コア / 定格1.50GHz / バースト時2.30GHz / キャッシュ2MB / TDP10W)を搭載する「J3455-ITX」の2種。

Apollo Lake搭載のファンレスMini-ITX、ASRock「J4205-ITX」など2種21日発売 - エルミタージュ秋葉原

C++ templateでstd::vector もどきを実装してみる。

#include <iostream>

template <class T> class List {
public:
    List();
    List(int size);
    ~List();
    T&   operator[](int index);
private:
    T*  data;
};

template <class T> List<T>::List(int size) {
    data = new T[size];
    return;
}

template <class T> List<T>::~List() {
    delete[] data;
    return;
}

template <class T> T& List<T>::operator[](int index) {
        return data[index];
}

int main()
{
        List<int> list(4);
        list[0] = -1;
        std::cout << "Hello World!" << list[0] << std::endl;
        return 0;
}

ListVector構造に添字(インデックス)でアクセスするのが目的。
動かしてみる。

$ g++ -std=c++11 list.cpp 
$ ./a.out 
Hello World!-1

動いた!

参考:
9.8 — Overloading the subscript operator | Learn C++

2016/11/13 追記
コメントで指摘いただきましたが、紹介したコードがデータ構造上List(std::list)よりVector(std::vector)に近い構造のため、ListをVectorに修正させていただきます。

Windows7環境でVisual Stdio無しでIISとASP.NETを動かす。

Windows vista以降では.net frameworkがデフォルトでインストールされている。

実は、C#Visual Basic.NET Framework用のもの。「VB.NET」と呼ばれることもある。以降「VB」)のコンパイラーはWindowsに標準で含まれているのだ。

OSに標準付属のC#/VBコンパイラーでソースコードをコンパイルするには?:.NET TIPS - @IT

これを使ってVisual Stdio無しにローカルな環境で手軽にASP.NET(C#)を動かしたてみたく調べてみた。

結論を先に言うと動かせた。

手順

mipsel-elf-gdbのsimulatorでmipsのバイナリーを実行する

エミュレータとして知名度のあるqemu以外にも、gdbにはsimulatorが内蔵されており、簡単なバイナリーを実行できることを知ったので試してみる。

この方式の利点はbinutilsをクロスコンパイルするだけで、assemblerとsimulatorが手に入るという手軽さ。今後考えている独自CPU自作に役立ちそう。

ターゲットはRISCとして知名度のあるmipsアーキテクチャ。以下のページの手順とコードを大変参考にさせて頂いた。

[user@localhost mips]$ mips-elf-gdb -q a.out
Reading symbols from /home/user/project/mips/a.out...(no debugging symbols found)...done.
(gdb) target sim
Connected to the simulator.
(gdb) r
Starting program: /home/user/project/mips/a.out
warning: No program loaded.
[Inferior 1 (process 42000) exited with code 057]
(gdb) load

kozosのcross-gcc4でmipsアセンブリをコンパイルし、gdbのsimで実行する - ヾノ*>ㅅ<)ノシ帳
  1. 準備するもの
    1. binutils(mipselのクロスコンパイル用に作っておく)
    2. 上記ページのhello.s/mips.lds

流れはこんな感じ。上記のページとの違いはクロスコンパイル用のbinutilsのみで実行ファイルの生成とgdbによる実行を可能にしている点。

$ mipsel-elf-as hello.S -o hello.o -EB
$ mipsel-elf-ld hello.o -T mips.lds -o hello.out

無事にバイナリが出来たらgdbのtarget simでシミュレータにバイナリーを送り込んで実行させるだけ。最初"-EB"をつけていなかったのでendianの問題に嵌った。

$ mipsel-elf-gdb hello.out
GNU gdb (GDB) 7.8.50.20141223-cvs
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=mipsel-elf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from hello.out...(no debugging symbols found)...done.
(gdb) target sim
Connected to the simulator.
(gdb) load
Loading section .text, size 0x78 vma 0xffffffff80000000
Loading section .MIPS.abiflags, size 0x18 vma 0xffffffff80000078
Loading section .data, size 0xd vma 0xffffffff80000090
Start address 0xffffffff80000000
Transfer rate: 1256 bits in <1 sec.
(gdb) r
Starting program: /tmp/hello.out
Hello World
sim_monitor(17): _exit(int reason) to be coded
[Inferior 1 (process 42000) exited normally]
(gdb) q

こんな感じ。ちゃんとHello Worldと出力されている。

TD8

単純に8bit化(レジスターとバス、アドレスを拡張する)をした。

IN/OUTも8bit幅にしたので、独自に実装していたクロックカウンター表示機能は外すことに。

また、プログラム側も変更しています。というのもレジスター幅が増えレジスターの最大値が増えた(15->255)たことにより、Carryが上がる条件も変更になったので、ADDする値を増やすことに。

最初このことに気づかず?だらけになっていたのは公然の秘密。

TD4の拡張検討とTD8化

今年もあとわずかだけど、どんな案があるのか調べてみた。

単純な8bit化は簡単そうなので試してみた。