0%

什么是BLAS

BLAS是 Basic Linear Algebra Subprograms (基本线性代数子程序)的首字母缩写,主要用来做基础的矩阵计算,或者是向量计算。它分为三级:

  • BLAS 1级,主要是向量与向量的计算
  • BLAS 2级,主要是矩阵和向量的计算
  • BLAS 3级,主要是矩阵和矩阵的计算,最典型的是A矩阵*B矩阵,得到一个C矩阵。

为什么BLAS是一个非常重要的库或者接口,是因为它是很多科学计算的核心之一。每年做超级计算机的排行榜,都要做LINPACK测试,该测试很多部分就是做BLAS 3级矩阵和矩阵的计算。此外,还有很多科学和工程的模拟,在转换后都变成了一种矩阵上的操作。如果你把矩阵优化的特别好的话,对整个应用的提升,都是非常有帮助的。

广泛用于LAPACK

阅读全文 »

什么是BLAS

BLAS是 Basic Linear Algebra Subprograms (基本线性代数子程序)的首字母缩写,主要用来做基础的矩阵计算,或者是向量计算。它分为三级:

  • BLAS 1级,主要是向量与向量的计算
  • BLAS 2级,主要是矩阵和向量的计算
  • BLAS 3级,主要是矩阵和矩阵的计算,最典型的是A矩阵*B矩阵,得到一个C矩阵。

为什么BLAS是一个非常重要的库或者接口,是因为它是很多科学计算的核心之一。每年做超级计算机的排行榜,都要做LINPACK测试,该测试很多部分就是做BLAS 3级矩阵和矩阵的计算。此外,还有很多科学和工程的模拟,在转换后都变成了一种矩阵上的操作。如果你把矩阵优化的特别好的话,对整个应用的提升,都是非常有帮助的。

广泛用于LAPACK

阅读全文 »

definition

  • catch an error at compile time: before you even try to run the program (think in java)
  • java framework

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

Throwable─┬─Exception─┬─RuntimeException─┬─IndexOutOfBoundsException
│ │ ├─NullPointerException
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ └─
│ │
│ ├─ ReflectiveOperationException─┬─NoSuchMethodException
│ │ ├─ClassNotFoundException
│ │ └─IllegalAccessException
│ │
│ │
│ │
│ ├─IOException─┬─FileNotFoundException
│ │ ├─EOFException

└─Error─┬─

RuntimeException non-RuntimeException
checked ×
occur in runtime runtime
must catch ×
caused by programmer,such as NullPointerException, IndexOutOfBoundsException external, such as FileNotFoundException
thrown during the normal operation of JVM

Compile-Time Checking of Exceptions

阅读全文 »

疑问

Java的线程是如何创建的,是直接调用OS的API,还是有自己的“抽象线程”?

java线程是映射到操作系统的内核线程上的

跟踪Thread.start()

java

阅读全文 »

简介

  • 原子量和普通变量相比,主要体现在读写的线程安全上。对原子量的是原子的(比如多线程下的共享变量i++就不是原子的),由CAS操作保证原子性。对原子量的读可以读到最新值,由volatile关键字来保证可见性。
  • 原子量多用于数据统计(如接口调用次数)、一些序列生成(多线程环境下)以及一些同步数据结构中
  • atomic是基于底层硬件的CAS做的
  • 区别于HashTable等线程安全类,这里面没有锁

以AtomicLong为例

java源码

阅读全文 »

SocketOutputStream.java

就只有这一个native方法

1
2
3
4
5
6
7
8
9
/**
* Writes to the socket.
* @param fd the FileDescriptor
* @param b the data to be written
* @param off the start offset in the data
* @param len the number of bytes that are written
* @exception IOException If an I/O error has occurred.
*/
private native void socketWrite0(FileDescriptor fd, byte[] b, int off, int len) throws IOException;

SocketOutputStream.c

路径: openjdk\jdk\src\windows\native\java\net\SocketOutputStream.c

阅读全文 »

初始化方法

在编译生成class文件时,会自动产生两个方法,一个是类的初始化方法, 另一个是实例的初始化方法
:在jvm第一次加载class文件时调用,包括静态变量初始化语句和静态块的执行
:在实例创建出来的时候调用,包括调用new操作符;调用Class或java.lang.reflect.Constructor对象的newInstance()方法;调用任何现有对象的clone()方法;通过java.io.ObjectInputStream类的getObject()方法反序列化。

init的实现

是由jvm实现的,以下是hotspot jvm实现的版本

openjdk\hotspot\src\share\vm\oops\instanceKlass.cpp
openjdk\hotspot\src\share\vm\oops\instanceKlassKlass.cpp

阅读全文 »

oop-klass model概述

HotSpot JVM并没有根据Java实例对象直接通过虚拟机映射到新建的C++对象,而是设计了一个oop-klass model。

当我们在写Java代码的时候,我们会面对着无数个接口,类,对象和方法。但我们有木有想过,Java中的这些对象、类和方法,在HotSpot JVM中的结构又是怎么样呢?HotSpot JVM底层都是C++实现的,那么Java的对象模型与C++对象模型之间又有什么关系呢?今天就来分析一下HotSpot JVM中的对象模型:oop-klass model,它们的源码位于openjdk-8/openjdk/hotspot/src/share/vm/oops文件夹内。

那么为何要设计这样一个一分为二的对象模型呢?这是因为HotSopt JVM的设计者不想让每个对象中都含有一个vtable(虚函数表),所以就把对象模型拆成klass和oop,其中oop中不含有任何虚函数,而klass就含有虚函数表,可以进行method dispatch。这个模型其实是参照的 Strongtalk VM 底层的对象模型。

jdk版本:openjdk-7-fcs-src-b147-27_jun_2011
源码路径:openjdk\hotspot\src\share\vm\oops\

阅读全文 »

字节码

String s = “abc”,并没有在堆上生成对象
Object o = new Object() 对应字节码为:

0: new           #2                  // class java/lang/Object
3: dup           
4: invokespecial #1                  // Method java/lang/Object."<init>":()V
7: astore_1   

String s = “abc” 对应字节码为:

0: ldc           #2                  // String abc
2: astore_1  
阅读全文 »