คำถามติดแท็ก x86

x86 เป็นสถาปัตยกรรมที่มาจาก CPU Intel 8086 ตระกูล x86 ประกอบด้วยสถาปัตยกรรม 32 บิต IA-32 และ 64 บิต x86-64 รวมถึงสถาปัตยกรรม 16 บิตแบบเดิม คำถามเกี่ยวกับคำถามหลังควรติดแท็ก [x86-16] และ / หรือ [emu8086] ใช้แท็ก [x86-64] หากคำถามของคุณเฉพาะกับ x86-64 64 บิต สำหรับ x86 FPU ให้ใช้แท็ก [x87] สำหรับ SSE1 / 2/3/4 / AVX * ยังใช้ [sse] และ [avx] / [avx2] / [avx512] ตัวใดก็ได้

10
การแทนที่ตัวนับลูป 32 บิตเป็น 64 บิตจะนำเสนอการเบี่ยงเบนประสิทธิภาพที่บ้าคลั่งด้วย _mm_popcnt_u64 บน Intel CPUs
ฉันกำลังมองหาวิธีที่เร็วที่สุดในการจัดpopcountเก็บข้อมูลขนาดใหญ่ ฉันพบลักษณะพิเศษที่แปลกมาก : การเปลี่ยนตัวแปรลูปจากunsignedเป็นuint64_tทำให้ประสิทธิภาพลดลง 50% บนพีซีของฉัน เกณฑ์มาตรฐาน #include <iostream> #include <chrono> #include <x86intrin.h> int main(int argc, char* argv[]) { using namespace std; if (argc != 2) { cerr << "usage: array_size in MB" << endl; return -1; } uint64_t size = atol(argv[1])<<20; uint64_t* buffer = new uint64_t[size/8]; char* charbuffer = …

11
รหัส C ++ สำหรับการทดสอบการคาดคะเนของ Collatz เร็วกว่าชุดประกอบที่เขียนด้วยมือ - ทำไม?
ฉันเขียนโซลูชันทั้งสองนี้สำหรับProject Euler Q14ในแอสเซมบลีและใน C ++ พวกมันเหมือนกันกับวิธีเดรัจฉานแรงแบบเดียวกันสำหรับการทดสอบการคาดคะเนของโคลลาตซ์ โซลูชันการประกอบถูกประกอบด้วย nasm -felf64 p14.asm && gcc p14.o -o p14 คอมไพล์ด้วย C ++ g++ p14.cpp -o p14 การชุมนุม p14.asm section .data fmt db "%d", 10, 0 global main extern printf section .text main: mov rcx, 1000000 xor rdi, rdi ; max i xor rsi, rsi …


15
ฉันจะทราบได้อย่างไรว่าแอสเซมบลี. NET นั้นถูกสร้างขึ้นสำหรับ x86 หรือ x64 หรือไม่
ฉันมีรายชื่อชุดประกอบ. NET ฉันต้องตรวจสอบโดยทางโปรแกรมว่า DLL แต่ละตัวถูกสร้างขึ้นสำหรับ x86 (ตรงข้ามกับ x64 หรือ CPU ใด ๆ ) เป็นไปได้ไหม
327 .net  assemblies  x86  64-bit  x86-64 

4
การยกเลิกโปรแกรมสำหรับขั้นตอนการทำงานใน CPU ตระกูล Intel Sandybridge
ฉันกำลังใช้สมองของฉันเป็นเวลาหนึ่งสัปดาห์เพื่อพยายามทำงานนี้ให้เสร็จและฉันหวังว่าจะมีใครบางคนที่นี่สามารถพาฉันไปสู่เส้นทางที่ถูกต้อง ให้ฉันเริ่มต้นด้วยคำแนะนำของผู้สอน: การมอบหมายของคุณตรงข้ามกับการมอบหมายห้องปฏิบัติการครั้งแรกของเราซึ่งเป็นการเพิ่มประสิทธิภาพของโปรแกรมหมายเลขเฉพาะ จุดประสงค์ของคุณในการมอบหมายนี้คือการหยุดโปรแกรมให้น้อยที่สุดนั่นคือทำให้มันช้าลง ทั้งสองนี้เป็นโปรแกรมที่ใช้ CPU มาก ใช้เวลาสองสามวินาทีในการทำงานบนพีซีในห้องปฏิบัติการของเรา คุณไม่สามารถเปลี่ยนอัลกอริทึม ในการ deoptimize โปรแกรมใช้ความรู้ของคุณในการทำงานของไปป์ไลน์ Intel i7 ลองจินตนาการถึงวิธีการสั่งซื้อเส้นทางการสอนใหม่เพื่อแนะนำ WAR, RAW และอันตรายอื่น ๆ คิดถึงวิธีลดประสิทธิภาพของแคชให้เล็กที่สุด ไร้ความสามารถอย่างบ้าคลั่ง ที่ได้รับมอบหมายให้เลือกโปรแกรม Whetstone หรือ Monte-Carlo ความคิดเห็นแคชประสิทธิภาพส่วนใหญ่จะใช้เฉพาะกับ Whetstone แต่ฉันเลือกโปรแกรมจำลอง Monte-Carlo: // Un-modified baseline for pessimization, as given in the assignment #include <algorithm> // Needed for the "max" function #include <cmath> #include …

