cuda资料整理(1)

from: https://bbs.csdn.net/topics/390798229?list=lz

CUDA是什么
        CUDA,Compute Unified Device Architecture的简称,是由NVIDIA公司创立的基于他们公司生产的图形处理器GPUs(Graphics Processing Units,可以通俗的理解为显卡)的一个并行计算平台和编程模型。
        通过CUDA,GPUs可以很方便地被用来进行通用计算(有点像在CPU中进行的数值计算等等)。在没有CUDA之前,GPUs一般只用来进行图形渲染(如通过OpenGL,DirectX)。
        开发人员可以通过调用CUDA的API,来进行并行编程,达到高性能计算目的。NVIDIA公司为了吸引更多的开发人员,对CUDA进行了编程语言扩展,如CUDA C/C++,CUDA Fortran语言。注意CUDA C/C++可以看作一个新的编程语言,因为NVIDIA配置了相应的编译器nvcc,CUDA Fortran一样。更多信息可以参考文献。

        如果粗暴的认为C语言工作的对象是CPU和内存条(接下来,称为主机内存),那么CUDA C工作的的对象就是GPU及GPU上的内存(接下来,称为设备内存),且充分利用了GPU多核的优势及降低了并行编程的难度。一般通过C语言把数据从外界读入,再分配数据,给CUDA C,以便在GPU上计算,然后再把计算结果返回给C语言,以便进一步工作,如进一步处理及显示,或重复此过程。
 主要概念与名称
主机
        将CPU及系统的内存(内存条)称为主机。
设备
        将GPU及GPU本身的显示内存称为设备。
线程(Thread)
        一般通过GPU的一个核进行处理。(可以表示成一维,二维,三维,具体下面再细说)。
线程块(Block)
        1. 由多个线程组成(可以表示成一维,二维,三维,具体下面再细说)。
        2. 各block是并行执行的,block间无法通信,也没有执行顺序。
        3. 注意线程块的数量限制为不超过65535(硬件限制)。
线程格(Grid)
        由多个线程块组成(可以表示成一维,二维,三维,具体下面再细说)。

线程束
        在CUDA架构中,线程束是指一个包含32个线程的集合,这个线程集合被“编织在一起”并且“步调一致”的形式执行。在程序中的每一行,线程束中的每个线程都将在不同数据上执行相同的命令。
核函数(Kernel)
        1. 在GPU上执行的函数通常称为核函数。
        2. 一般通过标识符__global__修饰,调用通过<<<参数1,参数2>>>,用于说明内核函数中的线程数量,以及线程是如何组织的。
        3. 以线程格(Grid)的形式组织,每个线程格由若干个线程块(block)组成,而每个线程块又由若干个线程(thread)组成。
        4. 是以block为单位执行的。
        5. 叧能在主机端代码中调用。
        6. 调用时必须声明内核函数的执行参数。
        7. 在编程时,必须先为kernel函数中用到的数组或变量分配好足够的空间,再调用kernel函数,否则在GPU计算时会发生错误,例如越界或报错,甚至导致蓝屏和死机。
C/C++ code?

dim3结构类型
        1. dim3是基亍uint3定义的矢量类型,相当亍由3个unsigned int型组成的结构体。uint3类型有三个数据成员unsigned int x; unsigned int y; unsigned int z;
        2. 可使用亍一维、二维或三维的索引来标识线程,构成一维、二维或三维线程块。
        3. dim3结构类型变量用在核函数调用的<<<,>>>中。
        4. 相关的几个内置变量
        4.1. threadIdx,顾名思义获取线程thread的ID索引;如果线程是一维的那么就取threadIdx.x,二维的还可以多取到一个值threadIdx.y,以此类推到三维threadIdx.z。
        4.2. blockIdx,线程块的ID索引;同样有blockIdx.x,blockIdx.y,blockIdx.z。
        4.3. blockDim,线程块的维度,同样有blockDim.x,blockDim.y,blockDim.z。
        4.4. gridDim,线程格的维度,同样有gridDim.x,gridDim.y,gridDim.z。
        5. 对于一维的block,线程的threadID=threadIdx.x。
        6. 对于大小为(blockDim.x, blockDim.y)的 二维 block,线程的threadID=threadIdx.x+threadIdx.y*blockDim.x。
        7. 对于大小为(blockDim.x, blockDim.y, blockDim.z)的 三维 block,线程的threadID=threadIdx.x+threadIdx.y*blockDim.x+threadIdx.z*blockDim.x*blockDim.y。
        8. 对于计算线程索引偏移增量为已启动线程的总数。如stride = blockDim.x * gridDim.x; threadId += stride。
