Vietnamen’s Weblog

Time, Chances, Diligence, Intelligence: which is the most important?

LATEST NEWS

leave a comment »

Blog has moved to vietnamen.org

Written by vietnamen

Tháng Mười Hai 8, 2009 at 8:39 chiều

Posted in 875

Vimerator – make Firefox a Vim-like browser

leave a comment »

Một số tiện ích của firefox đã bị giấu đi, để hiển thị

  1. menubar + Toolbar + Bookmark : type:          :set guioptions+=mTB
  2. hay :set go+=mTB

Nếu quên các phím tắt, dùng F1 hoặc type:         :help

hoặc cụ thể hơn là   :help ‘{option_name}’

ví dụ: :help gt          or :help:gT

:exusage

:viusage

:optionusage

Lưu các thiết lập của Vimperator

:mkv

file cấu hình lưu ở $HOME/.vimperatorrc

Gỡ bỏ Vimperator

  • type:       :extdelete Vimperator

Dừng tạm thời Vimperator

  • type:         :extdisable Vimperator

2 modes quan trọng của Vim

  • modal  (mặc định ban đầu)
  • Command-line (gõ : (colon) để sang mode này), nhấn Esc để trở lại Modal mode

một số mode khác: QuickHint-mode,

Cuộn màn hình (các phím như trong Xmonad)

  • j/k  – lên/xuống 1 hàng
  • h/l  -trái/phải
  • <Space>/<C-b> – lên/xuống 1 page
  • <C-d>/<C-u>-lên/xuống 1/2 page

Các phím Up/Down/PageUp/PgDn cũng ok

Mở trang web mới

😮 tên trang web

:to tên trang web   <mở new-tab>

:t tên trang web <mở new-tab>

Nhảy sang trang web khác

Không cần dùng chuột, ta có thể click vào đường link để nhảy sang trang web khác, dùng QuickHint-mode

Nhấn f hoặc F, rồi nhấn số thứ tự của link được hiển trị sẵn

History sites

C-o/C-i   di chuyển Back/Forward các site trên tab hiện hành

:history  – liệt kê mọi site đã duyệt trước đó của session

Di chuyển giữa các tab

gt/C-n   – next tab

gT/C-p  – previous tab

g0/g$  – first tab

d/C-w – đóng tab hiện hành

C-t    – mở tab mới

Thoát firefox

:xall (hoặc ZZ) – thoát và lưu session

:qall (hoặc ZQ) – thoát không lưu session

Duyệt thanh menu

:emenu   – duyệt menus (nếu không nhớ tham số thì nhấn TAB)

:dialog <ten menu>  – tra cứu menu cụ thể

nếu không nhớ, tra cứu với

:help :dialog

Bookmarks

:bmarks   – hiển thị mọi bookmark

:bmark  – add new bookmark

Copy

  • copy URL của trang web hiện hành, gõ   y

 

Written by vietnamen

Tháng Mười Một 13, 2009 at 12:26 chiều

Phần 7: Cấp phát bộ nhớ

leave a comment »

Sau đây ta sẽ bàn về vấn đề cấp phát bộ nhớ sao cho tối ưu. Trước hết, ta giới thiệu 2 khái niệm về chế độ cấp phát bộ nhớ là PAGED và NON-PAGED (hay PINNED) mode.