12
วิธีการรวบรวม Tensorflow ด้วยคำแนะนำ SSE4.2 และ AVX
นี่คือข้อความที่ได้รับจากการรันสคริปต์เพื่อตรวจสอบว่า Tensorflow ทำงานหรือไม่: I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled …

3
retpoline คืออะไรและทำงานอย่างไร
เพื่อลดกับเคอร์เนลหรือหน่วยความจำการเปิดเผยกระบวนการข้าม (คนปีศาจโจมตี), ลินุกซ์เคอร์เนล1จะได้รับการรวบรวมกับตัวเลือกใหม่ , -mindirect-branch=thunk-externแนะนำให้รู้จักกับgccการดำเนินการโทรทางอ้อมผ่านสิ่งที่เรียกว่าretpoline สิ่งนี้ดูเหมือนจะเป็นคำที่ประดิษฐ์ขึ้นใหม่เนื่องจากการค้นหาของ Google เปิดใช้งานเมื่อไม่นานมานี้เท่านั้น (โดยทั่วไปแล้วทั้งหมดในปี 2561) retpoline คืออะไรและป้องกันการเปิดเผยข้อมูลเคอร์เนลล่าสุดได้อย่างไร 1มันไม่ได้เป็นลินุกซ์ที่เฉพาะเจาะจง - โครงสร้างที่คล้ายกันหรือเหมือนกันดูเหมือนจะใช้เป็นส่วนหนึ่งของกลยุทธ์การลดผลกระทบในระบบปฏิบัติการอื่น ๆ

10
ภาษาแอสเซมบลีของมัลติคอร์มีลักษณะอย่างไร
กาลครั้งหนึ่งเมื่อต้องการเขียนแอสเซมเบลอร์ x86 คุณจะมีคำแนะนำที่ระบุ "โหลดการลงทะเบียน EDX ด้วยค่า 5", "การเพิ่ม EDX" การลงทะเบียนเป็นต้น ด้วยซีพียูสมัยใหม่ที่มี 4 คอร์ (หรือมากกว่านั้น) ที่ระดับรหัสเครื่องมันดูเหมือนกับซีพียูที่แยกกัน 4 ตัว (เช่นมีเรจิสเตอร์ "EDX" ที่แตกต่างกัน 4 ตัว)? หากเป็นเช่นนั้นเมื่อคุณพูดว่า "การเพิ่มการลงทะเบียน EDX" การพิจารณาการลงทะเบียน EDX ของ CPU ใดจะเพิ่มขึ้น มีแนวคิด "บริบทของ CPU" หรือ "เธรด" ในแอสเซมเบลอร์ x86 หรือไม่? การสื่อสาร / การซิงโครไนซ์ระหว่างแกนทำงานอย่างไร หากคุณกำลังเขียนระบบปฏิบัติการกลไกใดที่จะถูกเปิดเผยผ่านฮาร์ดแวร์เพื่อให้คุณสามารถกำหนดเวลาดำเนินการบนแกนที่ต่างกันได้ เป็นคำสั่งพิเศษที่มีสิทธิพิเศษหรือไม่? หากคุณกำลังเขียนการเพิ่มประสิทธิภาพ VM / คอมไพเลอร์ bytecode สำหรับ CPU …
243 assembly  x86  cpu  multicore  smp 

3
จะรันโปรแกรมโดยไม่มีระบบปฏิบัติการได้อย่างไร?
คุณรันโปรแกรมด้วยตัวเองโดยไม่ต้องใช้ระบบปฏิบัติการได้อย่างไร คุณสามารถสร้างแอสเซมบลีโปรแกรมที่คอมพิวเตอร์สามารถโหลดและรันเมื่อเริ่มต้นเช่นบูตคอมพิวเตอร์จากแฟลชไดรฟ์และรันโปรแกรมที่อยู่บน CPU หรือไม่