函数修饰符
        1. __global__,表明被修饰的函数在设备上执行,但在主机上调用。
        2. __device__,表明被修饰的函数在设备上执行,但只能在其他__device__函数或者__global__函数中调用。
常用的GPU内存函数
cudaMalloc()
        1. 函数原型: cudaError_t cudaMalloc (void **devPtr, size_t size)。
        2. 函数用处:与C语言中的malloc函数一样,只是此函数在GPU的内存你分配内存。
        3. 注意事项:
        3.1. 可以将cudaMalloc()分配的指针传递给在设备上执行的函数;
        3.2. 可以在设备代码中使用cudaMalloc()分配的指针进行设备内存读写操作;
        3.3. 可以将cudaMalloc()分配的指针传递给在主机上执行的函数;
        3.4. 不可以在主机代码中使用cudaMalloc()分配的指针进行主机内存读写操作(即不能进行解引用)。
cudaMemcpy()
        1. 函数原型:cudaError_t cudaMemcpy (void *dst, const void *src, size_t count, cudaMemcpyKind kind)。
        2. 函数作用:与c语言中的memcpy函数一样,只是此函数可以在主机内存和GPU内存之间互相拷贝数据。
        3. 函数参数:cudaMemcpyKind kind表示数据拷贝方向,如果kind赋值为cudaMemcpyDeviceToHost表示数据从设备内存拷贝到主机内存。
        4. 与C中的memcpy()一样,以同步方式执行,即当函数返回时,复制操作就已经完成了,并且在输出缓冲区中包含了复制进去的内容。
        5. 相应的有个异步方式执行的函数cudaMemcpyAsync(),这个函数详解请看下面的流一节有关内容。
cudaFree()
        1. 函数原型:cudaError_t cudaFree ( void* devPtr )。
        2. 函数作用:与c语言中的free()函数一样,只是此函数释放的是cudaMalloc()分配的内存。
        下面实例用于解释上面三个函数
C/C++ code?

GPU内存分类
全局内存
        通俗意义上的设备内存。
共享内存
        1. 位置:设备内存。
        2. 形式:关键字__shared__添加到变量声明中。如__shared__ float cache[10]。
        3. 目的:对于GPU上启动的每个线程块,CUDA C编译器都将创建该共享变量的一个副本。线程块中的每个线程都共享这块内存,但线程却无法看到也不能修改其他线程块的变量副本。这样使得一个线程块中的多个线程能够在计算上通信和协作。
常量内存
        1. 位置:设备内存
        2. 形式:关键字__constant__添加到变量声明中。如__constant__ float s[10];。
        3. 目的:为了提升性能。常量内存采取了不同于标准全局内存的处理方式。在某些情况下,用常量内存替换全局内存能有效地减少内存带宽。
        4. 特点:常量内存用于保存在核函数执行期间不会发生变化的数据。变量的访问限制为只读。NVIDIA硬件提供了64KB的常量内存。不再需要cudaMalloc()或者cudaFree(),而是在编译时,静态地分配空间。
        5. 要求:当我们需要拷贝数据到常量内存中应该使用cudaMemcpyToSymbol(),而cudaMemcpy()会复制到全局内存。
        6. 性能提升的原因:
        6.1. 对常量内存的单次读操作可以广播到其他的“邻近”线程。这将节约15次读取操作。(为什么是15,因为“邻近”指半个线程束,一个线程束包含32个线程的集合。)
        6.2. 常量内存的数据将缓存起来,因此对相同地址的连续读操作将不会产生额外的内存通信量。
