Khó hơn nhiều để phát triển các cuộc đua dữ liệu thực sự bất chính với một CPU. Ý tôi là, chắc chắn, bạn có thể thoát khỏi việc xé giữa các từ nếu bạn làm gián đoạn một CPU, nhưng bạn có thể xây dựng các kịch bản kỳ lạ khi không có các luồng xen kẽ nào làm những gì bạn muốn không?
Được rồi, có thể làm cho các lỗi xảo quyệt không được tính là sử dụng hợp lệ các tiến bộ đa mã. Hóa ra, không có nhiều đột biến mà lõi đơn có thể làm được mà lõi đơn không thể có thời gian. Lý do rất đơn giản. Nếu bạn cố gắng tránh các cuộc đua dữ liệu xấu đó, bạn phải có các điểm đồng bộ hóa trong mã của mình. Nếu bạn lập mô hình mã của mình dưới dạng một mạng tính toán trong đó các đầu vào phải được hoàn thành và đồng bộ hóa trước khi bạn có thể tính toán và tạo đầu ra, thì dễ dàng thấy rằng một CPU đơn giản có thể hoạt động theo cách của chúng dọc theo mạng, tính toán khối công việc có sẵn tiếp theo .
Trên thực tế, nếu bạn có thể chứng minh rằng thuật toán của bạn có thể được giải quyết bằng máy Turing (hầu như mọi thuật toán chúng tôi quan tâm), có thể chứng minh rằng thuật toán có thể được thực hiện không chỉ bởi một CPU lõi đơn, mà trên thực tế là máy trạng thái với một đoạn băng rất dài cho bộ nhớ!
Trình phát hiện cuộc đua CHESS thực sự tận dụng điều này để tìm trường hợp cuộc đua. Nó chạy mọi thứ đơn lẻ và khám phá một cách có hệ thống tất cả các xen kẽ có thể giữa các luồng, cố gắng tìm các trường hợp trong đó một bài kiểm tra thất bại vì một trường hợp đua. CHESS phụ thuộc vào thực tế là bạn có thể chạy bất kỳ ứng dụng đa luồng nào trên một lõi đơn.
Các trường hợp bạn cần đa lõi xuất hiện khi bạn bắt đầu kéo dài giới hạn của phần cứng. Một điều hiển nhiên là khi bạn gặp khó khăn về thời gian. Một số vấn đề với các ràng buộc thời gian thực là không thể thực hiện lõi đơn vì đơn giản là chúng không thể điều khiển đồng hồ của một lõi đủ nhanh. Có một lý do CPU tăng lên đến 4Ghz và sau đó ổn định một chút, thích nhiều lõi hơn ở tốc độ thấp hơn.
Một phiên bản kỳ lạ hơn của ràng buộc thời gian này là trong các hệ thống thời gian thực cứng. Trong một số hệ thống thời gian thực cứng, dịch vụ ngắt rất khắt khe đến mức bạn thực sự phải chọn CPU đa lõi cho phép bạn phân chia các ngắt trên các lõi hoặc bạn gặp phải các giới hạn về thời gian.
Một giới hạn khác phát sinh với các bus dữ liệu. Hãy xem xét Blue Gene / P làm ví dụ. JUGENE, một siêu máy tính Blue Gene / P đặc biệt, có bộ nhớ 144 terabyte . Họ chỉ đơn giản là không tạo ra các máy tính CPU đơn có thể truy cập tất cả bộ nhớ đó.