8
ตัวชี้ฐานและตัวชี้สแต็คคืออะไร? พวกเขาทำในสิ่งที่ชี้?
การใช้ตัวอย่างนี้มาจากวิกิพีเดียซึ่ง DrawSquare () เรียก DrawLine () (โปรดทราบว่าแผนภาพนี้มีที่อยู่สูงที่ด้านล่างและที่อยู่ต่ำที่ด้านบน) ใครสามารถอธิบายฉันว่าอะไรebpและespอยู่ในบริบทนี้บ้าง จากสิ่งที่ฉันเห็นฉันจะบอกว่าตัวชี้สแต็คชี้ไปที่ด้านบนสุดของสแต็กเสมอและตัวชี้พื้นฐานไปยังจุดเริ่มต้นของฟังก์ชันปัจจุบันหรือไม่ หรืออะไร? แก้ไข: ฉันหมายถึงสิ่งนี้ในบริบทของโปรแกรม windows edit2: และมันeipทำงานอย่างไรเช่นกัน? edit3:ฉันมีรหัสต่อไปนี้จาก MSVC ++: var_C= dword ptr -0Ch var_8= dword ptr -8 var_4= dword ptr -4 hInstance= dword ptr 8 hPrevInstance= dword ptr 0Ch lpCmdLine= dword ptr 10h nShowCmd= dword ptr 14h พวกเขาทั้งหมดดูเหมือนจะเป็น dwords ดังนั้นจึงใช้เวลา 4 …
225 c++  c  assembly  x86 

5
สถาปัตยกรรม ARM แตกต่างจาก x86 อย่างไร [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน4 ปีที่แล้ว ปรับปรุงคำถามนี้ สถาปัตยกรรม x86 ได้รับการออกแบบมาเป็นพิเศษเพื่อทำงานกับแป้นพิมพ์ในขณะที่ ARM คาดว่าจะเป็นมือถือ ความแตกต่างที่สำคัญระหว่างสองคืออะไร
192 x86  arm 

3
เหตุใด GCC จึงสร้างแอสเซมบลีที่ต่างกันอย่างสิ้นเชิงสำหรับรหัส C เกือบเหมือนกัน
ในขณะที่เขียนเพิ่มประสิทธิภาพftolการทำงานของผมพบว่าพฤติกรรมแปลก ๆ GCC 4.6.1บางอย่างใน ให้ฉันแสดงรหัสก่อน (เพื่อความชัดเจนฉันได้ทำเครื่องหมายความแตกต่าง): fast_trunc_one, C: int fast_trunc_one(int i) { int mantissa, exponent, sign, r; mantissa = (i & 0x07fffff) | 0x800000; exponent = 150 - ((i >> 23) & 0xff); sign = i & 0x80000000; if (exponent < 0) { r = mantissa << -exponent; /* diff …

4
จะเกิดอะไรขึ้นเมื่อโปรแกรมคอมพิวเตอร์ทำงาน
ฉันรู้ทฤษฎีทั่วไป แต่ไม่สามารถอธิบายรายละเอียดได้ ฉันรู้ว่าโปรแกรมอยู่ในหน่วยความจำรองของคอมพิวเตอร์ เมื่อโปรแกรมเริ่มการทำงานมันจะถูกคัดลอกไปยัง RAM ทั้งหมด จากนั้นตัวประมวลผลจะดึงคำแนะนำสองสามครั้ง (ขึ้นอยู่กับขนาดของบัส) ในแต่ละครั้งทำให้พวกเขาลงทะเบียนและดำเนินการได้ ฉันยังรู้ว่าโปรแกรมคอมพิวเตอร์ใช้หน่วยความจำสองชนิด: stack และ heap ซึ่งเป็นส่วนหนึ่งของหน่วยความจำหลักของคอมพิวเตอร์ สแต็กใช้สำหรับหน่วยความจำที่ไม่ไดนามิกและฮีปสำหรับหน่วยความจำแบบไดนามิก (ตัวอย่างเช่นทุกอย่างที่เกี่ยวข้องกับnewโอเปอเรเตอร์ใน C ++) สิ่งที่ฉันไม่เข้าใจคือสิ่งที่ทั้งสองเชื่อมต่อกัน สแต็คใช้ในการดำเนินการตามคำแนะนำ ณ จุดใด คำแนะนำจาก RAM ไปจนถึงสแต็คไปยังรีจิสเตอร์?

3
สิ่งที่โปรแกรมเมอร์ทุกคนควรรู้เกี่ยวกับหน่วยความจำ
ฉันสงสัยว่า Ulrich Drepper เป็นเท่าใดโปรแกรมเมอร์ทุกคนควรทราบเกี่ยวกับหน่วยความจำจากปี 2007 ยังคงใช้ได้ ฉันไม่สามารถหาเวอร์ชั่นที่ใหม่กว่า 1.0 หรือ errata ได้

9
ความแตกต่างระหว่างกับดักและขัดจังหวะคืออะไร?
ความแตกต่างระหว่างกับดักและขัดจังหวะคืออะไร? หากคำศัพท์นั้นแตกต่างกันสำหรับระบบที่แตกต่างกันพวกมันหมายถึงอะไรใน x86?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.