纹理内存
        1. 位置:设备内存
        2. 目的:能够减少对内存的请求并提供高效的内存带宽。是专门为那些在内存访问模式中存在大量空间局部性的图形应用程序设计,意味着一个线程读取的位置可能与邻近线程读取的位置“非常接近”。如下图:

        3. 纹理变量(引用)必须声明为文件作用域内的全局变量。
        4. 形式:分为一维纹理内存 和 二维纹理内存。
        4.1. 一维纹理内存
        4.1.1. 用texture<类型>类型声明,如texture<float> texIn。
        4.1.2. 通过cudaBindTexture()绑定到纹理内存中。
        4.1.3. 通过tex1Dfetch()来读取纹理内存中的数据。
        4.1.4. 通过cudaUnbindTexture()取消绑定纹理内存。
        4.2. 二维纹理内存
        4.2.1. 用texture<类型,数字>类型声明,如texture<float,2> texIn。
        4.2.2. 通过cudaBindTexture2D()绑定到纹理内存中。
        4.2.3. 通过tex2D()来读取纹理内存中的数据。
        4.2.4. 通过cudaUnbindTexture()取消绑定纹理内存。
固定内存
        1. 位置:主机内存。
        2. 概念:也称为页锁定内存或者不可分页内存,操作系统将不会对这块内存分页并交换到磁盘上,从而确保了该内存始终驻留在物理内存中。因此操作系统能够安全地使某个应用程序访问该内存的物理地址,因为这块内存将不会破坏或者重新定位。
        3. 目的:提高访问速度。由于GPU知道主机内存的物理地址,因此可以通过“直接内存访问DMA(Direct Memory Access)技术来在GPU和主机之间复制数据。由于DMA在执行复制时无需CPU介入。因此DMA复制过程中使用固定内存是非常重要的。
        4. 缺点:使用固定内存,将失去虚拟内存的所有功能;系统将更快的耗尽内存。
        5. 建议:对cudaMemcpy()函数调用中的源内存或者目标内存,才使用固定内存,并且在不再需要使用它们时立即释放。
        6. 形式:通过cudaHostAlloc()函数来分配;通过cudaFreeHost()释放。
        7. 只能以异步方式对固定内存进行复制操作。
原子性
        1. 概念:如果操作的执行过程不能分解为更小的部分,我们将满足这种条件限制的操作称为原子操作。
        2. 形式:函数调用,如atomicAdd(addr,y)将生成一个原子的操作序列,这个操作序列包括读取地址addr处的值,将y增加到这个值,以及将结果保存回地址addr。
常用线程操作函数
        1. 同步方法__syncthreads(),这个函数的调用,将确保线程块中的每个线程都执行完__syscthreads()前面的语句后,才会执行下一条语句。
使用事件来测量性能
        1. 用途:为了测量GPU在某个任务上花费的时间。CUDA中的事件本质上是一个GPU时间戳。由于事件是直接在GPU上实现的。因此不适用于对同时包含设备代码和主机代码的混合代码设计。
        2. 形式:首先创建一个事件,然后记录事件,再计算两个事件之差,最后销毁事件。如:
C/C++ code?


        1. 扯一扯:并发重点在于一个极短时间段内运行多个不同的任务;并行重点在于同时运行一个任务。
        2. 任务并行性:是指并行执行两个或多个不同的任务,而不是在大量数据上执行同一个任务。
        3. 概念:CUDA流表示一个GPU操作队列,并且该队列中的操作将以指定的顺序执行。我们可以在流中添加一些操作,如核函数启动,内存复制以及事件的启动和结束等。这些操作的添加到流的顺序也是它们的执行顺序。可以将每个流视为GPU上的一个任务,并且这些任务可以并行执行。
        4. 硬件前提:必须是支持设备重叠功能的GPU。支持设备重叠功能,即在执行一个核函数的同时,还能在设备与主机之间执行复制操作。
        5. 声明与创建:声明cudaStream_t stream;,创建cudaSteamCreate(&stream);。
        6. cudaMemcpyAsync():前面在cudaMemcpy()中提到过,这是一个以异步方式执行的函数。在调用cudaMemcpyAsync()时,只是放置一个请求,表示在流中执行一次内存复制操作,这个流是通过参数stream来指定的。当函数返回时,我们无法确保复制操作是否已经启动,更无法保证它是否已经结束。我们能够得到的保证是,复制操作肯定会当下一个被放入流中的操作之前执行。传递给此函数的主机内存指针必须是通过cudaHostAlloc()分配好的内存。(流中要求固定内存)
        7. 流同步:通过cudaStreamSynchronize()来协调。
        8. 流销毁:在退出应用程序之前,需要销毁对GPU操作进行排队的流,调用cudaStreamDestroy()。
        9. 针对多个流:
        9.1. 记得对流进行同步操作。
        9.2. 将操作放入流的队列时,应采用宽度优先方式,而非深度优先的方式,换句话说,不是首先添加第0个流的所有操作,再依次添加后面的第1,2,…个流。而是交替进行添加,比如将a的复制操作添加到第0个流中,接着把a的复制操作添加到第1个流中,再继续其他的类似交替添加的行为。
        9.3. 要牢牢记住操作放入流中的队列中的顺序影响到CUDA驱动程序调度这些操作和流以及执行的方式。
