Cùng học VBLUNO - Phần 2: Tìm hiểu và so sánh khái niệm xung nhịp

Mô tả dự án: 

Tương tự như khi mua máy tính chúng ta thường chú ý đến xung nhịp (GHz) và RAM, việc quan tâm đến xung nhịp của một board mạch cũng là một điều hiển nhiên. Bài này ta cùng thí nghiệm xem xung nhịp và tốc độ xử lí của VBLUNO thế nào nha!

Xung nhịp là gì?

Xung nhịp là tốc độ mà vi xử lý thực hiện các câu lệnh trong 1 giây, thường được biểu diễn với đơn vị là tần suất (Hz). Tần suất càng cao thì các câu lệnh càng được xử lý nhanh chóng. Lấy nghịch đảo của tần suất (1/Hz) các bạn sẽ có được chu kỳ, tức là đơn vị thời gian nhỏ nhất mà vi xử lý có thể thực hiện được trên lý thuyết. Giả sử bạn có một board mạch có tần suất là 10Hz thì board mạch này sẽ xử lý 10 câu lệnh trong vòng 1 giây. Việc này đồng nghĩa với việc bạn không thể bắt board mạch này tạo 1 xung vuông ngắn hơn 0,1 giây (0.09 chẳng hạn) vì 1/0.09 ~ 11 vượt quá xung nhịp 10Hz.

Một điều quan trọng nữa là tốc độ xử lý còn phụ thuộc vào kiến trúc của vi xử lý và mục đích của board mạch. Ví dụ: để làm 1 phép nhân 2 số như 3x4 chẳng hạn, chip Intel 80286 cần đến 5 chu kỳ, trong khi chip đời sau Intel 80486 cần đúng 1 chu kỳ để làm điều này. Bài http://arduino.vn/bai-viet/254-bai-1-gioi-thieu-so-luoc-ve-intel-galileo có 1 phần khá lý thú so sánh xung nhịp giữa Intel và ARM để các bạn tham khảo. 

Thí nghiệm

Chúng ta sẽ so sánh hiệu năng tính toán của VBLUNO với 2 board nhìn tương tự là Arduino UNO và Arduino Zero bằng cách bắt chúng thực hiện 100k phép toán trong thuật toán Newton để tính giá trị của hằng số pi (3.1415...), và nhấp nháy LED mỗi 100 phép tính. 

Tên VBLUNO UNO ZERO
Hình
CHIP ARM Cortex M0 ATmega328P 32-bit ARM Cortex M0+
Xung 16 MHz 16 MHz 48 MHz

