2012-05-18 34 views
8

Theo tài liệu, một hỗ trợ nguyên tử T có kiểu số nguyên, loại điều tra hoặc loại con trỏ. Intel TBB có hỗ trợ phao/đôi chính thức không? Tôi đã thấy một số bản vá lỗi here và bởi Raf Schietekat here, có thể/có thể không được tích hợp vào bản phát hành 4.0 mới nhất. Từ các bản vá lỗi tôi đã đọc qua, sự khác biệt lớn duy nhất tôi nhận thấy là việc bổ sung reinterpret_cast từ kiểu số nguyên vào float/double. Nếu bất cứ ai có thể làm rõ điều này, tôi sẽ đánh giá cao nó. Cảm ơn!Nguyên tử đôi/phao nổi trong Intel TBB

Trả lời

1

Bạn có thể dễ dàng thêm hỗ trợ cho các số dấu phẩy động xây dựng trên các số nguyên nguyên 64 và 32 bit. Tải nguyên tử/lưu trữ/trao đổi có thể được thực hiện dưới dạng trình bao bọc trực tiếp bằng cách sử dụng reinterpret_cast, các phép tính số học nguyên tử có thể được thực hiện bằng cách sử dụng vòng lặp với trao đổi so sánh nguyên tử.

1

C++ 11 hỗ trợ phao nguyên tử và tăng gấp đôi. Tuy nhiên, các hàm số học như std::atomic_fetch_add chỉ được hỗ trợ cho các loại tích phân.

Nếu bạn có trình biên dịch C++ 11, tôi khuyên bạn nên chuyển sang std::atomic để bạn không phải dựa vào hành vi không có giấy tờ.

+1

Cũng đáng chú ý là các hàm số học có thể được mô phỏng một cách dễ dàng và hiệu quả với 'std :: atomic'. –

+0

Thú vị. Cách tốt nhất để làm điều đó là gì? Nó là một vòng lặp so sánh và trao đổi? (Lấy giá trị hiện tại và cố gắng trao đổi nó với kết quả mới. Nếu nó không thành công vì giá trị đã được thay đổi, thử lại.) –

+0

Đúng, đó là cách. –

0

Thử nghiệm cho các loại không tách rời trong test_atomic.cpp đã được thêm vào năm 2008 (ngay sau thời điểm thảo luận với Raf). Vì vậy kể từ khi còn sớm hơn thời gian của câu hỏi, TBB hỗ trợ float & nguyên tử kép (mặc dù bị hạn chế chỉ fetch_and_store và compare_and_exchange chỉ đọc-sửa-viết ops).

Các vấn đề liên quan