技巧
        1. 当线程块的数量为GPU中处理数量的2倍时,将达到最优性能。
        2. 核函数执行的第一个计算就是计算输入数据的偏移。每个线程的起始偏移都是0到线程数量减1之间的某个值。然后,对偏移的增量为已启动线程的总数。
实例程序
感兴趣的读者可以下载本书附带的示例代码点击此处下载https://developer.nvidia.com/sites/default/files/akamai/cuda/files/cuda_by_example.zip

树莓派git代理

前面写过使用trojan的socks5代理,但是上网还是需要一个https到socks5转换的软件,朋友推荐使用privoxy。

家里树莓派主要是git clone开源代码,如果不使用代理,下载代码速度太慢,家里设备都可以配置运行trojan的win10主机地址来上网。

有两点注意,其一是修改privoxy通用配置,将127.0.0.1改为0.0.0.0,就是接受本机之外的所有请求,另一个是端口,privoxy默认听的是8118端口。

在树莓派上配置git https代理为运行privoxy主机地址和端口8118就可以了,具体git配置命令见前面文章。

我已五十了 ( 写的真好)

作者:麦兴平

来源:散文悦读(ID:swyd996)

我已五十了,距一百岁不远了,弹指间我也会死去。我不奢望向老天借五百年,它不给,我也享受不起。

我只想静静地把这后五十年活好,不强求自己多有钱,多有权,多有名,多风光体面。

只希望自己活的顺心,饿不着,渴不着,有双健康的父母,有对听话的子女,有群不攀比的亲戚朋友,然后有个疼我的爱人和一个能说上心里话的知音我就满足了。

我已五十了,从太阳冉冉升起到太阳凄美的落下,我已享受了一万八千两百五十三天半了。

其间我哭过,苦过,难过,烦过,绝望过,痛苦过,失落过,辛酸过,也委屈过,我恨过,骂过,怨过,想过一死百了过,但我还是走了过来。

我不后悔一路走来的艰辛,因为有一缕暖暖的阳光,有一天灿烂的云朵,有一口新鲜的空气,有一株青绿的小草我已觉得自己很幸运了,至少我还活着,还有活到一百岁的信心和希望。

我已五十了,从生下时的一无所有,到我拥有了一万八千多个日日夜夜了。我很知足了,多少次花开花落,生离死别。

我欣赏过花的美丽,春的温馨,秋的收获,冬的苍凉,我明白花儿去了,春还会再来,我更明白,花有再开时,人无再少年。人生过半,几多感慨,几多苍凉,但我还是有很多花开的春天。

我已五十了,看淡了人世间的美丑,邪恶和善良。我也不像年轻时憎恨谁,仇视谁,看不起谁了。不是该恨的人不该恨了,不是该记的仇忘了,更不是自己变的卑微了没资格去看不起别人了。

而是我已明白了,看透了,想看开了。这个世界就没有谁对谁错,你恨的人他不一定是坏人,彼此为了彼此利益肯定就会伤到人,招来仇恨。

我们恨的,我们记仇的人相对我们来是丑恶的,卑鄙的,让人看不起的。但对他以及受他恩施的人来说他是伟大的,更是善良的。

我已五十了,成功也罢失败也罢,终究我的人生和许多成功者的人生以及失败者的人生一样已爬到了山顶。山高山低也到了一览众山小的年龄了,欣赏完风光后也该到了下山的日子了。

我已五十了,上山容易下山难,年轻时我们阳光的活着,五十了我们也应该阳光地生活。没有谁一辈子都青春着,也没有谁一辈子不会老去。

我已五十了,爱我的人也都老了,我爱的人也不年轻了。我不幻想爱情山盟海誓,只希望我的爱人能多陪陪我走走。

