Tôi luôn luôn tìm thấy thuật ngữ "tối ưu hóa vi mô", khá mơ hồ. Nếu một số thay đổi ở cấp độ hướng dẫn đối với bố cục bộ nhớ và các mẫu truy cập làm cho thứ gì đó nhanh hơn 80 lần từ một chuyên gia có kỷ luật đo các điểm nóng của họ mà không làm giảm độ phức tạp thuật toán, đó có phải là "tối ưu hóa vi mô" không? Đối với tôi đó là một "tối ưu hóa lớn" để làm cho một cái gì đó nhanh hơn 80 lần trong trường hợp sử dụng trong thế giới thực. Mọi người có xu hướng nói về những điều này như tối ưu hóa như vậy có hiệu ứng vi mô.
Tôi không còn làm việc trong gamedev nữa nhưng tôi làm việc ở VFX trong các lĩnh vực như theo dõi đường đi và tôi đã thấy nhiều triển khai của các cây BVH và KD ngoài đó xử lý ~ 0,5 triệu tia mỗi giây trên một cảnh phức tạp (và điều này là với đánh giá đa luồng). Nói một cách đơn giản, tôi có xu hướng thấy việc triển khai một BVH đơn giản trong bối cảnh chiếu tia ở mức dưới 1 triệu tia / giây ngay cả với đánh giá đa luồng. Ngoại trừ Embree có một BVH có thể xử lý hơn 100 triệu tia trên cùng một cảnh với cùng một phần cứng.
Điều đó hoàn toàn do "tối ưu hóa vi mô" mà Embree nhanh hơn 200 lần (cùng thuật toán và cấu trúc dữ liệu), nhưng tất nhiên lý do nó nhanh hơn nhiều là vì các nhà phát triển tại Intel đứng sau các chuyên gia dựa vào trình biên dịch và đo lường của họ và thực sự điều chỉnh các lĩnh vực quan trọng. Họ không thay đổi mã từ bỏ linh cảm và cam kết thay đổi đã cải thiện 0,000000001% với chi phí giảm đáng kể khả năng bảo trì. Đây là những tối ưu hóa rất chính xác được áp dụng trong những bàn tay khôn ngoan - chúng có thể là kính hiển vi về trọng tâm nhưng vĩ mô về mặt hiệu quả.
Đương nhiên với các yêu cầu về tốc độ khung hình thời gian thực của các trò chơi, tùy thuộc vào mức độ bạn đang làm việc với công cụ trò chơi (thậm chí các trò chơi được tạo bằng UE 4 thường được thực hiện ít nhất một phần trong kịch bản cấp cao, nhưng không, nói, những phần quan trọng nhất của động cơ vật lý), tối ưu hóa vi mô trở thành một yêu cầu thực tế trong một số lĩnh vực nhất định.
Một lĩnh vực rất cơ bản khác bao quanh chúng ta hàng ngày là xử lý hình ảnh, như làm mờ hình ảnh độ phân giải cao trong thời gian thực và có thể thực hiện các hiệu ứng khác trên chúng như một phần của quá trình chuyển đổi mà có lẽ chúng ta đã thấy ở đâu đó, thậm chí có thể là hiệu ứng hệ điều hành. Bạn không nhất thiết phải thực hiện các thao tác hình ảnh như vậy từ việc lặp lại qua tất cả các pixel của hình ảnh và mong đợi kết quả thời gian thực như vậy với tốc độ khung hình phù hợp. Nếu đó là CPU, chúng ta thường nhìn vào SIMD và một số điều chỉnh vi mô, hoặc chúng ta đang xem các trình tạo bóng GPU có xu hướng yêu cầu một loại tư duy cấp vi mô để viết hiệu quả.
Nếu có, khi phần cứng được cải thiện, chúng ta có nên hy vọng các ngôn ngữ cấp cao hơn sẽ chiếm lĩnh ngành công nghiệp game?
Tôi khá nghi ngờ rằng những tiến bộ phần cứng một mình có thể làm điều đó, bởi vì khi phần cứng tiến bộ, thì các hướng dẫn và công nghệ (ví dụ: vật lý trên GPU) cũng như các kỹ thuật và mong đợi của khách hàng về những gì họ muốn thấy và cạnh tranh, những cách thường khiến các nhà phát triển trở lại cấp thấp, như với ngay cả trường hợp các nhà phát triển web hiện đang viết các trình tạo bóng GLSL cấp thấp trong WebGL (phát triển web thuộc loại đặc biệt này thậm chí còn ở cấp độ thấp hơn so với một hoặc hai thập kỷ trước, vì GLSL là một ngôn ngữ giống như cấp độ C cực kỳ thấp và tôi không bao giờ có thể đoán được một hoặc hai thập kỷ trước rằng một số nhà phát triển web sẽ chấp nhận viết các trình tạo bóng GPU cấp thấp như vậy).
Nếu có một cách để các khu vực quan trọng về hiệu suất chuyển sang các ngôn ngữ cấp cao hơn, thì nó sẽ phải đến nhiều hơn từ phần mềm và trình biên dịch và các công cụ mà chúng tôi có sẵn như tôi thấy. Vấn đề với tôi trong bất kỳ tương lai gần nào không phải là phần cứng không đủ mạnh. Nó liên quan nhiều hơn đến cách chúng ta không thể tìm cách nói chuyện hiệu quả nhất mỗi khi nó thay đổi và tiến lên mà không cần quay trở lại ngôn ngữ của chính mình. Đây thực sự là tốc độ thay đổi phần cứng nhanh chóng khiến cho việc lập trình cấp cao trở nên khó nắm bắt đối với các lĩnh vực này như tôi thấy, vì nếu theo giả thuyết, phần cứng của chúng ta đã ngừng phát triển trong những thập kỷ sau,
Vui thay, những ngày này, khi tôi làm việc trong các lĩnh vực quan trọng về hiệu năng thực sự, tôi phải suy nghĩ phần nào mức độ thấp hơn so với khi tôi bắt đầu (mặc dù tôi đã bắt đầu trong kỷ nguyên Borland Turbo C DOS). Bởi vì hồi đó bộ đệm CPU gần như không tồn tại. Nó chủ yếu chỉ là DRAM và các thanh ghi, điều đó có nghĩa là tôi có thể tập trung nhiều hơn vào độ phức tạp thuật toán và viết các cấu trúc được liên kết như cây theo cách rất đơn giản mà không ảnh hưởng nhiều đến hiệu suất. Ngày nay, các chi tiết cấp thấp của bộ đệm CPU chi phối suy nghĩ của tôi gần như bằng chính thuật toán. Và tương tự như vậy, chúng ta có các máy đa lõi phải khiến chúng ta phải suy nghĩ về đa luồng và nguyên tử và đột biến và an toàn luồng và cấu trúc dữ liệu đồng thời, v.v. trong, không quá trực quan của con người) so với khi tôi bắt đầu.
Điều kỳ lạ đó dường như rất đúng với tôi bây giờ. Tôi nghĩ rằng tôi bị ảnh hưởng nhiều hơn bởi sự phức tạp và chi tiết cấp thấp của phần cứng ngày nay so với 30 năm trước, cố gắng hết sức để tháo kính hoài cổ. Tất nhiên chúng tôi có thể đã nói một chút về lắp ráp ở đây và phải đối phó với một số chi tiết đẫm máu như XMS / EMS. Nhưng đối với hầu hết các phần tôi muốn nói rằng có ít sự phức tạp và nhận thức về phần cứng và trình biên dịch mà tôi yêu cầu trước đó so với hiện tại khi tôi làm việc trong các lĩnh vực quan trọng về hiệu năng. Và điều đó gần như đúng với toàn bộ ngành công nghiệp nếu chúng ta gạt sang một bên như viếtif/else
báo cáo theo cách dễ hiểu hơn một chút về con người và xem xét số lượng người nói chung ngày nay đang nghĩ nhiều hơn về các chi tiết phần cứng cấp thấp hơn (từ nhiều lõi đến GPU đến SIMD đến bộ đệm CPU và các chi tiết bên trong về cách trình biên dịch / trình thông dịch của họ / thư viện làm việc và vv).
Cấp cao! = Ít hiệu quả
Quay trở lại câu hỏi này:
Nếu có, khi phần cứng được cải thiện, chúng ta có nên hy vọng các ngôn ngữ cấp cao hơn sẽ chiếm lĩnh ngành công nghiệp game?
Đối với tôi nó không phải là về phần cứng. Đó là về tối ưu hóa và các công cụ. Khi tôi bắt đầu, mọi người thực tế đã viết tất cả các trò chơi trên máy console, và có một lợi thế hiệu năng thực sự sau đó đặc biệt là do thiếu trình biên dịch chất lượng tạo ra 6502.
Khi tối ưu hóa trình biên dịch C trở nên thông minh hơn trong việc tối ưu hóa, sau đó chúng bắt đầu đạt đến điểm mà mã cấp cao hơn được viết bằng C đang cạnh tranh và đôi khi còn vượt trội hơn mã được viết bởi các chuyên gia lắp ráp tốt nhất trong nhiều lĩnh vực (mặc dù không phải lúc nào) điều đó khiến cho nó trở thành một kẻ không có trí tuệ khi áp dụng C cho ít nhất là phần lớn mã hóa cho một trò chơi. Và một sự thay đổi tương tự dần dần xảy ra tại một số điểm với C ++. Việc áp dụng C ++ chậm hơn vì tôi nghĩ rằng việc tăng năng suất từ lắp ráp sang C có thể đạt được thỏa thuận nhất trí từ các game thủ viết các trò chơi không tầm thường hoàn toàn trong ASM, trái ngược với việc chuyển từ C sang C ++.
Nhưng những thay đổi này không đến từ phần cứng trở nên mạnh mẽ hơn nhiều vì các trình tối ưu hóa cho các ngôn ngữ này sẽ khiến mức độ thấp hơn (mặc dù không phải lúc nào cũng hoàn toàn, có một số trường hợp tối nghĩa) đã lỗi thời.
Nếu bạn có thể tưởng tượng một kịch bản giả thuyết trong đó chúng ta có thể viết mã ở mã cấp cao nhất có thể tưởng tượng được, không phải lo lắng về đa luồng hoặc GPU hoặc bộ nhớ cache hoặc bất cứ điều gì tương tự (có thể không phải là cấu trúc dữ liệu cụ thể), và trình tối ưu hóa giống như trí thông minh nhân tạo thông minh và có thể tìm ra cách bố trí bộ nhớ hiệu quả nhất sắp xếp lại và nén dữ liệu của chúng tôi, tìm ra nó có thể sử dụng một số GPU ở đây và ở đó, song song một số mã ở đây và ở đó, sử dụng một số SIMD, có thể tự cấu hình và tiếp tục tối ưu hóa IR của nó như con người chúng ta đã phản ứng với các điểm nóng hồ sơ, và nó đã làm điều đó theo cách đánh bại các chuyên gia giỏi nhất thế giới, thì sẽ không có gì phải đắn đo ngay cả với những người làm việc trong các lĩnh vực quan trọng nhất về hiệu suất để áp dụng nó ... và đó là một tiến bộ đến từ tối ưu hóa thông minh lố bịch, không phải phần cứng nhanh hơn.