Sau đây là một số so sánh

  1. Non page locked memory:
  • CPU to GPU: 1.6 GB/sec
  • GPU to CPU: 1.4 GB/sec
  1. Page locked memory (subtracted from the OS by allocating with cudaMallocHost:
  • CPU to GPU: 3.1 GB/sec
  • GPU to CPU: 3.0 GB/sec

Cơ chế PAGED là kĩ thuật nhằm tăng tốc khả năng truy xuất bộ nhớ của DRAM. Theo cơ chế này, bộ nhớ được phân chia làm các trang (PAGE) bằng các chip DRAM đặc biệt. Việc truy xuất bộ nhớ trong cùng 1 page giảm thời gian khoảng 2 lần. Với CUDA, cudaMallocHost cấp phát

cudaError_t cudaMallocHost ( void ** ptr, size_t size )
The CPU to GPU connectivity is
provided by a x16 PCI-E bus with a maximum theoretical bandwidth
of 4 Gbps. Transfer rates are tricky to measure as they depend on
the way the data is moved. One empirical measurement with CUDA
gives the following:

The CPU to GPU connectivity isprovided by a x16 PCI-E bus with a maximum theoretical bandwidthof 4 Gbps. Transfer rates are tricky to measure as they depend onthe way the data is moved. One empirical measurement with CUDAgives the following:

References:

  1. http://grok.lsu.edu/Article.aspx?articleId=3231

Written by vietnamen

Tháng Mười Một 6, 2009 at 8:50 chiều

Công cụ dạy học và nghiên cứu

leave a comment »

Secondary school

Quantum Science Across Disciplines (QSAD):

http://qsad.bu.edu

Phần mềm giúp học sinh hiểu rõ hơn về khoa học lượng tử, với cách nhìn của một học sinh cấp 2-3.

Physics

ABINIT

http://en.wikipedia.org/wiki/ABINIT

Phần mềm

  1. tính tổng năng lượng, mật độ điện tích, cấu trúc electron của 1 hệ thống tạo bởi các electron và hạt nhân dùng DFT (density function theory), pseudopotential…
  2. tối ưu hoá cấu trúc hình học (3D) dựa vào DFT forces, stresses
  3. MD simulation

Chemoinformatics & Bioinformatics

Chemistry Development Kit (SDK)

http://sourceforge.net/apps/mediawiki/cdk/index.php?title=Main_Page

A Java library

  1. 2D structure diagram editor, layout
  2. 3D rendering
  3. support various format (Chemical Markup Language, SMILES, MDL, InChl)
  4. modeling
  5. PDB file (active site detection, sequence to connectivity table)
  6. BioJava interface

Discrete Fourier transform (DFT)

FFTW

http://www.fftw.org

C subroutine library

Written by vietnamen

Tháng Mười 21, 2009 at 1:35 chiều

Phần 6: Fortran + CUDA (2) variables

leave a comment »

Variables

Như ta đã đề cập, CUDA có nhiều cấp độ bộ nhớ, vì thế, việc chọn lựa nơi lưu trữ cũng rất quan trọng tới hiệu năng của chương trình.

  1. register (thanh ghi): (read/write) per-thread
  2. local memory: (read/write) per-thread
  3. shared memory (read/write) per block
  4. global memory (read/write) per grid
  5. constant memory (read-only) per grid
  6. texture memory (read-only) per grid

Mặc định, khi khai báo biến ở host subprogram/modules, dữ liệu được lưu trữ  ở host global memory.

Tối đa 1 trong các thuộc tính sau được khai báo với biến: device, constant, shared, pinned

Device

REAL, DEVICE :: dev_var, x(100)

real :: y
attributes(device) :: y

Một device variable có dữ liệu được lưu ở device global memory. Nó có thể được khai báo ở host subprogram hoặc device subprogram.

Nếu khai báo trong module, nó có thể được truy cập bởi mọi device subprogram trong module đó, và mọi host subproram trong module đó hoặc là subprogram có sử dụng module

Nếu khai báo trong 1 host subprogram, thì nó có thể được truy xuất từ chính subprgram đó, hoặc các subprogram chứa trong (contains) nó.

Device variables (arrays) không thể

  • có các thuộc tính POINTER, TARGET, ALLOCATABLE.
  • xuất hiện trong COMMON block
  • xuất hiện trong EQUIVALENCE statement
  • là thành viên của một kiểu mới (derived data type)

Biến hằng có thể làm đối số (actual arguments) cho một host subprogram hoặc device subprogram, với điều kiện INTERFACE tường minh, và đối số lúc định nghĩa (dummy arguments) tương ứng cũng có thuộc tính DEVICE.

Nếu là kiểu mảng (array) nó có thể là explicit-shape array, allocatable device variable, hoặc (nếu ở trong host subprogram) assumed-shaped dummy array.

Constant

Có 2 cách khai báo

real :: c(100)
attributes(constant) :: c

hoặc

real, constant :: d(100)

Dữ liệu hằng không thể

  • có các thuộc tính POINTER, TARGET, ALLOCATABLE.
  • xuất hiện trong COMMON block
  • EQUIVALENCE statement
  • là thành viên của một kiểu mới (derived data type)

Mảng (array) là hằng thì phải có kích thước cố định.

Biến hằng có thể làm đối số (actual arguments) cho một host subprogram hoặc device subprogram, với điều kiện INTERFACE tường minh, và đối số lúc định nghĩa (dummy arguments) tương ứng cũng có thuộc tính CONSTANT.

Dữ liệu hằng:

  • không thể thay đổi nếu định ra trong device subprogram
  • có thể thay đổi nội dung, nếu định ra trong host subprogram

Shared

Biến chia sẻ chỉ có thể lưu dữ liệu trên shared memory space. Vì thế, nó chỉ được khai báo trong device subprogram, và cũng chỉ có thể được truy xuất từ chính device subprogram đó, hoặc các device subprogram khác mà bản thân biến này được truyền tới dưới dạng đối số (actual argument)

có thể bị đọc/ghi từ mọi threads trong block. CHÚ Ý: khi một thread cập nhật dữ liệu lên 1 shared variable, để đảm bảo là khi thread khác đọc sẽ đọc dữ liệu mới này, ta cần đồng bộ sau khi cập nhật dữ liệu, dùng SYNCTHREADS() intrinsic function.

Dữ liệu chia sẻ không thể

  • có các thuộc tính POINTER, TARGET, ALLOCATABLE.
  • xuất hiện trong COMMON block
  • EQUIVALENCE statement
  • là thành viên của một kiểu mới (derived data type)

Mảng (array) là SHARED thì có thể dùng asumed-sized array nếu nó không  phải được khai báo là 1 dummy argument của 1 device subprogram. Vậy kích thước là bao nhiêu? điều này sẽ được qui định khi gọi kernel dùng chevron syntax với đối số thứ 3 (bytes) chỉ định số bytes ở shared memory dành cho assumed-sized array. Nếu có nhiều hơn một assumed-size array làm đối số, chúng sẽ được ngầm định là tương đương nhau, i.e. cùng bắt đầu ở cùng địa chỉ ô nhớ. Vì thế, nếu dùng nhiều hơn 1 assumed-sized array, nhà lập trình cần quản lí nó.

attributes(global) subroutine sub(y)
   real, shared :: x(4, *)
   integer :: y 
   ...
end subroutine

Nếu mảng (array) là SHARED và không phải là dummy argument + không phải assumed-sized array, thì nó phải là fixed-sized array.

Biến chia sẻ có thể làm đối số (actual arguments) cho một host subprogram hoặc device subprogram, với điều kiện INTERFACE tường minh, và đối số lúc định nghĩa (dummy arguments) tương ứng cũng có thuộc tính SHARED.

Pinned

Chỉ dành để khai báo với biến thuộc kiểu allocatable array và khai báo trong module/host subprogram.

real, allocatable, dimension(:), pinned :: x

Khi cấp phát, dữ liệu được lưu ở host page-locked memory. Ưu điểm là dữ liệu lưu ở đây sẽ được copy tới device memory nhanh hơn so với từ host normal-paged memory tới device memory. Vì giới hạn về bộ nhớ dành cho host page-locked memory là tùy hệ thống, dữ liệu không đảm bảo lưu trữ ở đây nếu vượt quá kích thước cho phép, lúc đó nó sẽ tự động lưu vào host normal-paged memory.

Pinned array có thể dùng làm đối số cho host subprogram dù INTERFACE của nó có được khai báo hay không, cũng như không phụ thuộc vào dummy argument có được khai báo là PINNED hay ALLOCATABLE hay không. Tuy nhiên, nếu giải phóng nó (deallocate) bên trong subprogram, thì dummy argument phải có khai báo là PINNED, nếu không sẽ có lỗi.

Tham khảo:

  1. CUDA Fortran programming guide and reference

Written by vietnamen

Tháng Mười 8, 2009 at 11:21 sáng

Phần 5: Fortran + CUDA (1) subprogram

leave a comment »

subprogram (Subroutine/Function)

Define

Chương trình chính sẽ luôn chạy trên host, còn các subprograms của nó có thể chạy hoặc trên host hoặc trên device. Để một subprogram của Fortran có thể chạy trên device, nó cần sử dụng thêm các từ chỉ định attributes(device)attributes(global) đi trước các từ khóa subroutine, function. Khi đó, subprogram còn có tên gọi là  1 device kernel.

  1. Subroutine: có thể dùng attributes(host), attributes(global), attributes(device) hoặc cả attributes(host, device)
  2. Function: có thể dùng host, device, hoặc cả hostdevice

NOTE:

  • Function không thể có global attribute.
  • Subprogram với attributes(hostdevice) phải nằm trong 1 module
! Host subroutine

subroutine solve( n, a, x, y )
   real, device, dimension(*) :: x, y
   real :: a
   integer :: n

! call the kernel
   call ksaxpy<<<n/64, 64>>>( n, a, x, y )
end subroutine

Invoke

Để gọi 1 kernel từ host function ta dùng cú pháp đặc biệt <<<num_block, num_thread [, bytes [, streamid]]>>> gọi là chevron syntax. Trong ví dụ trên, n chính là số lượng threads cần chạy song song cho kernel này và cũng chính là kích thước của vectors xy. Ở đây, số threads trong mỗi block luôn là 64 nên số lượng blocks là n/64.

CHÚ Ý: Nếu kích thước lớn hơn số threads song song tối đa, ta sẽ phải có chỉnh sửa đoạn code.

! Kernel definition
attributes(global) subroutine ksaxpy( n, a, x, y )
real, dimension(*) :: x,y
real, value :: a
integer, value :: n, i
i = (blockidx%x-1) * blockdim%x + threadidx%x
if( i <= n ) y(i) = a * x(i) + y(i)
end subroutin
! Kernel definition
! Scalar Alpha X Plus Y: y = ax + y
attributes(global) subroutine ksaxpy( n, a, x, y )
   real, dimension(*) :: x,y
   real, value :: a
   integer, value :: n, i

   i = (blockidx%x-1) * blockdim%x + threadidx%x
   if( i <= n ) y(i) = a * x(i) + y(i)
end subroutine

Passing dummy arguments

Với device subprograms, các dummy arrguments (scalar, array…) được MẶC ĐỊNH là truyền tham khảo (passed by reference), i.e. truyền địa chỉ – không truyền nội dung, nếu biến bị thay đổi bên trong subprogram thì giá trị bên ngoài cũng tự động được cập nhật + nơi lưu trữ là ở host memory.

Nếu đối số là giá trị đơn (scalar argument), thì có thể truyền giá trị bằng cách thêm thuộc tính VALUE vào trước khai báo biến đó (value dummy arrguments).

attributes(global) subroutine add(a, b, n)
   real, dimension(n) :: a, b
   integer, value :: n
...
end subroutine

Limitation

Device kernel (attributes(device))

  1. không được là hàm đệ qui (recursive)
  2. không chứa biến với  SAVE attribute, hay khởi tạo giá trị ban đầu (data initialization)
  3. không có đối số tùy chọn (optional arguments), i.e. đối số với giá trị khởi tạo mặc định
  4. không được là một phần (contains) trong host subprogram, subroutine hay function nào cả.
  5. bản thân nó cũng không được có chứa (contains) bất kì subroutines, functions nào.
  6. đối số (dummy argument) không được dùng assumed-shaped array và không được có pointer attribute.
  7. chỉ có thể được gọi từ host function, và dùng chevron syntax
  8. có thể có cả attributes(device) và attributes(host), lúc đó subprogram sẽ được biên dịch 2 lần, một lần cho host và một lần cho device

Kernel kernel (attributes(global))

  1. kích thước toàn bộ các đối số (dummy argument) bị giới hạn kích thước 256 bytes (nghĩa là tối đa 64 phần tử với kiểu integer(kind=4) và tối đa 32 phần tử (với kiểu integer(kind=8))
  2. không được có cả attributes(host) và attribute(global) đồng thời

Đồng thời, khi gọi subroutine đó, cần cho biết có bao nhiêu cá thể (instances) của kernel đó chạy song song. Mỗi cá thể sẽ chạy trên 1 threads độc lập. Như ta đã giới thiệu các CUDA threads được tổ chức thành từng nhóm, gọi là thread blocks. Như vậy mỗi thread sẽ có 1 global thread ID (đại diện cho thread block) và 1 local thread ID (đại diện cho thread bên trong thread block đó).

Tương tự với CUDA C, ở đây, để biết global thread ID, ta dùng biến blockidx, và local thread ID thông qua biến threadidx.

Written by vietnamen

Tháng Mười 7, 2009 at 11:37 sáng

Sự lựa chọn một màn hình LCD tốt

leave a comment »

Để có một màn hình LCD vừa ý, nó không chỉ đơn thuần là lựa chọn thương hiệu mà chính là những thông số kĩ thuật giúp ta đánh giá chính xác hơn chất lượng của một màn hình LCD (Liquid Crystal Display). Có 2 loại màn hình LCS: Passive Matrix và Active Matrix (loại sau phổ biến hơn vì tốc độ xử lí cao). Và Active Matrix dùng TFT (thin film resistor). Sau đây là một vài thông tin thu thập được

  1. Kiểu đầu vào: bắt buộc phải hỗ trợ đầu cắm DVI, chứ không phải kiểu đầu nối 15-chân D-sub. Điều này giúp bạn kết nối với các thế hệ card màn hình mới với chất lượng đồ họa cao hơn.
  2. Độ phân giải, tỉ lệ kích thước: với tỉ lệ kích thước (chiều rộng với chiều cao) là 4:3 thì ta có các độ phân giải 1600×1200, 1280×960, nếu tỉ lệ kích thước là 5:4 thì ta có độ phân giải 1280×1024.
  3. Thời gian đáp ứng: thông số này không quan trọng lắm vì bạn không thấy rõ sự khác biệt.
  4. Độ sâu màu: 6-bit (), 8-bit (16.2M màu) hay 24-bit.
  5. Độ sáng: đơn vị là ‘cd/m2’ (candela per meter squared) hay ‘nits’.
  6. Góc nhìn: với màn hình LCD mới thì thông số này không quan trọng lắm
  7. Tỉ lệ tương phản: nếu độ sáng của phần màn hình hiển thị đen là 0.5 cd/m2, và độ sáng của phần màn hình hiển thị trắng là 250 cd/m2, thì tỉ lệ tương phản 500:1. Tuy nhiên, do cách tính toán của các hãng cũng khác nhau, nên số liệu này cũng không chuẩn xác lắm.

Tổng kết lại, không nên đầu tư vào những chức năng mà mình ít dùng tới.

Thông số mẫu:

Sony SDM-S94
LCD 19″ SXGA LCD (Active Matrix)
pixel pitch: 0.294mm
Anti-glare coating
Scanning Frequency Horizontal: 28-80kHz
Vertical: 45-75Hz
Response Time 25ms (Typical)
Contrast Ratio 600:1 (Typical)
Compatibility 1280 x 1024 (Native)
Brightness 250 cd/m2
Viewing Angle 170 / 170 (Horizontal / Vertical)
Power Working: 50W
Standby/Off: 1.2W
Warranty 3 years parts and labor
Interface DVI
15-pin D-sub

Tham khảo:

  1. http://www.anandtech.com/displays/showdoc.aspx?i=2289&p=2
  2. http://www.anandtech.com/displays/showdoc.aspx?i=2289&p=10

Written by vietnamen

Tháng Mười 5, 2009 at 7:08 chiều

Posted in Linh tinh, Tin học

Tagged with , ,

Theo dõi

Get every new post delivered to your Inbox.