烦心了说说话,病了端口饭,想不通了给我一个淡淡的微笑。我不强求生活的有多雅致,只希望自己和我爱的人活的平平安安,健健康康的。

我已五十了,老爹老妈老了,疼不了,宠不了,爱不了我们了,我们应该学会放下那些年的任性,多心疼,多关爱一下他们了。他们一辈子也不容易,孩子哭了,孩子笑了,一辈子为儿为女够苦了。

我已五十了,孩子已大了,该放下的就放下了,睁一眼闭一眼让他们去闯去磨练去吧!人终究要经过什么风风雨雨。这个年龄了,没什么放下放不下的,春去了夏天会来,天也塌不了。

我已五十了,笑笑地过好每一天。许多事得之是我幸,失之是我命,一切顺其自然。

不骄不傲,淡淡地来淡淡地去,学着给自己八颗牙的微笑,揽一天灿烂的云朵,给世界一个最美的风景。

我已五十了,笑笑地走来,笑笑地走下去,天依旧蓝着,我们应该像花一样,把芬芳绽放给最绚丽的人生。是吧?

最佳proxy 代理

转:https://manateelazycat.github.io/proxy/2020/03/17/best-proxy.html

不断变化的GFW

GFW不断在变化,而我们的代理策略也要一直更新,今天把自己的代理设置全部集成写一遍,方便自己和看我博客的同学参考。

配置Trojan代理客户端

准备工作

  • 一台境外的VPS, 不需要购买域名和配置证书

VPS安装Debian 9

一般VPS都有操作系统安装服务,安装Debian 9以后,替换 /etc/apt/sources.list 文件内容为163镜像源,提升软件安装速度:

deb http://mirrors.163.com/debian/ stretch main non-free contrib
deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib

安装Trojan服务端

通过命令 ssh root@your_vps_ip 登录VPS服务器后,执行下面脚本自动安装和配置Trojan服务端:

wget -N --no-check-certificate https://raw.githubusercontent.com/mark-hans/trojan-wiz/master/ins.sh && chmod +x ins.sh && bash ins.sh

安装过程中提示“请选择证书模式”,选择”使用IP自签发证书”的模式。

启动Trojan服务端

安装完成后,使用命令systemctl start trojan-gfw 启动trojan服务端, 同时可以用命令systemctl status trojan-gfw来检查trojan服务端的状态,如果状态为active(running), 证明trojan服务端已经启动。

拷贝服务端配置文件

trojan服务端配置成功以后会在VPS的/home/trojan/目录下生成client.json和ca-cert.pem两个文件:

  • client.json 是客户端配置文件,已经按照VPS IP配置好
  • ca-cert.pem 是证书文件,已经按照VPS配置好

比如你的VPS IP为 xxx.xxx.xxx.xxx,使用下面的命令来完成拷贝服务端配置文件到本机:

scp root@xxx.xxx.xxx.xxx:/home/trojan/ca-cert.pem ./

scp root@xxx.xxx.xxx.xxx:/home/trojan/client.json ./

下载Trojan客户端

  • 首先在VPS使用命令 ping github.com, 获取 github.com 的ip地址, 比如是 192.30.253.112
  • 在本机 /etc/hosts 文件中加入 192.30.253.112 github.com , 这样访问github页面就暂时不需要FQ
  • 重启本机网络服务: sudo systemctl restart NetworkManager
  • 下载Trojan客户端: wget https://github.com/trojan-gfw/trojan/releases/download/v1.14.1/trojan-1.14.1-linux-amd64.tar.xz

下载trojan-1.14.1-linux-amd64.tar.xz后,解压文件,把ca-cert.pem和client.json拷贝到 trojan 目录下。

启动Trojan客户端

./trojan -c client.json 即可在 127.0.0.1:1080 建立本地代理连接,最后通过Chrome SwitchyOmega来配置浏览器的代理设置。

在浏览器验证可以FQ以后,你可以清除刚刚在本机 /etc/hosts 的github设置。

配置Git代理

配置Git HTTP/HTTPS代理

在 ~/.gitconfig 文件中加入以下配置:

[http]
	proxy = socks5://127.0.0.1:1080

注意,上明配置等同于命令 git config --global http.proxy 'socks5://127.0.0.1:1080'

Git不认https.proxy,设置http.proxy就可以支持 https 了。

配置Git SSH代理

在 ~/.ssh/config 文件中加入以下配置:

