
როგორ ითვლიდა Intel 8087 ტანგენსს: CORDIC-ზე მეტი
კენ შირიფმა Intel 8087-ის კრისტალისა და მიკროკოდის შესწავლით დაადგინა, რომ FPTAN ინსტრუქცია CORDIC-ს Padé-ს რაციონალურ მიახლოებასთან აერთიანებდა, რითაც 64-ბიტიან სიზუსტეს მიაღწია.
მათემატიკური თანაპროცესორი 8087 Intel-მა 1980 წელს გამოუშვა და IBM PC-ში მცურავი წერტილის არითმეტიკა მკვეთრად დააჩქარა: ტანგენსი დაახლოებით 90 მიკროწამში ითვლებოდა, 8086-ზე კი 13 000 მიკროწამი სჭირდებოდა. კენ შირიფმა ჩიპის კრისტალი და მიკროკოდი შეისწავლა და FPTAN ინსტრუქციის ალგორითმი აღადგინა: საქმე მხოლოდ CORDIC-ით არ შემოიფარგლებოდა.
CORDIC: B-58-დან 8087-მდე
ჩიპი CORDIC-ს იყენებდა, რომელიც ჯეკ ვოლდერმა 1956 წელს B-58 Hustler-ის ბომბდამშენისთვის შექმნა. ალგორითმს მხოლოდ ცვლა, შეკრება და წინასწარ გამოთვლილი სპეციალური კუთხეების ცხრილი (arctan(2^-n)) სჭირდება, გამრავლებისა და გაყოფის გარეშე: ვექტორის (1, 0) ამ კუთხეებით ბრუნვა იძლევა წერტილს (X, Y), ტანგენსი კი Y/X-ია.

რატომ რაციონალური მრავალწევრი
CORDIC-ის 16 ნაბიჯი დაახლოებით 16 ბიტს იძლევა, 64 ბიტს კი 64 ნაბიჯი დასჭირდებოდა. ამიტომ 8087 პატარა ნარჩენ კუთხეს (დაახლოებით 2^-16) Padé-ს მიახლოებით ითვლის: ეს 3x/(3-x²) ფარდობაა, რომლის ცდომილება x⁴-ის პროპორციულია და 2^-64-ზე დაბლა რჩება. ორი მრავალწევრის ფარდობა ტანგენსს ტეილორის მწკრივზე უკეთ ერგება, რადგან ფუნქცია π/2-ზე უსასრულობისკენ მიისწრაფვის; FPTAN კი მრიცხველსა და მნიშვნელს ცალ-ცალკე აბრუნებს, ამიტომ გაყოფა არაფერი ღირს.
მიკროკოდის სამი ეტაპი
მიკროკოდის ROM 1648 მიკროინსტრუქციას ინახავს, FPTAN კი #1039 მისამართიდან იწყება. ფსევდოგაყოფა შეყვანილ კუთხეს ცხრილში შენახულ CORDIC კუთხეებს ადარებს და გადაწყვეტილებებს 16-ბიტიან ცვლის რეგისტრში წერს; 0,95 რადიანისთვის მიიღება მიმდევრობა 10010101 00100111. შემდეგ რაციონალური მიახლოება მოდის, ბოლოს კი ფსევდოგამრავლება: ბრუნვები ცვლებითა და შეკრებით სრულდება, საპირისპირო რიგით, უმცირესიდან დაწყებული, რომ დამრგვალების ცდომილება შემცირდეს. გამოთვლები 64-ბიტიან მთელ რიცხვებზე მიდის, იმპლიციტური ექსპონენტებით, ყველაზე ძვირი ნაბიჯი კი კუთხის კვადრატში აყვანაა.

აპარატურა და წარმადობა
რიცხვები 80-ბიტიან „temporary real“ ფორმატში ინახება: ნიშნის ბიტი, 15-ბიტიანი წანაცვლებული ექსპონენტი და 64-ბიტიანი მანტისა; სტეკის თითოეულ რეგისტრს ტეგი აქვს: zero, valid, special ან empty. FPTAN ჩვეულებრივ 450 ტაქტს იკავებს; 0,95-ისთვის დროის 33% ფსევდოგაყოფაზე მოდის, 15% რაციონალურ მრავალწევრზე, 47% ფსევდოგამრავლებაზე, 5% სხვა ხარჯებზე. Pentium-ისთვის Intel-მა მრავალწევრულ მიახლოებებზე გადაინაცვლა.
კვლევა „Opcode Collective“-ის წევრებთან ერთად ჩატარდა: ROM-ის გამოსახულებები მანქანური სწავლების კლასიფიკატორით მიკროკოდის მონაცემებად გადააქციეს.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.