X86- ൽ സിംഡ് അണുവേളയുടെ രഹസ്യം അനാവരണം ചെയ്യുന്നു
ആധുനിക കമ്പ്യൂട്ടിംഗ് സിമിനെ (സിംഗിൾ നിർദ്ദേശം, ഒന്നിലധികം ഡാറ്റ) ആശ്രയിക്കുന്നു, പ്രകടനത്തിനുള്ള ഒപ്റ്റിമൈസേഷനായി, എന്നാൽ മൂലക നിലയിലുള്ള ശതംപം ഉറപ്പാക്കൽ ഒരു സങ്കീർണ്ണ വെല്ലുവിളിയായി തുടരുന്നു. 'ആറ്റോമിക് കൈകാര്യം ചെയ്യുമ്പോൾ
ഇന്റലിന്റെ മാനുവലുകൾ വെക്റ്റർ ലോഡുകളും സ്റ്റോറുകളും എങ്ങനെ പെരുമാറുന്നു എന്നതിനെക്കുറിച്ച് അവ്യക്തമായ മാർഗ്ഗനിർദ്ദേശം നൽകുന്നു. വിന്യസിച്ചപ്പോൾ 8-ബൈറ്റ് ആക്സസ് പൊതുവെ ആറ്റോമികമാണ്, പ്രവർത്തനങ്ങൾ വലിയ വലുപ്പങ്ങൾ സ്പാനിംഗ് ചെയ്യുന്നത് ഘടക-ബുദ്ധിമാനായ ശനിയാഴ്ചയിലെ അനിശ്ചിതത്വങ്ങൾ . ഇത് ഭാവിയിലെ പ്രൂഫിംഗ് സിംഡി പ്രവർത്തനങ്ങളെക്കുറിച്ച് നിർണായക ചോദ്യങ്ങൾ ഉയർത്തുന്നു.
സമാനമായ തിരയൽ, വെവലൈറ്റ് സംബന്ധമായ, അല്ലെങ്കിൽ മെമ്മറി ബ്ലോക്ക് പൂജ്യം ചെയ്യുന്നതുപോലെ യഥാർത്ഥ-ലോക സാഹചര്യങ്ങൾ ആറ്റോമിസിറ്റിയെക്കുറിച്ച് വ്യക്തമായ ധാരണ ആവശ്യപ്പെടുന്നു. വിമാസ്ക്മോവ്, ഒത്തുകൂടിയ നിർദ്ദേശങ്ങളിൽ കീറിപ്പോകാനുള്ള സാധ്യത, ഡാറ്റ സമഗ്രത നിലനിർത്തുന്നതിന് ചിതറിക്കിടക്കുക. ശോഭയുള്ള തെറ്റായ വ്യാഖ്യാനം അപ്രതീക്ഷിത വംശ സാഹചര്യങ്ങളിലേക്ക് നയിച്ചേക്കാം. പതനം
ഈ ലേഖനം x86 വെക്റ്റർ ലോഡ് / സ്റ്റോർ ആറ്റോസിറ്റി പര്യവേക്ഷണം ചെയ്യുന്നു , ഇന്റലിന്റെ ഡോക്യുമെന്റേഷനും യഥാർത്ഥ ഹാർഡ്വെയർ പെരുമാറ്റങ്ങളും തകർക്കുന്നു. മൂലകത്തെ തിരിച്ചുള്ള ശോഭതയെ നമുക്ക് സുരക്ഷിതമായി ഏറ്റെടുക്കാൻ കഴിയുമോ, അല്ലെങ്കിൽ നമുക്ക് സാധ്യതയുള്ള അപകടങ്ങൾ രൂപകൽപ്പന ചെയ്യേണ്ടതാണോ? നമുക്ക് വിശദാംശങ്ങളിലേക്കും വസ്തുതയെ വേർതിരിച്ചതും അനുവദിക്കാം.
ആജ്ഞാപിക്കുക | ഉപയോഗത്തിനുള്ള ഉദാഹരണം |
---|---|
std::atomic<T> | വ്യക്തമായ ലോക്കുകൾ ആവശ്യമില്ലാതെ ത്രെഡ്-സുരക്ഷിത പ്രവർത്തനങ്ങൾ ഉറപ്പാക്കുന്ന ഒരു ആറ്റോമിക് വേരിയബിൾ നിർവചിക്കുന്നു. |
std::memory_order_relaxed | സമന്വയം നടപ്പിലാക്കാതെ ഒരു ആറ്റോമിക് മൂല്യം ലോഡുചെയ്യുന്നു അല്ലെങ്കിൽ പ്രകടനം മെച്ചപ്പെടുത്തുന്നു. |
_mm256_load_si256 | മെമ്മറിയിൽ നിന്ന് 256-ബിറ്റ് വിന്യസിച്ച ഡാറ്റ മെമ്മറിയിൽ നിന്ന് സിംഡി പ്രവർത്തനങ്ങൾക്ക് ഒരു എവിഎക്സ് 2 രജിസ്റ്ററായി ലോഡുചെയ്യുന്നു. |
_mm256_store_si256 | ഒരു എവിഎക്സ് 2 ൽ നിന്ന് 256-ബിറ്റ് വിന്യസിച്ച ഡാറ്റ മെമ്മറിയിൽ രജിസ്റ്റർ ചെയ്യുക, വെക്റ്ററൈസ് ചെയ്ത പ്രോസസ്സിംഗ് നിലനിർത്തുന്നു. |
alignas(32) | 32 ബൈറ്റുകളിലേക്ക് ഒരു വേരിയബിൾ അല്ലെങ്കിൽ അറേയുടെ മെമ്മറി വിന്യാസങ്ങൾ നിർബന്ധിതമാക്കുകയും സിംഡ് എക്സിക്യൂഷൻ ഒപ്റ്റിമൈസ് ചെയ്യുകയും ചെയ്യുന്നു. |
std::thread | ഒരേസമയം ഒരു ഫംഗ്ഷൻ നടപ്പിലാക്കാൻ ഒരു പുതിയ ത്രെഡ് സൃഷ്ടിക്കുന്നു, സമാന്തര വധശിക്ഷയ്ക്ക് അത്യാവശ്യമാണ്. |
_mm256_add_epi32 | കമ്പ്യൂട്ടേഷണൽ കാര്യക്ഷമത വർദ്ധിപ്പിക്കുന്ന 256-ബിറ്റ് പായ്ക്ക് ചെയ്ത സംഖ്യ വെക്റ്ററുകളിൽ സിമ്മിംഗ് കൂട്ടിച്ചേർക്കലുകൾ നടത്തുന്നു. |
GTEST_ASSERT_EQ | Google ടെസ്റ്റ് മാക്രോ രണ്ട് മൂല്യങ്ങൾ ഉറപ്പാക്കുന്നു യൂണിറ്റ് പരിശോധനയിൽ തുല്യമാണ്, കൃത്യത പരിശോധിക്കുന്നു. |
::testing::InitGoogleTest | ഘടനാപരമായ, യാന്ത്രിക യൂണിറ്റ് പരിശോധനയ്ക്കായി Google ടെസ്റ്റ് ഫ്രെയിംവർക്ക് സമാരംഭിക്കുന്നു. |
ആഴത്തിലുള്ളതും x86- യിൽ സിംഡിനും ആഴത്തിൽ
ആദ്യത്തെ സ്ക്രിപ്റ്റ് std :: വ്യക്തമായ ലോക്കുകൾ ഇല്ലാതെ സമാന്തരമായി കണക്കുകൂട്ടലുകൾ സുരക്ഷിതമായി നിർവഹിക്കുന്നതിന് ന്റെ ഉപയോഗം പ്രദർശിപ്പിക്കുന്നു. ഒന്നിലധികം ത്രെഡുകൾ വായിച്ച് പങ്കിട്ട ഡാറ്റ വായിച്ച് എഴുതുകയും ചെയ്യുന്ന സാഹചര്യങ്ങളിൽ ഇത് നിർണായകമാണ്, ഒരു ആറ്റോമിക് അറേയിലെ പൂജ്യമല്ലാത്ത ഘടകങ്ങൾക്കായി തിരയുന്നു . `Std :: strorder_relaxted``, വ്യക്തിഗത ഘടകങ്ങളുടെ സമഗ്രത നിലനിർത്തുമ്പോൾ ഒപ്റ്റിമൈസേഷനുകൾ ഞങ്ങൾ അനുവദിക്കുന്നു. ഈ സമീപനം വളരെ പ്രയോജനകരമാണ് തത്സമയ ഡാറ്റ അജ്പീഠം കർശനമായി അപ്ഡേറ്റുകൾ സംഭവിക്കുന്ന ഇടതടക്കം സംഭവിക്കുന്നു. പതനം
രണ്ടാമത്തെ സ്ക്രിപ്റ്റ് AVX2 ഉപയോഗിച്ച് സിമിസിനെ (സിംഗിൾ നിർദ്ദേശം, ഒന്നിലധികം ഡാറ്റ) ഒപ്റ്റിമൈസേഷനുകൾ എന്നിവയിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നു. `_Mm256_load_si256`,` `mmm256_store_si256` എന്നിവയിൽ ജോലി ചെയ്യുന്നതിലൂടെ, ഞങ്ങൾക്ക് 256-ബിറ്റ് വെക്ടറുകൾ കാര്യക്ഷമമായി ലോഡുചെയ്യാനും സംഭരിക്കാനും കഴിയും, ഒന്നിലധികം സംഖ്യകളെ സമാന്തരമായി പ്രോസസ്സ് ചെയ്യാൻ കഴിയും. ഇമേജ് പ്രോസസ്സിംഗ് പോലുള്ള അപ്ലിക്കേഷനുകളിൽ ഇത് പ്രത്യേകിച്ചും ഉപയോഗപ്രദമാണ്, അവിടെ ഓരോ പിക്സൽ ഓപ്പറയും ഒരേസമയം കൈകാര്യം ചെയ്യാൻ കഴിയും. `Alignas (32) ഉള്ള മെമ്മറി വിന്യാസത്തെ ഉറപ്പാക്കുന്നു (32)` ഉയർന്ന പ്രകടനമുള്ള കമ്പ്യൂട്ടിംഗ് കൈകാര്യം ചെയ്യുമ്പോൾ ഒരു നിർണായക പരിഗണന തടയുന്നതിലൂടെ പ്രകടനം മെച്ചപ്പെടുത്തുന്നു.
ശക്തമായ സോഫ്റ്റ്വെയർ വികസനത്തിനായി, ശരിയായ യൂണിറ്റ് പരിശോധന ആവശ്യമാണ്. ആറ്റോമിക് പ്രവർത്തനങ്ങൾ പരിശോധിക്കുന്നതിന് മൂന്നാമത്തെ സ്ക്രിപ്റ്റ് Google ടെസ്റ്റ് ഫ്രെയിംവർക്ക് ഉപയോഗിക്കുന്നു. `Std :: ആറ്റോമിക്യം പരീക്ഷിക്കുന്നതിലൂടെ
X86 ആർക്കിടെക്ചറുകളിൽ വെക്റ്ററൈസ്ഡ് കമ്പ്യൂട്ടേഷണുകളുടെയും ആറ്റോമിക് പ്രവർത്തനങ്ങളുടെയും വ്യത്യസ്ത വശങ്ങളെ ഈ സ്ക്രിപ്റ്റുകൾ ഹൈലൈറ്റ് ചെയ്യുന്നു . `Std :: ആടകങ്ങളുടെ സമീപനം സുരക്ഷിതമായ ബഹുരാഷ്ട്ര ത്രെഡുചെയ്ത ആക്സസ് ഉറപ്പാക്കുന്നു, AVX2 അടിസ്ഥാനമാക്കിയുള്ള പരിഹാരം ബൾക്ക് പ്രോസസ്സിംഗ് ഒപ്റ്റിമൈസ് ചെയ്യുന്നു , ഇത് ഡാറ്റ-ഹെവി ആപ്ലിക്കേഷനുകൾക്കായി . രണ്ടും സംയോജിപ്പിച്ച് ഡവലപ്പർമാരെ സുരക്ഷാ, വേഗത ബാലൻസ് ചെയ്യാൻ അനുവദിക്കുന്നു, ആധുനിക സോഫ്റ്റ്വെയർ എഞ്ചിനീയറിംഗിലെ പ്രധാന പരിഗണനയാണ്. ഈ വിദ്യകൾ മനസിലാക്കുന്നത് കൂടുതൽ കാര്യക്ഷമവും കൺകറന്റ്, ഭാവി-പ്രൂഫ് പ്രോഗ്രാമുകളും എഴുതാൻ ഡവലപ്പർമാരെ പ്രാപ്തമാക്കുന്നു .
X86 വെക്റ്ററൈസ് ചെയ്ത പ്രവർത്തനങ്ങളിൽ ശനിവത്കരണം ഉറപ്പാക്കുന്നു
ആറ്റോമിക് വെക്റ്റർ പ്രവർത്തനങ്ങൾക്കായി C ++ ഉപയോഗിച്ച് നടപ്പാക്കൽ ബാക്കെൻഡ് ചെയ്യുക
#include <atomic>
#include <vector>
#include <iostream>
#include <thread>
std::vector<std::atomic<int>> shared_array(100);
void vectorized_sum() {
int sum = 0;
for (size_t i = 0; i < shared_array.size(); ++i) {
sum += shared_array[i].load(std::memory_order_relaxed);
}
std::cout << "Sum: " << sum << std::endl;
}
int main() {
std::thread t1(vectorized_sum);
t1.join();
return 0;
X86 വെക്റ്ററൈസ്ഡ് ലോഡിനായുള്ള ഒപ്റ്റിമൈസ് ചെയ്ത സിംഡ് സമീപനം
കാര്യക്ഷമമായ സമാന്തര പ്രോസസ്സിംഗിനായി C ++ ലെ AVX2 ആന്തരിക
#include <immintrin.h>
#include <iostream>
#include <vector>
alignas(32) int shared_array[8] = {1, 2, 3, 4, 5, 6, 7, 8};
void simd_vectorized_load() {
__m256i data = _mm256_load_si256((__m256i*)shared_array);
int result[8];
_mm256_store_si256((__m256i*)result, data);
for (int i = 0; i < 8; ++i) {
std::cout << result[i] << " ";
}
std::cout << std::endl;
}
int main() {
simd_vectorized_load();
return 0;
X86 വെക്റ്റർ പ്രവർത്തനങ്ങളിലെ ആറ്റോമിസിറ്റി ഫോർ ടെസ്റ്റിംഗ്
ആറ്റോമിക് പ്രവർത്തനങ്ങൾ സാധൂകരിക്കുന്നതിനുള്ള Google ടെസ്റ്റ് ഫ്രെയിംവർക്ക്
#include <gtest/gtest.h>
#include <atomic>
std::atomic<int> test_var(42);
TEST(AtomicityTest, LoadStoreAtomicity) {
int value = test_var.load(std::memory_order_relaxed);
ASSERT_EQ(value, 42);
}
int main(int argc, char argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
വെക്റ്ററൈസ്ഡ് x86 പ്രവർത്തനങ്ങളിൽ ഡാറ്റ സമഗ്രത ഉറപ്പാക്കുന്നു
വെക്റ്ററൈസ്ഡ് പ്രോസസിംഗിന്റെ ഒരു നിർണായക വശം x86 ൽ ഡാറ്റ സമഗ്രത ഉറപ്പാക്കുന്നു. മുമ്പത്തെ ചർച്ചകൾ ഓരോ എലൻമെന്റ് ആറ്റോമിറ്റിയിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുമ്പോൾ, മറ്റൊരു പ്രധാന പരിഗണന മെമ്മറി വിന്യാസമാണ് . തെറ്റായി അയച്ച മെമ്മറി ആക്സസ് പ്രകടന പിഴകളോ നിർവചിക്കപ്പെടാത്ത പെരുമാറ്റത്തിലേക്കും നയിക്കും, പ്രത്യേകിച്ചും AVX2, AVX-512 നിർദ്ദേശങ്ങൾ ഉപയോഗിക്കുമ്പോൾ . `അലിഗ്നാസ് (32)` അല്ലെങ്കിൽ `_mm_malloc`` അല്ലെങ്കിൽ `mmm_malloc` എന്ന് ഉറപ്പാക്കാൻ കഴിയും ഒപ്റ്റിമൽ സിഎംഡി പ്രകടനത്തിനായി മെമ്മറി ശരിയായി വിന്യസിക്കാൻ കഴിയും . ശാസ്ത്ര കമ്പ്യൂട്ടിംഗ് അല്ലെങ്കിൽ തത്സമയ ഗ്രാഫിക്സ് റെൻഡറിംഗ് പോലുള്ള ഫീൽഡുകളിൽ ഇത് പ്രത്യേകിച്ചും പ്രധാനമാണ് , അവിടെ ഓരോ ചക്രവും കണക്കാക്കുന്നു. പതനം
മറ്റൊരു വശം പലപ്പോഴും അവഗണിക്കപ്പെടുന്നു കാഷെ കോരൻസി . ആധുനിക മൾട്ടി-കോർ സിപിയുകളെ ആശ്രയിക്കുന്നു പ്രകടനം മെച്ചപ്പെടുത്തുന്നതിനായി കാഷെ ശ്രേണിയെ std :: std :: std :: strord :: stright_order_seq_cst ഉപയോഗിച്ച് കർശന ഓർഡർ ചെയ്ത്, ശാന്തമായ പ്രവർത്തനങ്ങൾ ഓർഡർ എക്സിക്യൂഷനായി അനുവദിച്ചേക്കാം , സ്ഥിരതയെ ബാധിക്കുന്നു. കൺസറന്റ് അൽഗോരിതംസ് , സമാന്തര തരംഗങ്ങൾ , , , നിങ്ങളുടെ കാഷെ സിക്നോണൈസേഷൻ കാലതാമസം വരെ അറിഞ്ഞിരിക്കണം കാഷെ സമന്വയ സാഹചര്യങ്ങളെക്കുറിച്ച് അറിഞ്ഞിരിക്കേണ്ട സാധ്യത കംപ്രഷൻ
ഒടുവിൽ, ചർച്ചചെയ്യുമ്പോൾ ശേഖരിക്കുക, ചിതറിക്കുന്ന പ്രവർത്തനങ്ങൾ , മറ്റൊരു ആശങ്ക tlb (വിവർത്തനകാരിക ലോട്ടസൈറ്റ് ബഫർ) * മെഷീൻ ലേണിംഗ് അനുമാനം അല്ലെങ്കിൽ വലിയ ഡാറ്റ അനലിറ്റിക്സ് , പതിവായി ആക്സസ് ചെയ്യാത്ത മെമ്മറി പ്രദേശങ്ങൾ പോലുള്ള വന്നിട്ടുള്ള പ്രയോഗങ്ങൾ , ഇടയ്ക്കിടെ ആക്സസ് ചെയ്യുക . `Vpgതർടിയത് 'അല്ലെങ്കിൽ` vpscatrdd' എന്നത് ഉപയോഗിക്കുന്നത് വെർച്വൽ മെമ്മറി വിവർത്തനം എങ്ങനെ പ്രകടനം നൽകുന്നുവെന്ന് മനസ്സിലാക്കേണ്ടതുണ്ട് . മെമ്മറി ലേ outs ട്ടുകൾ ഒപ്റ്റിമൈസ് ചെയ്യുന്നതിനും ഉപയോഗിക്കുന്ന രീതികളെ ഉപയോഗിക്കുന്നതിനും റാൻഡം മെമ്മറി ആക്സസ് പാറ്റേണുകളുമായി ബന്ധപ്പെട്ട പ്രകടന തടസ്സങ്ങൾ ഗണ്യമായി കുറയ്ക്കാൻ കഴിയും .
ആറ്റോമിസിറ്റിയെക്കുറിച്ചും വെക്റ്ററൈസ് ചെയ്ത പ്രവർത്തനങ്ങളെക്കുറിച്ചും പൊതുവായ ചോദ്യങ്ങൾ
- വെക്റ്ററൈസ്ഡ് x86 പ്രവർത്തനങ്ങളിലെ ഓരോ മൂലക ശനിവയും എന്താണ്?
- ഒരു സിംഡിനുള്ളിലെ ഓരോ ഘടകവും രജിസ്റ്റർ വായിക്കാനോ എഴുതാനോ ഓരോ എലത്ത് ആറ്റോമിറ്റിയും ഡാറ്റ കീറുന്നു തടയുന്നു .
- എല്ലാം avx2 , avx-512 വെക്റ്റർ ലോഡ് ചെയ്ത് ആറ്റോംസ് സ്റ്റോറുകളാണോ?
- ഇല്ല, സ്വാഭാവികമായും 8-ബൈറ്റ് , ചെറിയ ആക്സസ് എന്നിവ ആറ്റോമിക് ഉറപ്പുനൽകുന്നു. വിശാലമായ വെക്റ്റർ പ്രവർത്തനങ്ങൾ ഒന്നിലധികം മെമ്മറി ഇടപാടുകളായി വിഭജിക്കാം.
- std :: മെമ്മറി_ഓർഡർ_റെലക്സ് ആറ്റോമിക് പ്രവർത്തനങ്ങളെ ബാധിക്കുമോ?
- ഇത് ഓർഡർ out ട്ട്-ഓർഡർ എക്സിക്യൂഷന് അനുവദിക്കുന്നു ഒരു മൂലകത്തിന് ആറ്റോമിക്യം ഉറപ്പാക്കുമ്പോൾ, മൾട്ടി-ത്രെഡ് ചെയ്ത ജോലിഭാരങ്ങളിൽ പ്രകടനം ഒപ്റ്റിമൈസ് ചെയ്യുന്നു .
- എന്തുകൊണ്ടാണ് കാഷെ വിന്യാസം വെക്റ്ററൈസ്ഡ് കണക്കുകൂട്ടലുകൾക്ക് പ്രധാനമായിരിക്കുന്നത് എന്തുകൊണ്ട്?
- തെറ്റിദ്ധരിപ്പിക്കുന്ന ആക്സസ് കാഷെ പിഴകൾക്ക് , അപ്രതീക്ഷിത ലേറ്റൻസി വരെ നയിക്കും സമാന്തരമായി പ്രവർത്തനക്ഷമത കുറയ്ക്കുന്നു .
- ശേഖരിക്കുന്ന / സ്കാറ്റർ പ്രവർത്തനങ്ങൾ ഉപയോഗിക്കുന്നതിനുള്ള അപകടസാധ്യതകൾ എന്തൊക്കെയാണ്?
- അവയ്ക്ക് tlb thanashing , ഉയർന്ന മെമ്മറി ലേറ്റൻസി , പ്രത്യേകിച്ചും ക്രമരഹിതമായി വിതരണം ചെയ്ത ഡാറ്റ പോയിന്റുകൾ ആക്സസ് ചെയ്യുമ്പോൾ അവയ്ക്ക് കാരണമാകും.
വെക്റ്ററൈസ്ഡ് ശോഭയുള്ള അന്തിമ ചിന്തകൾ
എക്സ് 86 സിംഡി പ്രവർത്തനങ്ങളിൽ മൂലകത്തിൽ ആഘാതം ഉറപ്പാക്കുന്നത് പ്രകടനത്തിനും കൃത്യതയ്ക്കും നിർണ്ണായകമാണ്. നിലവിലെ നിരവധി ആർക്കിടെക്ചറുകൾ സ്വാഭാവികമായും വിന്യസിച്ച വെക്റ്റർ ലോഡുകളെ പിന്തുണയ്ക്കുന്നു, ഡവലപ്പർമാർക്ക് വലിയ വെക്റ്ററൈസ്ഡ് നിർദ്ദേശങ്ങളിൽ കീറുന്നതിനെക്കുറിച്ച് അറിഞ്ഞിരിക്കണം. മെമ്മറി വിന്യാസത്തെ ഒപ്റ്റിമൈസ് ചെയ്യുകയും ശരിയായ ആന്തരിക സന്തതികളെ സ്വാധീനിക്കുകയും ചെയ്യും.
സാമ്പത്തിക ഇടപാടുകളിൽ നിന്ന് AI കണക്കുകൂട്ടലുകളിലേക്കും ആണറ്റോറക് ഓപ്പറേഷനുകൾ യഥാർത്ഥ ലോക ആപ്ലിക്കേഷനുകൾ വരെയോ. ഇന്റലും എഎംഡിയും സിപിയുസ് ഹാൻഡം വെക്റ്റർ ലോഡുകളും സ്റ്റോറുകളും എങ്ങനെ കാര്യക്ഷമമാണ്, ഭാവി-പ്രൂഫ് നടപ്പിലാക്കുന്നുവെന്ന് മനസിലാക്കുന്നു. ആറ്റോമിസിറ്റി ഉപയോഗിച്ച് പ്രകടനം സന്തുലിതമാക്കുന്നതിലൂടെ, ഡവലപ്പർമാർക്ക് വേഗത്തിൽ നിർമ്മിക്കാൻ കഴിയും, വിശ്വസനീയമായ സോഫ്റ്റ്വെയർ. പതനം
X86 ആമേറിറ്റിനായുള്ള ഉറവിടങ്ങളും റഫറൻസുകളും
- ഇന്റൽ 64, ഐഎ -2 ആർക്കിടെക്ചറുകൾ സോഫ്റ്റ്വെയർ ഡെവലപ്പർ മാനുവൽ: ഇന്റൽ എസ്ഡിഎം
- അജ്റെനർ മൂടൽമഞ്ഞ് നിർദ്ദേശ പട്ടികകൾ - സിപിയു വധശിക്ഷയിലും മൈക്രോ ബിക്ചേർക്കിലും വിശദാംശങ്ങൾ: അജ്റെനർ മൂടൽമഞ്ഞ്
- ജെഫ് ആനിംഗ് ഉപയോഗിച്ച് x86 മെമ്മറി ക്ലോസിംഗ് മനസ്സിലാക്കുക: പ്രെസിംഗ് ബ്ലോഗ്
- ഇന്റലിന്റെ avx, avx-512 പ്രോഗ്രാമിംഗ് ഗൈഡ്: ഇന്റൽ ആന്തരിക ഗൈഡ്
- യൂണിറ്റ് ടെസ്റ്റിംഗിനായി Google ടെസ്റ്റ് ഫ്രെയിംവർക്ക് സി ++ ആറ്റോമിക് പ്രവർത്തനങ്ങൾ: Google പരിശോധന