Host github.com
HostName github.com
User git
Port 22
ProxyCommand /usr/bin/ncat --proxy 127.0.0.1:1080 --proxy-type socks5 %h %p

配置yay代理

yay 代理有两种方式,一种是设置代理环境变量,一种是通过安装 gcc-go 替换 go 来支持 proxychains4 yay 的代理操作。 因为 gccgo 很多实现和 go 都有很大的差别,为了不影响其他 go 程序,选择第一种方式。

在 ~/.bashrc 文件中添加如下的代理配置:

export http_proxy=socks5://127.0.0.1:1080
export https_proxy=socks5://127.0.0.1:1080

配置Aria2代理

我们上面已经配置了Socks5代理,但是Aria2只支持HTTP代理, 所以我们需要通过 privoxy 来转换Socks5代理成HTTP代理:

sudo pacman -S privoxy

然后设置 /etc/privoxy/config 配置文件,比如添加下面代码到配置文件中,把在1080端口的Socks5代理转换成9888端口的HTTP代理:

forward-socks5t / 127.0.0.1:1080 .
listen-address 127.0.0.1:9888

这样aria2就可以直接用 127.0.0.1:9888 这个Http代理来下载东西了。

配置npm代理

上面配置好 HTTP 代理,可以通过下面的命令来加速npm的下载速度:

npm config set proxy=http://127.0.0.1:9888
npm config set registry=http://registry.npmjs.org

配置youtube-dl代理

youtube-dl 这个工具非常方便下载一些YouTube视频,可以使用下面的命令来通过代理下载视频:

youtube-dl --proxy socks5://127.0.0.1:1080 video_url -o /download_dir/%(title)s-%(id)s.%(ext)s

有趣的港股打新

最近开始启动美国上市中概股在香港二次上市的风潮,首当其冲的网易,然后是京东!

考虑要参与体验这个过程,也想喝口汤,六月四号在富途现金+融资200手打新网易,第二天也买入网易美股,估计会在香港11号上市前拉升。

今早看盘,美股网易上涨五个点,到了425.37美元,🐮的一腿!港股定价124-126港元,美股按照25倍拆股为港股,汇率7.75,对应港股价为131.86港元,溢价4.6%,当然要看11号之前的走势,目前我觉得打新乐观可以喝汤,关键是能中几手,如果就一手,付了利息等于没赚钱。

大股东和基金机构在上市前也希望拉高股价,短期一周内不必看空,咱美股已经盈利,想想持有时间吧,11号上市是不是继续带动美股上涨!

😄😄😄😄,希望不会被打脸哦⊙∀⊙!毕竟它是第一家,后面紧跟8号就是京东打新,网上大V们更看好京东,如果对回归第一家就猛割韭菜,后面的就不好玩了。

11号港股市场同时发行网易看空涡轮,我不懂是涡轮是什么游戏规则,周末学习。

再谈一个新闻,川普今天发布了一份备忘录,给美国金融监管机构设置了60天期限,要求在这60天内必须拿出限制中国企业在美国上市的对策,否则就要对美国金融机构提出严厉批评。~ 这是个败笔!资金流入香港,拭目以待!

研究房地产 – 摘要

1.房价对应的不仅仅是居住价值,还与户口、教育、医疗、城市公民身份等绑定。 持续上涨,无非是“人口净流入、通货膨胀、货币流入、炒作概念(比如雄安新区)”

2.核心是判断趋势处于 经济通胀周期 还是经济通缩周期?

3.房价越贵能出得起价的人就越来越少。继续涨下去能接盘的人只会越来越少,过快上涨的房价会脱离居民收入与需求。

4.观察两个数据,一个是中国人均收入和日本人均收入(或者上海和东京的人均收入对比),另一个是东京普通公寓对比上海普通公寓的价格,可以判断泡沫的严重程度。

5.没有房子就结不了婚,这个传统是不是已经改变,还是中国人观念里无法改变,可以找年轻人调研一下。

6.另外征收房产税、遗产税,两者税收是均衡财富, 增大其持有成本,让工作能力强收入高的人持有房产,引导社会价值观的有效的手段。这个观点怎样???

7.政府希望的是各行业都活跃,人们收入和消费支出增加,不仅仅是房地产一家独大,这个对政府的判断是有道理的,对公务员提出高要求了。