Code: (trích từ http://tronixstuff.com/2013/02/08/first-look-arduino-due/)

//
// Pi_2
//
// Steve Curd
// December 2012
//
// This program approximates pi utilizing the Newton's approximation.  It quickly
// converges on the first 5-6 digits of precision, but converges verrrry slowly
// after that.  For example, it takes over a million iterations to get to 7-8
// significant digits.
//
// I wrote this to evaluate the performance difference between the 8-bit Arduino Mega,
// and the 32-bit Arduino Due.
//

#define ITERATIONS 100000L    // number of iterations 
#define FLASH 1000            // blink LED every 1000 iterations

void setup()
{
	pinMode(13, OUTPUT);        // set the LED up to blink every 1000 iterations   Serial.begin(57600); }
}
void loop()
{
	unsigned long start, time;
	unsigned long niter = ITERATIONS;
	int LEDcounter = 0;
	boolean alternate = false;
	unsigned long i, count = 0;
	float x = 1.0;
	float temp, pi = 1.0;

	Serial.print("Beginning ");
	Serial.print(niter);
	Serial.println(" iterations...");
	Serial.println();
	start = millis();
	for ( i = 2; i < niter; i++)
	{
		x *= -1.0;
		pi += x / (2.0f * (float)i - 1.0f);
		if (LEDcounter++ > FLASH)
		{
			LEDcounter = 0;
			if (alternate)
			{
				digitalWrite(13, HIGH);
				alternate = false;
			}
			else
			{
				digitalWrite(13, LOW);
				alternate = true;
			}
			temp = 40000000.0 * pi;
		}
	}
	time = millis() - start;
	pi = pi * 4.0;

	Serial.print("# of trials = ");
	Serial.println(niter);
	Serial.print("Estimate of pi = ");
	Serial.println(pi, 10);
	Serial.print("Time: ");
	Serial.print(time);
	Serial.println(" ms");
	delay(10000);
}

Kết quả và thảo luận

  • Ta thấy UNO và VBLUNO có tốc độ tính toán ngang ngửa nhau (5556 với 5585 giây) mặc dù 1 bên là vi xử lý ARM và bên kia là vi điều khiển Atmel.
  • ZERO nhanh gấp 3 lần VBLUNO (5556/1948 ~ 3) mặc dù cùng họ ARM M0. Điều này có thể suy đoán là do VBLUNO có xung chậm gấp 3 lần ZERO (48/16 = 3).

Như vậy ta có thể kết luận rằng xung nhịp có vai trò quan trọng trong việc xử lý các câu lệnh. Tuy nhiên đây chưa là yếu tố quyết định. Bài tới chúng ta sẽ cùng tìm hiểu sâu hơn về phần cứng và độ tiêu thụ điện năng của VBLUNO.

lên
5 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 
Chuyên mục: 
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Raspberry Pi Thiên Lý Nhãn (Phần 3): Khóa thông minh nhận dạng khuôn mặt với Raspberry Pi và OpenCV

Trong bài trước tui đã giới thiệu về việc nhận diện khuôn mặt với Raspberry Pi và webcam. Tuy nhiên bài chỉ dừng lại ở việc Raspberry Pi có thể nhận diện được khuôn mặt của bất kỳ ai đứng trước webcam mà thôi. Bài toán đặt ra là làm thế nào để Raspberry Pi nhận được khuôn mặt của chính bạn? Đây là một bài toán khó và thú vị. Khó là vì chúng ta cần thuật toán và khả năng xử lí hình ảnh mạnh. Thú vị là do ta có thể "chế cháo" kết hợp với các hệ thống bảo mật khác như vân tay, mật khẩu để tăng tính an ninh cho đề án của bạn. Vì độ phức tạp của đề án này nên tui sẽ chia ra làm 2 phần.

  • Phần đầu tiên là "phần mềm": chúng ta sẽ ghi lại khoảng 200 tấm hình webcam với khuôn mặt của bạn và huấn luyện máy tính với thuật toán chính diện (eigenfaces) của OpenCV. Do tài nguyên của Pi hạn hẹp nên bạn cần chạy phần này trên máy tính của mình. 
  • Phần tiếp theo là "phần cứng": ta nối Pi với relay và cho webcam chụp ảnh. Nếu Pi nhận diện được chính khuôn mặt của bạn thì sẽ kích relay.

Lưu ý là các bạn phải tải OpenCV về trên cả Pi và máy tính. Các bạn vào đây để download code và các tập tin cần thiết nữa: https://github.com/johnkimdinh/Facial-recognition-Raspberry-Pi-OpenCV

lên
3 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 

Giới thiệu về công ty ARM

Nếu các bạn dùng Raspberry Pi thì sẽ không lạ gì với chip ARM, một dòng chip điện tử đối lập với Intel. Bài này sẽ không là về khía cạnh kỹ thuật của ARM vì tui không đủ nội công. (các bạn có thể tham khảo thêm ở đây: http://arduino.vn/bai-viet/1073-lich-su-phat-trien-cua-vi-dieu-khien-va-vi-xu-li). Thay vào đó tui viết bài đây để mọi người hiểu rõ hơn về lịch sử và chiến lược của công ty này. 

lên
10 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: